Этот пример показывает, как создать агента и траектории автомобиля для ведущего сценария с помощью функций Automated Driving Toolbox™. Чтобы создать агента и траектории автомобиля в интерактивном режиме вместо этого, используйте приложение Driving Scenario Designer.
Агенты в ведущем сценарии заданы, когда кубоид возражает с определенной длиной, шириной и высотой. Агенты также имеют радарное сечение (заданный в dBsm), который может быть усовершенствован путем определения угловых координат (азимут и повышение). Положение агента задано как центр нижней поверхности. Эта точка используется в качестве точки контакта агента с землей, а также вращательного центра агента.
Автомобиль является специальным видом агента, который перемещается в колеса. Автомобили обладают тремя дополнительными свойствами, которые управляют размещением передней и задней оси. Колесная база является расстоянием между передними и задними осями. Передний нависающий край является количеством расстояния между передней стороной автомобиля и передней осью; с другой стороны задний нависающий край является расстоянием между задней осью и задней частью автомобиля.
В отличие от агентов, положение автомобиля помещается в землю в центре задней оси. Это соответствует естественному центру автомобиля вращения.
Типичный список агентов и их соответствующих размерностей появляется ниже:
Следующий пример строит положение агента с размерностями типичного человека и автомобиля в сценарии в положениях (0,2) и (0,-2), соответственно:
s = drivingScenario; a = actor(s, 'Length', 0.24, 'Width', 0.45, 'Height', 1.7); passingCar = vehicle(s); a.Position = [0 2 0] passingCar.Position = [0 -2 0] plot(s) ylim([-4 4])
a = Actor with properties: ActorID: 1 ClassID: 0 Position: [0 2 0] Velocity: [0 0 0] Yaw: 0 Pitch: 0 Roll: 0 AngularVelocity: [0 0 0] Length: 0.2400 Width: 0.4500 Height: 1.7000 RCSPattern: [2x2 double] RCSAzimuthAngles: [-180 180] RCSElevationAngles: [-90 90] passingCar = Vehicle with properties: ActorID: 2 ClassID: 0 Position: [0 -2 0] Velocity: [0 0 0] Yaw: 0 Pitch: 0 Roll: 0 AngularVelocity: [0 0 0] Length: 4.7000 Width: 1.8000 Height: 1.4000 RCSPattern: [2x2 double] RCSAzimuthAngles: [-180 180] RCSElevationAngles: [-90 90] FrontOverhang: 0.9000 RearOverhang: 1 Wheelbase: 2.8000
По умолчанию график сценария покажет агентов от вида сверху. Чтобы изменить это представление, графиком сценария можно управлять или при помощи Панели инструментов Камеры, доступной в меню View графика, или программно через использование линейных интерфейсов команды plot как xlim
, ylim
, zlim
и view
. Это позволяет вам качественно сравнивать относительные высоты агентов.
zlim([0 4]); view(-60,30)
Можно дать агентам команду (включая автомобили) следовать за путем вдоль набора waypoints в наборе данных скоростей. Когда вы задаете waypoints, кусочная кривая клотоиды подходящая промежуточный каждый сегмент, где искривление сохраняется промежуточные точки. Кривые клотоиды используются, потому что у них есть искривление, которое отличается линейно с путешествовавшим расстоянием, который делает очень простой контур для драйверов, чтобы перейти при перемещении в постоянной скорости.
По умолчанию траектории агента не будут иметь никакого искривления в конечных точках. Чтобы завершить цикл, повторите первую и последнюю точку.
Чтобы следовать за целым путем в постоянной скорости, задайте скорость как скалярное значение.
Автомобили вращательный центр проходят через кривую между waypoints. Поэтому, чтобы разместить длину автомобиля перед и позади задней оси во время симуляции, можно сместить начало и окончание waypoints. Возмещение этих waypoints гарантирует, что автомобиль соответствует полностью в дороге в ее конечных точках.
Если автомобиль должен повернуться быстро, чтобы избежать препятствия, поместить две точки близко друг к другу в намеченное направление перемещения. В этом примере мы показываем автомобиль, поворачивающийся быстро в двух местах, но в противном случае держащийся обычно.
s = drivingScenario; road(s, [0 0; 10 0; 53 -20],'lanes',lanespec(2)); plot(s,'Waypoints','on'); idleCar = vehicle(s,'Position',[25 -5.5 0],'Yaw',-22); passingCar = vehicle(s); waypoints = [1 -1.5; 16.36 -2.5; 17.35 -2.765; 23.83 -2.01; 24.9 -2.4; 50.5 -16.7]; velocity = 15; trajectory(passingCar, waypoints, velocity);
Для крутых поворотов задайте waypoints близко друг к другу в запуске и конце поворота. Тем путем внезапное изменение в регулировании может быть представлено искренне.
В примере ниже, вы видите траекторию, которую автомобиль берет при создании левого поворота. Пара контрольных точек используется вначале и конец поворота, которые задают короткий сегмент, который допускает номер с переодеванием в держащемся направлении автомобиля.
Чтобы дать автомобилям команду следовать за кривыми кусочного постоянного ускорения, задайте скорости в каждом waypoint. В этом примере ниже, автомобиль замедляется от скорости 20 м/с и прибывает в краткую полную остановку в местоположении (-7,-1.5). Автомобиль затем постепенно ускоряется назад к его исходной скорости:
s = drivingScenario; road(s, [0 -25; 0 25],'lanes',lanespec([1 1])); road(s, [-25 0; 25 0],'lanes',lanespec([1 1])); passingCar = vehicle(s); % take transpose so waypoints align with velocities waypoints = [-24.0 -7.0 -3.5 -3.0 1.5 1.5 1.5 -1.5 -1.5 -1.5 -1.5 3.0 3.5 21.0]'; velocities = [20.0 0.0 5.0 5.0 10.0 12.0 20.0]; trajectory(passingCar, waypoints,velocities); plot(s,'Waypoints','on');
Однажды все дороги, агенты и траектории агента заданы, можно инкрементно постепенно увеличить положение каждого агента путем вызова метода advance
ведущего сценария в цикле:
while advance(s) pause(0.01); end
Для примера на ведущем сценарии см. Ведущий Пример по Сценарию.
actor
| road
| trajectory
| vehicle