В этом примере показано, как создать агента и траектории транспортного средства для ведущего сценария с помощью функций Automated Driving Toolbox™. Чтобы создать агента и траектории транспортного средства в интерактивном режиме вместо этого, используйте приложение Driving Scenario Designer.
Агенты в ведущем сценарии заданы, когда кубоид возражает с определенной длиной, шириной и высотой. Агенты также имеют радарное сечение (заданный в dBsm), который может быть усовершенствован путем определения угловых координат (азимут и вертикальное изменение). Положение агента задано как центр нижней поверхности. Эта точка используется в качестве точки контакта агента с землей, а также вращательного центра агента.
Транспортное средство является специальным видом агента, который перемещается в колеса. Транспортные средства обладают тремя дополнительными свойствами, которые управляют размещением передней и задней оси. Колесная база является расстоянием между передними и задними осями. Передний нависающий край является количеством расстояния между передней стороной транспортного средства и передней осью; с другой стороны задний нависающий край является расстоянием между задней осью и задней частью транспортного средства.
В отличие от агентов, положение транспортного средства помещается в землю в центре задней оси. Это соответствует естественному центру транспортного средства вращения.
Типичный список агентов и их соответствующих размерностей появляется ниже:
Следующий пример строит положение агента с размерностями типичного человека и транспортного средства в сценарии в положениях (0,2) и (0,-2), соответственно:
scenario = drivingScenario; a = actor(scenario,'ClassID',1,'Length',0.24,'Width',0.45,'Height',1.7); passingCar = vehicle(scenario,'ClassID',1); a.Position = [0 2 0] passingCar.Position = [0 -2 0] plot(scenario) ylim([-4 4])
a = Actor with properties: ActorID: 1 ClassID: 1 PlotColor: [0 0.4470 0.7410] 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 Mesh: [1x1 extendedObjectMesh] RCSPattern: [2x2 double] RCSAzimuthAngles: [-180 180] RCSElevationAngles: [-90 90] passingCar = Vehicle with properties: ActorID: 2 ClassID: 1 PlotColor: [0.8500 0.3250 0.0980] 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 Mesh: [1x1 extendedObjectMesh] 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 гарантирует, что транспортное средство соответствует полностью в дороге в ее конечных точках.
Если транспортное средство должно повернуться быстро, чтобы избежать препятствия, поместить две точки близко друг к другу в намеченное направление перемещения. Этот пример показывает транспортное средство, поворачивающееся быстро в двух местах, но в противном случае держащееся обычно.
scenario = drivingScenario; road(scenario, [0 0; 10 0; 53 -20],'lanes',lanespec(2)); plot(scenario,'Waypoints','on'); idleCar = vehicle(scenario,'Position',[25 -5.5 0],'Yaw',-22); passingCar = vehicle(scenario,'ClassID',1); 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). Транспортное средство затем постепенно ускоряется назад к его исходной скорости:
scenario = drivingScenario; road(scenario, [0 -25; 0 25],'lanes',lanespec([1 1])); road(scenario, [-25 0; 25 0],'lanes',lanespec([1 1])); passingCar = vehicle(scenario,'ClassID',1); % 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(scenario,'Waypoints','on');
Однажды все дороги, агенты и траектории агента заданы, можно инкрементно постепенно увеличить положение каждого агента путем вызова advance
функция на ведущем сценарии в цикле:
while advance(scenario) pause(0.01); end
Этот пример показал, как создать агента и траектории транспортного средства для ведущего сценария с помощью drivingScenario
объект. Чтобы симулировать, визуализируйте, или измените этот ведущий сценарий в интерактивной среде, попытайтесь импортировать drivingScenario
объект в приложение Driving Scenario Designer:
drivingScenarioDesigner(scenario)
actor
| road
| trajectory
| vehicle