Целевые положения и ориентации относительно автомобиля, оборудованного датчиком
возвращает положения всех целей в ведущем сценарии относительно агента автомобиля, оборудованного датчиком, poses
= targetPoses(ac
)ac
. Дополнительную информацию см. в Автомобиле, оборудованном датчиком и Целях.
В простом ведущем сценарии получите положения целевых транспортных средств в системе координат автомобиля, оборудованного датчиком. Затем преобразуйте эти положения назад в мировые координаты ведущего сценария.
Создайте ведущий сценарий.
scenario = drivingScenario;
Создайте целевых агентов.
actor(scenario,'ClassID',1, ... 'Position',[10 20 30], ... 'Velocity',[12 113 14], ... 'Yaw',54, ... 'Pitch',25, ... 'Roll',22, ... 'AngularVelocity',[24 42 27]); actor(scenario,'ClassID',1, ... 'Position',[17 22 12], ... 'Velocity',[19 13 15], ... 'Yaw',45, ... 'Pitch',52, ... 'Roll',2, ... 'AngularVelocity',[42 24 29]);
Добавьте агента автомобиля, оборудованного датчиком.
egoActor = actor(scenario,'ClassID',1, ... 'Position',[1 2 3], ... 'Velocity',[1.2 1.3 1.4], ... 'Yaw',4, ... 'Pitch',5, ... 'Roll',2, ... 'AngularVelocity',[4 2 7]);
Используйте actorPoses
функционируйте, чтобы возвратить положения всех агентов в сценарии. Изложите свойства (положение, скорость и ориентация) находятся в мировых координатах ведущего сценария. Сохраните целевых агентов в отдельную переменную и смотрите положение первого целевого агента.
allPoses = actorPoses(scenario); targetPosesScenarioCoords = allPoses(1:2); targetPosesScenarioCoords(1)
ans = struct with fields:
ActorID: 1
Position: [10 20 30]
Velocity: [12 113 14]
Roll: 22
Pitch: 25
Yaw: 54
AngularVelocity: [24 42 27]
Используйте driving.scenario.targetsToEgo
функционируйте, чтобы преобразовать целевые положения в эгоцентрические координаты агента эго. Смотрите положение первого агента.
targetPosesEgoCoords = driving.scenario.targetsToEgo(targetPosesScenarioCoords,egoActor); targetPosesEgoCoords(1)
ans = struct with fields:
ActorID: 1
Position: [7.8415 18.2876 27.1675]
Velocity: [18.6826 112.0403 9.2960]
Roll: 16.4327
Pitch: 23.2186
Yaw: 47.8114
AngularVelocity: [-3.3744 47.3021 18.2569]
В качестве альтернативы используйте targetPoses
функция, чтобы получить все целевые положения агента в координатах автомобиля, оборудованного датчиком. Отобразите первое целевое положение, которое совпадает с ранее расчетным положением.
targetPosesEgoCoords = targetPoses(egoActor); targetPosesEgoCoords(1)
ans = struct with fields:
ActorID: 1
ClassID: 1
Position: [7.8415 18.2876 27.1675]
Velocity: [18.6826 112.0403 9.2960]
Roll: 16.4327
Pitch: 23.2186
Yaw: 47.8114
AngularVelocity: [-3.3744 47.3021 18.2569]
Используйте driving.scenario.targetsToScenario
преобразовывать цель позирует назад к мировым координатам сценария. Отобразите первое целевое положение, которое совпадает с исходным целевым положением.
targetPosesScenarioCoords = driving.scenario.targetsToScenario(targetPosesEgoCoords,egoActor); targetPosesScenarioCoords(1)
ans = struct with fields:
ActorID: 1
ClassID: 1
Position: [10.0000 20.0000 30.0000]
Velocity: [12.0000 113.0000 14.0000]
Roll: 22
Pitch: 25.0000
Yaw: 54
AngularVelocity: [24.0000 42.0000 27.0000]
Получите положения целей, которые являются в максимальной области значений датчика, смонтированного к автомобилю, оборудованному датчиком.
Создайте ведущий сценарий. Сценарий содержит 75-метровую прямую дорогу, автомобиль, оборудованный датчиком и два целевых транспортных средства.
Самое близкое целевое транспортное средство на расстоянии в 45 метров и в том же маршруте как автомобиль, оборудованный датчиком.
Самое дальнее целевое транспортное средство на расстоянии в 65 метров и в противоположном маршруте автомобиля, оборудованного датчиком.
Постройте ведущий сценарий.
scenario = drivingScenario; roadCenters = [0 0 0; 75 0 0]; laneSpecification = lanespec([1 1]); road(scenario,roadCenters,'Lanes',laneSpecification,'Name','Road'); egoVehicle = vehicle(scenario, ... 'ClassID',1, ... 'Position',[4 -2 0], ... 'Name','Ego'); vehicle(scenario, ... 'ClassID',1, ... 'Position',[45 -1.7 0], ... 'Name','Near Target'); vehicle(scenario, ... 'ClassID',1, ... 'Position',[65 2 0], ... 'Yaw',-180, ... 'Name','Far Target'); plot(scenario)
Создайте датчик видения, смонтированный к переднему бамперу автомобиля, оборудованного датчиком. Сконфигурируйте датчик, чтобы иметь максимальную область значений обнаружения 50 метров.
sensor = visionDetectionGenerator('SensorIndex',1, ... 'SensorLocation',[3.7 0], ... 'MaxRange',50);
Постройте основы транспортных средств и зону охвата датчика. Самое близкое целевое транспортное средство в области значений датчика, но самое дальнее целевое транспортное средство не.
bep = birdsEyePlot; olPlotter = outlinePlotter(bep); [position,yaw,length,width,originOffset,color] = targetOutlines(egoVehicle); plotOutline(olPlotter,position,yaw,length,width, ... 'OriginOffset',originOffset,'Color',color) caPlotter = coverageAreaPlotter(bep,'DisplayName','Coverage area','FaceColor','blue'); mountPosition = sensor.SensorLocation; range = sensor.MaxRange; orientation = sensor.Yaw; fieldOfView = sensor.FieldOfView(1); plotCoverageArea(caPlotter,mountPosition,range,orientation,fieldOfView);
Получите положения целей, которые являются в области значений датчика. Структура output содержит положение только самой близкой цели, которая на расстоянии в менее чем 50 метров от автомобиля, оборудованного датчиком.
poses = targetPoses(egoVehicle,range)
poses = struct with fields:
ActorID: 2
ClassID: 1
Position: [41 0.3000 0]
Velocity: [0 0 0]
Roll: 0
Pitch: 0
Yaw: 0
AngularVelocity: [0 0 0]
ac
— АгентActor
возразите | Vehicle
объектАгент, принадлежащий drivingScenario
объект в виде Actor
или Vehicle
объект. Чтобы создать эти объекты, используйте actor
и vehicle
функции, соответственно.
range
— Круговая область значений вокруг автомобиля, оборудованного датчиком Круговая область значений вокруг агента автомобиля, оборудованного датчиком в виде неотрицательного действительного скаляра. targetPoses
функция возвращает только положения целей, которые лежат в этой области значений. Модули исчисляются в метрах.
poses
— Целевые положенияЦелевые положения, в координатах автомобиля, оборудованного датчиком, возвратились как структура или как массив структур. Положение агента автомобиля, оборудованного датчиком, ac
, не включен.
target pose задает положение, скорость и ориентацию цели в координатах автомобиля, оборудованного датчиком. Целевые положения также включают скорости изменения в положение агента и ориентацию.
Каждая структура положения имеет эти поля.
Поле | Описание |
---|---|
ActorID | Заданный сценарием идентификатор агента в виде положительного целого числа. |
ClassID | Идентификатор классификации в виде неотрицательного целого числа. 0 представляет объект неизвестного или неприсвоенного класса. |
Position | Положение агента в виде вектора с действительным знаком из формы [x y z]. Модули исчисляются в метрах. |
Velocity | Скорость (v) агента в x - y - и z - направление в виде вектора с действительным знаком из формы [v x v y v z]. Модули исчисляются в метрах в секунду. |
Roll | Угол вращения агента в виде действительного скаляра. Модули в градусах. |
Pitch | Передайте угол агента в виде действительного скаляра. Модули в градусах. |
Yaw | Угол отклонения от курса агента в виде действительного скаляра. Модули в градусах. |
AngularVelocity | Скорость вращения (ω) агента в x - y - и z - направление в виде вектора с действительным знаком из формы [ω x ω y ω z]. Модули в градусах в секунду. |
Для полных определений этих полей структуры смотрите actor
и vehicle
функции.
В ведущем сценарии можно задать одного агента как наблюдатель всех других агентов, похожих на то, как драйвер автомобиля наблюдает все другие автомобили. Агент наблюдателя называется ego actor или, более конкретно, ego vehicle. С точки зрения автомобиля, оборудованного датчиком все другие агенты (такие как транспортные средства и пешеходы) являются наблюдаемыми агентами, названными targets. Координаты автомобиля, оборудованного датчиком сосредоточены и ориентированы со ссылкой на автомобиль, оборудованный датчиком. Координаты ведущего сценария являются мировыми координатами.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.