Создайте траектории агента и транспортного средства

В этом примере показано, как создать агента и траектории транспортного средства для ведущего сценария с помощью функций 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
              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: 1
              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 как xlimylimzlim, и 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)

Смотрите также

Приложения

Объекты

Функции

Похожие темы