主要内容

以编程方式创建参与者和车辆轨迹

这个示例展示了如何使用自动驾驶工具箱™函数以编程方式为驾驶场景创建参与者和车辆轨迹。要交互式地创建行动者和车辆轨迹,请使用驾驶场景设计师应用程序。

演员和车辆

驾驶场景中的参与者被定义为具有特定长度、宽度和高度的长方体对象。参与者还具有雷达横截面(在dBsm中指定),可以通过定义角度坐标(方位角和仰角)对其进行细化.长方体驾驶场景将演员的位置定义为其底面的中心。驾驶场景使用该点作为演员与地面的接触点。该点也是演员的旋转中心。

车辆是一种在车轮上移动的特殊类型的参与者。车辆具有三个额外的特性,它们控制前轴和后轴的位置。

  • 轴距是前后轴之间的距离。

  • 前悬是前轴与车辆前部之间的距离。

  • 后方过剩是后轴与车辆后部之间的距离。

与演员不同,车辆的位置是在地面上的中心后轴。这个位置对应于车辆的自然旋转中心。

此表显示了参与者及其相应维度的典型列表:

该代码以典型人的尺寸和驾驶场景中车辆的尺寸绘制参与者的位置。参与者和车辆分别位于位置(0,2)和(0,–2)。

场景= drivingScenario;=演员(的情况下,“ClassID”1.“长度”,0.24,“宽度”, 0.45,“高度”, 1.7);passingCar =车辆(场景中,“ClassID”,1);a.Position=[0 2 0]passingCar.Position=[0-2 0]plot(scenario)ylim([-4])
a=具有属性的参与者:入口时间:0出口时间:Inf ActorID:1 ClassID:1名称:“”绘图颜色:[0.4470 0.7410]位置:[0.20]速度:[0.0]偏航:0俯仰:0滚动:0角度速度:[0.0 0]长度:0.2400宽度:0.4500高度:1.7000网格:[1x1扩展对象网格]RCSPattern:[2x2双]RCSAzimuthAngles:[-180]rcselvationangles:[-90 90]passingCar=具有以下属性的车辆:前悬:0.9000后悬:1轴距:2.8000入口时间:0出口时间:Inf ActorID:2 ClassID:1名称:''绘图颜色:[0.8500 0.3250.0980]位置:[0-2 0]速度:[0 0 0 0 0 0]偏航:0俯仰:0滚动:0角速度:[0 0 0 0 0 0 0 0 0]长度:4.7000宽度:1.8000高度:1.4000网格:[1x1 extendedObjectMesh]RCSPattern:[2x2双]RCSAzimuthAngles:[-180]RCSeleVacationAngles:[-90]

默认情况下,场景情节显示参与者的俯视视图。要更改此视图,可以通过选择相机工具栏可用的视图绘图的菜单。或者,您可以使用以下函数以编程方式操纵绘图:xlim叶利姆zlim,视图.这些功能使您能够比较参与者的相对高度。

zlim([0 4])视图(-60年,30)

定义轨迹

通过使用平滑轨迹函数,您可以指定角色和车辆沿着一组路径点以一组给定的速度沿着一条路径。当您指定路径点时,平滑轨迹函数拟合一条分段的线形线到路点之间的每一段,保持点之间的曲率。纬线曲线的曲率随行驶距离线性变化,这为司机在匀速行驶时导航创建了一个非常简单的轨迹。

默认情况下,参与者轨迹在端点处没有曲率。若要完成循环,请指定相同的第一个和最后一个航路点。

要以恒定速度跟随整个轨迹,请将速度指定为标量值。

车辆在其旋转中心通过航路点之间的曲线。因此,为了在模拟过程中适应后轴前后车辆的长度,可以偏移起始和结束航路点。偏移这些航路点使车辆在其端点完全适合道路。

如果车辆需要快速转弯以避开障碍物,应在预定行驶方向上放置两个相邻的点。这个例子显示了一辆车在两个地方快速转弯,但在其他地方正常转向。

场景= drivingScenario;路(场景中,[0 0;10 0;53 -20],“车道”lanespec (2));情节(场景中,“锚点”“上”) idleCar =车辆(场景,“ClassID”1.“位置”,[25 -5.5 0],“偏航”, -22);passingCar =车辆(场景中,“ClassID”1)航路点=[1-1.5;16.36-2.5;17.35-2.765;23.83-2.01;24.9-2.4;50.5-16.7];速度=15;平滑轨迹(通过车辆、航路点、速度)
passingCar=具有以下特性的车辆:前悬:0.9000后悬:1轴距:2.8000入口时间:0出口时间:Inf ActorID:2 ClassID:1名称:“”绘图颜色:[0.8500 0.3250.0980]位置:[0 0 0]速度:[0 0 0]偏航:0俯仰:0滚动:0角度速度:[0 0 0 0 0 0]长度:4.7000宽度:1.8000高度:1.4000网格:[1x1 extendedObjectMesh]RCSPattern:[2x2双]RCSAzimuthAngles:[-180]RCSElevationAngles:[-90]

或者,通过在每个航路点明确设置车辆的偏航方向角,您可以在此类转弯处使用较少的航路点。偏航在逆时针方向上为正值,其单位为度。在上一示例的此变化中,轨迹受到约束,以使车辆在mo后处于–15度角驶入左车道。通过将航路点设置为,平滑轨迹函数的默认值是拟合一条clothod曲线到引导该路径点的线段。在这种情况下,这一段是轨迹的最后一段。

路径点= [1 -1.5;16.6 - -2.1;23.7 - -0.9;52.2 - -17.6);偏航= [0;0;-15;南);smoothTrajectory (passingCar锚点、速度、“偏航”,偏航)

十字路口的转弯和制动

对于急转弯,要么在转弯的开始和结束处一起定义路径点,要么明确设置车辆在每个路径点的偏航。这个设置忠实地呈现了转向的突然变化。

在这个例子中,一辆车通过明确设置偏航值在十字路口急转弯。在第一个航路点和转弯前的航路点,飞行器的偏航为0度。在转弯后的路点和最后的路点,车辆有90度偏航,这是车辆完成转弯后的方位。通过约束轨迹使飞行器达到这些偏航方向,飞行器的转弯比使用默认偏航方向要尖锐得多。

平滑轨迹函数生成一个平滑的、受陡升限制的轨迹,在路径点之间没有加速度间断。当改变车辆速度时,例如在转弯时减速,路点之间的距离必须足够大,以便车辆在保持平稳加速的同时达到所需的速度。或者,在较短的距离内,速度的变化必须相对较小。在这个例子中,当车辆进入转弯时,速度从6米/秒减到5米/秒。完成转弯后,车辆加速回到原来的速度。

场景= drivingScenario;路(场景中,[0 -25;0 25),“车道”lanespec ([1]));路(场景中,[-25 0;25 0],“车道”lanespec ([1]));turningCar =车辆(场景中,“ClassID”1);路径点= [-20 -2;5 - 2;2 5;2 20);速度= [6 5 5 6];偏航= [0 0 90 90];smoothTrajectory (turningCar锚点、速度、“偏航”,偏航)图(场景,“锚点”“上”

移动车辆

在定义所有的道路、参与者和参与者轨迹之后,您可以使用推进函数在一个循环的驾驶场景。

推进(场景)暂停(0.01)结束

倒车

要指定反向驾驶动作,请指定负速度的轨迹。当在前进和后退运动之间切换时,必须在这些运动之间指定一个速度为的路径点0.在这个路点,车辆减速直到完全停止,然后改变行驶方向。

这个示例对前面的示例进行了扩展。这次,在完成左转弯后,车辆在十字路口倒车。然后,车辆再次转向并向前行驶,直到它从开始的地方停在对面的车道上。因为车辆以较慢的速度行驶,为了加速模拟,在模拟更新之间指定较短的暂停。

场景= drivingScenario;路(场景中,[0 -25;0 25),“车道”lanespec ([1]));路(场景中,[-25 0;25 0],“车道”lanespec ([1]));turningCar =车辆(场景中,“ClassID”1);路径点= [-20 -2;5 - 2;2 5;2 20;2 5;5 - 2;-20 2];速度= [6 5 5 0 -2 0 5];偏航= [0 0 90 90 -90 0 -180]; smoothTrajectory(turningCar,waypoints,speed,“偏航”,偏航)图(场景,“锚点”“上”推进(场景)暂停(0.001)结束

下一步

这个例子展示了如何使用drivingScenario对象。要在交互环境中模拟、可视化或修改此驱动场景,请尝试导入drivingScenario将对象放入驾驶场景设计师通过使用此命令执行以下操作:

驾驶场景设计师(场景)

另请参阅

应用程序

对象

功能

相关的话题