actor

Добавьте актёра в сценарий вождения

Описание

ac = actor(scenario) добавляет Actor объект, ac, к сценарию вождения, scenario. Актёр имеет значения свойств по умолчанию.

Actors кубоиды (коробчатые формы), которые представляют объекты в движении, такие как автомобили, пешеходы и велосипеды. Актёры могут также представлять стационарные препятствия, которые могут влиять на движение других актёров, такие как барьеры. Для получения дополнительной информации о том, как определяются актёры, смотрите Позиции актёра и транспортного средства и Размерности.

пример

ac = actor(scenario,Name,Value) устанавливает свойства актёра с помощью одного или нескольких аргументов пары "имя-значение". Для примера можно задать положение, скорость, размерности и ориентацию актёра. Можно также задать время для того, чтобы актёр нерестился или деспотичился в сценарии.

Примечание

Можно сконфигурировать актёров в сценарии вождения, чтобы они несли и демпфировали, а затем импортировать связанную drivingScenario объект в Driving Scenario Designer прил. Приложение считает первого актёра, созданного в сценарии вождения, эго-актером и не позволяет эго-актёру ни нереститься, ни деспотичиться в сценарии.

Примеры

свернуть все

Создайте сценарий вождения, содержащий изогнутую дорогу, две прямые дороги и двух актёров: автомобиль и велосипед. Оба актёра двигаются по дороге на 60 секунд.

Создайте объект сценария вождения.

scenario = drivingScenario('SampleTime',0.1','StopTime',60);

Создайте изогнутую дорогу с помощью точек центра дороги, следующих за дугой окружности с радиусом 800 метров. Дуга начинается с 0 °, заканчивается с 90 ° и дискретизируется с шагами 5 °.

angs = [0:5:90]';
R = 800;
roadcenters = R*[cosd(angs) sind(angs) zeros(size(angs))];
roadwidth = 10;
road(scenario,roadcenters,roadwidth);

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

roadcenters = [700 0 0; 100 0 0];
road(scenario,roadcenters)
ans = 
  Road with properties:

           Name: ""
         RoadID: 2
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [2x1 double]

roadcenters = [400 400 0; 0 0 0];
road(scenario,roadcenters)
ans = 
  Road with properties:

           Name: ""
         RoadID: 3
    RoadCenters: [2x3 double]
      RoadWidth: 6
      BankAngle: [2x1 double]

Получите контуры дорог.

rbdry = roadBoundaries(scenario);

Добавьте в сценарий автомобиль и велосипед. Поместите автомобиль в начале первой прямой дороги.

car = vehicle(scenario,'ClassID',1,'Position',[700 0 0], ...
    'Length',3,'Width',2,'Height',1.6);

Расположите велосипед дальше по дороге.

bicycle = actor(scenario,'ClassID',3,'Position',[706 376 0]', ...
    'Length',2,'Width',0.45,'Height',1.5);

Постройте график сценария.

plot(scenario,'Centerline','on','RoadCenters','on');
title('Scenario');

Figure contains an axes. The axes with title Scenario contains 1219 objects of type patch, line.

Отображение положений и профилей актёра.

poses = actorPoses(scenario)
poses=2×1 struct array with fields:
    ActorID
    Position
    Velocity
    Roll
    Pitch
    Yaw
    AngularVelocity

profiles = actorProfiles(scenario)
profiles=2×1 struct array with fields:
    ActorID
    ClassID
    Length
    Width
    Height
    OriginOffset
    MeshVertices
    MeshFaces
    RCSPattern
    RCSAzimuthAngles
    RCSElevationAngles

Создайте сценарий вождения. Установите время остановки для сценария равным 3 секундам.

scenario = drivingScenario('StopTime',3);

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

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

Добавьте другую дорогу, которая пересекает первую дорогу под прямым углом, чтобы сформировать Т-образную форму.

roadCenters = [20.3 38.4 0; 20 3 0];
laneSpecification = lanespec(2);
road(scenario,roadCenters,'Lanes',laneSpecification)
ans = 
  Road with properties:

           Name: ""
         RoadID: 2
    RoadCenters: [2x3 double]
      RoadWidth: 7.3500
      BankAngle: [2x1 double]

Добавьте автомобиля , оборудованного датчиком к сценарию и определите его путевые точки. Установите скорость автомобиля , оборудованного датчиком 20 м/с и сгенерируйте траектории для автомобиля , оборудованного датчиком.

egoVehicle = vehicle(scenario,'ClassID',1, ...
                    'Position',[1.5 2.5 0]);
waypoints = [2 3 0; 13 3 0;
            21 3 0; 31 3 0;
            43 3 0; 47 3 0];
speed = 20;
trajectory(egoVehicle,waypoints,speed)

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

nonEgoactor1 = actor(scenario,'ClassID',1, ...
                'Position',[22 30 0],'EntryTime',[0.2 1.4],'ExitTime',[1.0 2.0]);

Задайте путевые точки для актёра, не являющегося эго. Установите скорость актёра, не являющегося эго, равную 30 м/с и сгенерируйте его траектории.

waypoints = [22 35 0; 22 23 0;
            22 13 0; 22 7 0;
            18 -0.3 0; 12 -0.8 0; 3 -0.8 0];
speed = 30;
trajectory(nonEgoactor1,waypoints,speed)

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

nonEgoactor2 = actor(scenario,'ClassID',1, ...
                'Position',[48 -1 0],'EntryTime',2);

Задайте точки пути для второго актёра, не являющегося эго. Установите скорость актёра равную 50 м/с и сгенерируйте его траектории.

waypoints = [48 -1 0; 42 -1 0; 28 -1 0;
            16 -1 0; 12 -1 0];
speed = 50;
trajectory(nonEgoactor2,waypoints,speed)

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

fig = figure;
set(fig,'Position',[0 0 600 600])
movegui(fig,'center')
hViewPnl = uipanel(fig,'Position',[0 0 1 1],'Title','Actor Spawn and Despawn');
hPlt = axes(hViewPnl);

Постройте график сценария и запустите симуляцию. Наблюдайте, как актёры, не являющиеся эго, порождают и демпфируют в сценарии во время симуляции.

plot(scenario,'Waypoints','on','Parent',hPlt)
while advance(scenario)
    pause(0.1)
end

Figure contains an axes and an object of type uipanel. The axes contains 9 objects of type patch, line.

Входные параметры

свернуть все

Сценарий вождения, заданный как drivingScenario объект.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Height',1.7 устанавливает высоту актёра равную 1,7 метра при создании.

Классификационный идентификатор актёра, заданный как разделенная разделенными запятой парами, состоящая из 'ClassID' и неотрицательное целое число.

Задайте ClassID значения для группирования актёров, которые имеют одинаковые размерности, шаблоны поперечного сечения (RCS) или другие свойства. Как лучшая практика, перед добавлением актёров в drivingScenario объект, определите схему классификации актёра, которую вы хотите использовать. Затем при создании актёров задайте ClassID Пара "имя-значение" для установки идентификаторов классификации согласно схеме классификации актёра.

Предположим, что вы хотите создать сценарий, содержащий следующих актёров:

  • Две машины, одна из которых автомобилей , оборудованных датчиком

  • Грузовик

  • Велосипед

  • Джерси барьер вдоль дороги

Код показывает пример схемы классификации для этого сценария, где 1 относится к автомобилям, 2 относится к грузовикам, 3 относится к велосипедам и 5 относится к барьерам для джерси. Автомобили имеют свойства транспортного средства по умолчанию. Грузовик и велосипед имеют размерности типичных грузовика и велосипеда, соответственно.

scenario = drivingScenario;
ego = vehicle(scenario,'ClassID',1);
car = vehicle(scenario,'ClassID',1);
truck = vehicle(scenario,'ClassID',2,'Length',8.2,'Width',2.5,'Height',3.5);
bicycle = actor(scenario,'ClassID',3,'Length',1.7,'Width',0.45,'Height',1.7);
mainRoad = road(scenario,[0 0 0;10 0 0]);
barrier(scenario,mainRoad,'ClassID',5);

Значение по умолчанию ClassID от 0 зарезервирован для объекта неизвестного или неназначенного класса. Если вы планируете импортировать drivingScenario объекты в Driving Scenario Designer приложение, не покидайте ClassID свойство актёров установлено в 0. Приложение не распознает ClassID от 0 для актёров и возвращает ошибку. Вместо этого задайте ClassID значения актёров согласно схеме классификации актёра, используемой в приложении.

ClassIDИмя класса
1Автомобиль
2Грузовик
3Велосипед
4Пешеход
5Джерси-Барьер
6Поручень

Имя актёра, заданное как разделенная разделенными запятой парами, состоящая из 'Name' и вектор символов или строковый скаляр.

Пример: 'Name','Actor1'

Пример: "Name","Actor1"

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

Время входа актёра в сценарий вождения, заданное как разделенная разделенными запятой парами, состоящая из 'EntryTime' и положительная скалярная величина или вектор положительных значений. Модули указаны в секундах, начиная со времени начала сценария.

Задайте этот аргумент пары "имя-значение", чтобы добавить или сделать актёра появляющимся в сценарии вождения в указанное время во время симуляции.

  • Чтобы породить актёра только один раз, задайте время входа как скаляр.

  • Чтобы породить актёра несколько раз, задайте время входа в качестве вектора.

    • Расположите элементы вектора в порядке возрастания.

    • Длина вектора должна совпадать с длиной выходного временного вектора.

  • Если у актёра есть связанное время выхода, то каждое значение времени входа должно быть меньше соответствующего значения времени выхода.

  • Каждое значение времени входа должно быть меньше, чем время остановки сценария. Можно задать время остановки для сценария путем определения значения для 'StopTime' свойство drivingScenario объект.

Пример: 'EntryTime',2

Пример: 'EntryTime',[2 4]

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Время выхода актёра из сценария вождения, заданное как разделенная разделенными запятой парами, состоящая из 'ExitTime' и положительная скалярная величина или вектор положительных значений. Модули указаны в секундах, начиная со времени начала сценария.

Задайте этот аргумент пары "имя-значение", чтобы удалить или заставить актёра исчезнуть из сценария в заданное время во время симуляции.

  • Чтобы депонировать актёра только один раз, задайте время выхода как скаляр.

  • Чтобы отключить актёра несколько раз, задайте время выхода в качестве вектора.

    • Расположите элементы вектора в порядке возрастания.

    • Длина вектора должна совпадать с длиной временного вектора входа.

  • Если у актёра есть связанное время входа, то каждое значение времени выхода должно быть больше соответствующего значения времени входа.

  • Каждое значение времени выхода должно быть меньше, чем время остановки сценария. Можно задать время остановки для сценария путем определения значения для 'StopTime' свойство drivingScenario объект.

Пример: 'ExitTime',3

Пример: 'ExitTime',[3 6]

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Отобразите цвет актёра, заданный как разделенная разделенными запятой парами, состоящая из 'PlotColor' и триплет RGB, шестнадцатеричный цветовой код, название цвета или короткое название цвета.

Актёр появляется в заданном цвете во всех визуализациях программного сценария, включая plot функция, chasePlot функции и функции построения графика birdsEyePlot объекты. Если вы импортируете сценарий в приложение Driving Scenario Designer, то актёр появляется в этом цвете во всех визуализациях приложения. Если вы импортируете сценарий в Simulink®, затем актёр появляется в этом цвете в Bird's-Eye Scope.

Если вы не задаете цвет для актёра, функция присваивает цвет на основе порядка цвета по умолчанию Axes объекты. Для получения дополнительной информации смотрите ColorOrder свойство для Axes объекты.

Для пользовательского цвета укажите триплет RGB или шестнадцатеричный код цвета.

  • Триплет RGB представляет собой трехэлементный вектор-строку, элементы которого определяют интенсивность красных, зеленых и синих компонентов цвета. Интенсивность должна быть в области значений [0,1]; для примера, [0.4 0.6 0.7].

  • Шестнадцатеричный код цвета - это вектор символов или строковый скаляр, который начинается с хэш-символа (#), за которым следуют три или шесть шестнадцатеричных цифр, которые могут варьироваться от 0 на F. Значения не зависят от регистра. Таким образом, цветовые коды '#FF8800', '#ff8800', '#F80', и '#f80' являются эквивалентными.

Кроме того, вы можете задать имена некоторых простых цветов. В этой таблице перечислены именованные опции цвета, эквивалентные триплеты RGB и шестнадцатеричные цветовые коды.

Название цветаКраткое имяТриплет RGBШестнадцатеричный цветовой кодВнешность
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

Вот триплеты RGB и шестнадцатеричные цветовые коды для цветов по умолчанию MATLAB® использует на многих типах графиков.

Триплет RGBШестнадцатеричный цветовой кодВнешность
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

Положение центра актёра, заданное как разделенная разделенными запятой парами, состоящая из 'Position' и [x y z] вектор с реальным значением .

Центр актёра - [L/2 W/2 b], где:

  • L/2 - середина длины актёра L.

  • W/2 является средней точкой W ширины актёра.

  • b - дно кубоида.

Модули измерения указаны в метрах.

Пример: [10;50;0]

Скорость (v) центра актёра в x -, y - и z - направлениях, заданная как разделенная разделенными запятой парами, состоящая из 'Velocity' и вектор [v x v y v z] с реальным значением . The 'Position' Пара "имя-значение" задает центр актёра. Модули указаны в метрах в секунду.

Пример: [-4;7;10]

Угол рыскания актёра, заданный как разделенная разделенными запятой парами, состоящая из 'Yaw' и настоящий скаляр. Yaw - угол поворота актёра вокруг оси z. Рыскание является по часовой стрелке-положительным при взгляде в прямом направлении оси, которая указывает вверх от земли. Поэтому при просмотре актёров из верхней части вниз, таких как на графике птичьего глаза, рыскание происходит против часовой стрелки-положительно. Значения углов заключаются в область значений [-180, 180]. Модули указаны в степенях.

Пример: -0.4

Угол тангажа актёра, заданный как разделенная разделенными запятой парами, состоящая из 'Pitch' и настоящий скаляр. Pitch - угол поворота актёра вокруг оси y и по часовой стрелке-положительный при взгляде в прямом направлении оси. Значения углов заключаются в область значений [-180, 180]. Модули указаны в степенях.

Пример: 5.8

Угол крена актёра, заданный как разделенная разделенными запятой парами, состоящая из 'Roll' и настоящий скаляр. Roll - угол поворота актёра вокруг оси x и по часовой стрелке-положительный при взгляде в прямом направлении оси. Значения углов заключаются в область значений [-180, 180]. Модули указаны в степенях.

Пример: -10

Скорость вращения (ω) актёра, в мировых координатах, задается как разделенная разделенными запятой парами, состоящая из 'AngularVelocity' и вектор [ω x ω y ω z] с реальным значением . Модули указаны в степенях в секунду.

Пример: [20 40 20]

Длина актёра, заданная как разделенная разделенными запятой парами, состоящая из 'Length' и положительный действительный скаляр. Модули измерения указаны в метрах.

Пример: 5.5

Ширина актёра, заданная как разделенная разделенными запятой парами, состоящая из 'Width' и положительный действительный скаляр. Модули измерения указаны в метрах.

Пример: 3.0

Высота актёра, заданная как разделенная разделенными запятой парами, состоящая из 'Height' и положительный действительный скаляр. Модулями являются счетчики.

Пример: 2.1

Расширенный mesh объекта, заданная как extendedObjectMesh объект.

Радиолокационное сечение (RCS) шаблона актёра, заданное как разделенная запятой пара, состоящее из 'RCSPattern' и Q -by P вещественной матрицей. RCS является функцией азимута и углов возвышения, где:

  • Q - количество углов возвышения, заданное 'RCSElevationAngles' Пара "имя-значение".

  • P - количество азимутальных углов, заданное 'RCSAzimuthAngles' Пара "имя-значение".

Модули указаны в децибелах на квадратный метр (дБсм).

Пример: 5.8

Азимутальные углы RCS шаблона актёра, заданные как разделенная разделенными запятой парами, состоящая из 'RCSAzimuthAngles' и P элемент с реальным значением. P - количество азимутальных углов. Значения находятся в области значений [-180 °, 180 °].

Каждый элемент RCSAzimuthAngles определяет угол азимута соответствующего столбца 'RCSPattern' Пара "имя-значение". Модули указаны в степенях.

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

Углы возвышения RCS- шаблона актёра, заданные как разделенная запятой пара, состоящий из 'RCSElevationAngles' и Q элемент с реальным значением. Q - количество углов возвышения. Значения находятся в области значений [-90 °, 90 °].

Каждый элемент RCSElevationAngles определяет угол возвышения соответствующей строки RCSPattern свойство. Модули указаны в степенях.

Пример: [0:90]

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

свернуть все

Актёр сценария вождения, возвращенный как Actor объект, относящийся к сценарию вождения, заданному scenario.

Можно изменить Actor объект путем изменения значений его свойств. Имена свойства соответствуют аргументам пары "имя-значение", используемым для создания объекта. Единственное свойство, которое вы не можете изменить ActorID, которое является положительным целым числом, указывающим на уникальный, заданный сценарием идентификатор актёра.

Чтобы задать или визуализировать движение актёра, используйте следующие функции:

trajectory

Создайте траекторию актёра или транспортного средства в сценарии вождения

smoothTrajectory

Создайте плавный, ограниченный рывком актёр или траекторию транспортного средства в сценарии вождения

chasePlot

Эго-ориентированный проективный перспективный график

Чтобы получить информацию о характеристиках актёра, используйте следующие функции:

actorPoses

Положения, скорости и ориентации актёров в сценарии вождения

actorProfiles

Физические и радиолокационные характеристики актёров в сценарии вождения

targetOutlines

Контуры целей, просматриваемых актером

targetPoses

Целевые положения и ориентации относителен автомобиль , оборудованный датчиком

driving.scenario.targetsToEgo

Преобразуйте положения актёра в координаты автомобиля , оборудованного датчиком

driving.scenario.targetsToScenario

Преобразуйте целевые положения актёра из координат автомобиль , оборудованный датчиком в мировые координаты сценария

Чтобы получить информацию о дорогах и полосах, на которых находится актёр, используйте следующие функции:

roadBoundaries

Получите контуры дорог

driving.scenario.roadBoundariesToEgo

Преобразуйте контуры дороги в координаты автомобиль , оборудованный датчиком

currentLane

Получите текущий канал актёра

laneBoundaries

Получите контуры маршрута актёра

laneMarkingVertices

Маркировка вершин и граней маршрута в сценарии вождения

roadMesh

Mesh представление ближайших дорог актёра в сценарии вождения.

Подробнее о

свернуть все

Позиции и размерности актёра и транспортного средства

В сценариях вождения actor является кубоидным (коробчатым) объектом с определенной длиной, шириной и высотой. Актёры также имеют радиолокационный шаблон поперечного сечения (RCS), заданный в dBsm, который можно уточнить, задав угловые координаты азимута и повышения. Положение актёра определяется как центр его нижней грани. Эта центральная точка используется как вращательный центр актёра, его точка контакта с землей и ее источник в локальной системе координат. В этой системе координат:

  • Ось X указывает вперед от актёра.

  • Ось Y указывает на левую сторону актёра.

  • Ось Z указывает вверх от земли.

Крен, тангаж и рыскание положительны по часовой стрелке при взгляде в прямом направлении X -, Y - и Z - осей, соответственно.

А vehicle - актёр, который перемещается на колесах. Транспортные средства обладают тремя дополнительными свойствами, которые регулируют размещение их передней и задней осей.

  • Wheelbase - Расстояние между передней и задней осями

  • Front overhang - Расстояние между передней частью транспортного средства и передней осью

  • Rear overhang - Расстояние между задней осью и задней частью транспортного средства

В отличие от других типов актёров, положение транспортного средства определяется точкой на земле, которая находится ниже центра его задней оси. Эта точка соответствует естественному центру вращения транспортного средства. Как и в случае с нетранспортными средствами, эта точка является источником в локальной системе координат транспортного средства, где:

  • Ось X указывает вперед от транспортного средства.

  • Ось Y указывает на левую сторону транспортного средства.

  • Ось Z указывает вверх от земли.

Крен, тангаж и рыскание положительны по часовой стрелке при взгляде в прямом направлении X -, Y - и Z - осей, соответственно.

В этой таблице представлен список общих действующих лиц и их размерностей. Чтобы задать эти значения в Actor и Vehicle задайте соответствующие свойства, показанные на рисунке.

Классификация актёровОбъект актёраСвойства актёра
LengthWidthHeightFrontOverhangRearOverhangWheelbaseRCSPattern
ПешеходActor0,24 м0,45 м1,7 мН/ДН/ДН/Д-8 дБсм
АвтомобильVehicle4,7 м1,8 м1,4 м0,9 м1,0 м2,8 м10 дБсм
МотоциклVehicle2,2 м0,6 м1,5 м0,37 м0,32 м1,51 м0 дБсм

Введенный в R2017a
Для просмотра документации необходимо авторизоваться на сайте