exponenta event banner

lidarPointCloudGenerator

Создание данных облака точек лидара для управляющего сценария

Описание

lidarPointCloudGenerator Система object™ генерирует сигналы обнаружения от лидарного датчика, установленного на эго-транспортном средстве. Все обнаружения относятся к системе координат эго-транспортного средства или установленного на транспортном средстве датчика. Вы можете использовать lidarPointCloudGenerator объект в сценарии, содержащем актеры и траектории, которые можно создать с помощью drivingScenario объект. Используя модель статистического датчика, lidarPointCloudGenerator объект может моделировать реальные обнаружения с добавленным случайным шумом.

Чтобы создать облака лидарных точек:

  1. Создать lidarPointCloudGenerator и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

lidar = lidarPointCloudGenerator создает lidarPointCloudGenerator объект со значениями свойств по умолчанию для создания облака точек для лидарного датчика.

пример

lidar = lidarPointCloudGenerator(Name,Value) задает свойства, используя одну или несколько пар имя-значение. Например, lidarPointCloudGenerator('DetectionCoordinates','Sensor Cartesian','MaxRange',200) создает генератор облака точек лидара, который сообщает об обнаружениях в декартовой системе координат датчика и имеет максимальный диапазон обнаружения 200 метров. Заключите каждое имя свойства в кавычки.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Расположение центра датчика лидара, указанного как [x y] вектор. SensorLocation и Height свойства определяют координаты лидарного датчика относительно системы координат эго-транспортного средства. Значение по умолчанию соответствует датчику лидара, установленному на седане, в центре переднего края крыши. Единицы в метрах.

Пример: [4 0.1]

Типы данных: double

Уникальный идентификатор датчика, указанный как положительное целое число. Это свойство различает обнаруженные сигналы, поступающие от различных датчиков в мультисенсорной системе.

Пример: 5

Типы данных: double

Требуемый интервал времени между обновлениями датчика, указанный как положительный действительный скаляр. drivingScenario объект вызывает генератор облака точек лидара через регулярные интервалы времени. lidarPointCloudGenerator объект генерирует новые обнаружения через интервалы, определенные UpdateInterval собственность. Значение UpdateInterval свойство должно быть целым числом, кратным интервалу времени моделирования. Обновления, запрошенные от датчика между интервалами обновления, не содержат обнаружений. Единицы измерения в секундах.

Пример: 5

Типы данных: double

Высота датчика над плоскостью грунта транспортного средства, заданная как положительный реальный скаляр. Значение по умолчанию соответствует датчику лидара, установленному на седане, в центре переднего края крыши. Единицы в метрах.

Пример: 1.5

Типы данных: double

Угол рыскания лидарного датчика, заданный как действительный скаляр. Угол рыскания - это угол между центральной линией эго-транспортного средства и нисходящей осью лидарного датчика. Положительный угол рыскания соответствует повороту по часовой стрелке при взгляде в положительном направлении оси z системы координат эго-транспортного средства. Единицы измерения в градусах.

Пример: -4

Типы данных: double

Угол тангажа лидарного датчика, определяемый как действительный скаляр. Угол наклона - это угол между нисходящей осью лидарного датчика и плоскостью x-y системы координат эго-транспортного средства. Положительный угол наклона соответствует повороту по часовой стрелке при взгляде в положительном направлении оси y системы координат эго-транспортного средства. Единицы измерения в градусах.

Пример: 3

Типы данных: double

Угол крена лидарного датчика, заданный как действительный скаляр. Угол крена - это угол поворота нисходящей оси лидарного датчика вокруг оси x системы координат эго транспортного средства. Положительный угол крена соответствует повороту по часовой стрелке при взгляде в положительном направлении оси X системы координат. Единицы измерения в градусах.

Пример: -4

Типы данных: double

Максимальный диапазон обнаружения, заданный как положительный действительный скаляр. Датчик не может обнаружить дороги и актеры за пределами этого диапазона. Единицы в метрах.

Пример: 200

Типы данных: double

Точность измерений дальности, заданная как положительный действительный скаляр. Единицы в метрах.

Пример: 0.01

Типы данных: single | double

Азимутальное разрешение лидара, определяемое как положительный действительный скаляр. Разрешение по азимуту определяет минимальное разделение по азимутальному углу, при котором лидар может различать две цели. Единицы измерения в градусах.

Пример: 0.5

Типы данных: single | double

Разрешение уровня лидара, определяемое как положительный действительный скаляр. Разрешение по отметке определяет минимальное разделение по углу возвышения, при котором лидар может различать две цели. Единицы измерения в градусах.

Пример: 0.5

Типы данных: single | double

Азимутальные пределы лидара, задаваемые как действительный вектор вида 1 на 2 [min, max]. Единицы измерения в градусах.

Пример: [-100 50]

Типы данных: single | double

Пределы отметок лидара, заданные как действительный вектор формы 1 на 2 [min, max]. Единицы измерения в градусах.

Пример: [-10 10]

Типы данных: single | double

Включить добавление шума к измерениям лидарного датчика, указанного как true или false. Установить для этого свойства значение true для добавления шума к измерениям датчика. В противном случае измерения не имеют шума.

Типы данных: logical

Вывод сгенерированных данных в виде организованного облака точек, указанного как true или false. Установить для этого свойства значение true для вывода организованного облака точек. В противном случае выходные данные являются неорганизованными.

Типы данных: logical

Включить транспортное средство ego в сформированное облако точек, указанное как true или false. Установить для этого свойства значение true для включения эго-транспортного средства в выходные данные. В противном случае облако выходных точек не имеет носителя эго.

Типы данных: logical

Включить данные дорожной сетки в сформированное облако точек, указанное как true или false. Установить для этого свойства значение true для формирования данных облака точек из входной дорожной сетки, rdMesh. В противном случае в облаке выходных точек отсутствуют данные дорожной сетки, и невозможно указать rdMesh.

Типы данных: logical

ActorID ego-транспортного средства, заданного как положительный целочисленный скаляр. ActorID - уникальный идентификатор актера.

Пример: 4

Типы данных: single | double

Система координат сообщаемых обнаружений, заданная как одно из следующих значений:

  • 'Ego Cartesian' - Обнаружение регистрируется в декартовой системе координат эго-транспортного средства.

  • 'Sensor Cartesian' - Обнаружение сообщается в декартовой системе координат датчика.

Типы данных: char | string

Профили субъектов, указанные как структура или массив структур. Каждая структура содержит физические и радиолокационные характеристики актера.

  • Если ActorProfiles является единой структурой, все действующие лица lidarPointCloudGenerator объект использует этот профиль.

  • Если ActorProfiles является массивом, каждый актер, переданный в объект, должен иметь уникальный профиль актера.

Чтобы создать массив структур для сценария управления, используйте actorProfiles функция. В таблице показаны допустимые поля структуры. Если поле не указано, для полей устанавливаются значения по умолчанию. Если в объект не передаются актеры, то ActorID поле не включено.

ОбластьОписание
ActorIDОпределяемый сценарием идентификатор субъекта, указанный как положительное целое число.
ClassIDИдентификатор классификации, указанный как неотрицательное целое число. 0 представляет объект неизвестного или неназначенного класса.
LengthДлина актера, заданная как положительный действительный скаляр. Единицы в метрах.
WidthШирина актера, заданная как положительный действительный скаляр. Единицы в метрах.
HeightВысота актера, заданная как положительный действительный скаляр. Единицы в метрах.
OriginOffsetСмещение центра вращения актера от его геометрического центра, заданного как действительный вектор вида [x, y, z]. Центр вращения, или начало координат, расположен в нижнем центре актера. Для транспортных средств центром вращения является точка на земле под центром задней оси. Единицы в метрах.
MeshVerticesСетка вершин актера, заданная как n-на-3 вещественно-значная матрица вершин. Каждая строка матрицы определяет точку в 3-D пространстве.
MeshFacesСетка граней актера, заданная как матрица m-на-3 целых чисел. Каждая строка MeshFaces представляет треугольник, определяемый идентификаторами вершин, которые являются номерами строк вершин.
RCSPatternСхема сечения РЛС (RCS) действующего лица, указанная как numel(RCSElevationAngles)около-numel(RCSAzimuthAngles) вещественно-значная матрица. Единицы измерения в децибелах на квадратный метр.
RCSAzimuthAnglesАзимутальные углы, соответствующие рядам RCSPattern, задается как вектор значений в диапазоне [-180, 180]. Единицы измерения в градусах.
RCSElevationAnglesУглы места, соответствующие рядам RCSPattern, задается как вектор значений в диапазоне [-90, 90]. Единицы измерения в градусах.

Полные определения полей структуры см. в разделе actor и vehicle функции.

Использование

Описание

ptCloud = lidar(actors,rdMesh,simTime) создает статистическую модель датчика для создания облака точек лидара, ptCloud, по измерениям датчиков действующих лиц, actors, в текущее время моделирования, simTime. Один extendedObjectMesh объект, rdMesh, содержит дорожные данные вокруг эго-транспортного средства.

пример

[ptCloud,isValidTime] = lidar(actors,rdMesh,simTime) дополнительно возвращает isValidTime, который указывает, создается ли облако точек в указанное время моделирования.

[ptCloud,isValidTime,clusters] = lidar(actors,rdMesh,simTime) дополнительно возвращает clusters, который содержит clusters классификационные данные сформированного облака точек.

[___] = lidar(actors,simTime) исключает данные дорожной сетки из сформированного облака точек, отключив спецификацию rdMesh вход. С помощью этого синтаксиса можно вернуть любой вывод, описанный в предыдущих синтаксисах.

Чтобы исключить данные дорожной сетки, задайте значение HasRoadsInputPort свойство для false.

Входные аргументы

развернуть все

Объект сценария представляет собой структуру или массив структуры. Каждая структура соответствует актеру. Эту структуру можно создать с помощью actorPoses функция. Эти структуры можно также создать вручную. В таблице показаны свойства, используемые объектом для создания обнаружений. Все остальные actor свойства игнорируются.

ОбластьОписание
ActorID

Определяемый сценарием идентификатор субъекта, указанный как положительное целое число.

Position

Положение актера, определяемое как действительный вектор вида [x y z]. Единицы в метрах.

Velocity

Скорость (v) актера в направлениях x-y и z, заданная как действительный вектор вида [vx vy vz]. Единицы измерения в метрах в секунду.

Roll

Угол крена актера, заданный как действительный скаляр. Единицы измерения в градусах.

Pitch

Угол тангажа актера, определяемый как действительный скаляр. Единицы измерения в градусах.

Yaw

Угол рыскания актера, определяемый как действительный скаляр. Единицы измерения в градусах.

AngularVelocity

Угловая скорость (λ) актера в направлениях x -, y - и z, заданная как действительный вектор вида [startx starty ü z]. Единицы измерения в градусах в секунду.

Полные определения полей структуры см. в разделе actor и vehicle функции.

Типы данных: struct

Сетчатое представление дорог вблизи актера, указанное как extendedObjectMesh объект.

Текущее время моделирования, указанное как положительный действительный скаляр. drivingScenario объект вызывает генератор лидарного облака точек через регулярные интервалы времени для создания новых облаков точек через интервалы, определенные UpdateInterval собственность. Значение UpdateInterval свойство должно быть целым числом, кратным интервалу времени моделирования. Обновления, запрошенные от датчика между интервалами обновления, не создают облако точек. Единицы измерения в секундах.

Пример: 10.5

Типы данных: double

Выходные аргументы

развернуть все

Данные облака точек, возвращенные как pointCloud объект.

Допустимое время создания облака точек, возвращаемое как 0 или 1. isValidTime является 0 когда обновления запрашиваются в моменты времени между интервалами обновления, указанными в UpdateInterval.

Типы данных: logical

Классификационные данные сформированного облака точек, возвращенные в виде вектора N-by-2. Вектор определяет идентификаторы цели, из которой было создано облако точек. N равно Count имущества pointCloud объект. Вектор содержит ActorID в первом столбце и ClassID во втором столбце.

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

isLockedОпределить, используется ли объект System
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Создание данных облака точек лидара для сценария управления с несколькими субъектами с помощью lidarPointCloudGenerator Системный объект. Создание сценария управления с помощью drivingScenario объект. Он содержит эго-транспортное средство, пешеходное и два других транспортных средства.

Создание и печать сценария вождения с несколькими транспортными средствами

Создайте сценарий управления.

scenario = drivingScenario;

Добавьте прямую дорогу к сценарию движения. Дорога имеет по одной полосе в каждом направлении.

roadCenters = [0 0 0; 70 0 0];
laneSpecification = lanespec([1 1]);
road(scenario,roadCenters,'Lanes',laneSpecification);

Добавьте транспортное средство ego в сценарий вождения.

egoVehicle = vehicle(scenario,'ClassID',1,'Mesh',driving.scenario.carMesh);
waypoints = [1 -2 0; 35 -2 0];
smoothTrajectory(egoVehicle,waypoints,10);

Добавьте грузовик, пешехода и велосипед в сценарий вождения и постройте график сценария.

truck = vehicle(scenario,'ClassID',2,'Length', 8.2,'Width',2.5,'Height',3.5, ...
  'Mesh',driving.scenario.truckMesh);
waypoints = [70 1.7 0; 20 1.9 0];
smoothTrajectory(truck,waypoints,15);

pedestrian = actor(scenario,'ClassID',4,'Length',0.24,'Width',0.45,'Height',1.7, ...
  'Mesh',driving.scenario.pedestrianMesh);
waypoints = [23 -4 0; 10.4 -4 0];
smoothTrajectory(pedestrian,waypoints,1.5);

bicycle = actor(scenario,'ClassID',3,'Length',1.7,'Width',0.45,'Height',1.7, ...
  'Mesh',driving.scenario.bicycleMesh);
waypoints = [12.7 -3.3 0; 49.3 -3.3 0];
smoothTrajectory(bicycle,waypoints,5);

plot(scenario,'Meshes','on')

Figure contains an axes. The axes contains 7 objects of type patch, line.

Создание и печать данных облака точек лидара

Создать lidarPointCloudGenerator Системный объект.

lidar = lidarPointCloudGenerator;

Добавьте профили акторов и идентификатор актора эго-транспортного средства из сценария вождения в объект System.

lidar.ActorProfiles = actorProfiles(scenario);
lidar.EgoVehicleActorID = egoVehicle.ActorID;

Постройте график данных облака точек.

bep = birdsEyePlot('Xlimits',[0 70],'YLimits',[-30 30]);
plotter = pointCloudPlotter(bep);
legend('off');
while advance(scenario)
    tgts = targetPoses(egoVehicle);
    rdmesh = roadMesh(egoVehicle);
    [ptCloud,isValidTime] = lidar(tgts,rdmesh,scenario.SimulationTime);
    if isValidTime
        plotPointCloud(plotter,ptCloud);
    end
end

Figure contains an axes. The axes contains 7 objects of type patch, line.

Figure contains an axes. The axes is empty.

Представлен в R2020a