智能网联汽车技术及仿真实例(微课版)
上QQ阅读APP看书,第一时间看更新

项目1 驾驶场景

学习任务1.1 驾驶场景认知

学习任务1.2 驾驶场景函数和模块

学习任务1.3 驾驶场景仿真实例

【例1-1】采用编程方法构建S型道路场景,场景中有三条车道,车辆在中间车道行驶,请绘制场景图、追逐图和鸟瞰图,并仿真汽车行驶过程中车道边界和车道线的变化。

解:在MATLAB编辑器窗口输入以下程序。


1      s=drivingScenario('StopTime',4);                                              %构建驾驶场景 
2      roadcenters=[-45,30,0;-20,-20,0;0,0,0;20,20,0;45,-30,0];                      %道路中心 
3      lm=[laneMarking('Solid','Color','w');laneMarking('Dashed','Color','y'); ...   %车道线 
        laneMarking('Dashed','Color','y');laneMarking('Solid','Color','w')]; 
4      ls=lanespec(3,'Marking',lm);                                                  %车道规范 
5      road(s,roadcenters,'Lanes',ls);                                               %添加道路 
6      car=vehicle(s,'ClassID',1,'Position',[-45,30,0]);                             %添加车辆 
7      waypoints=[-45,30,0;-20,-20,0;0,0,0;20,20,0;45,-30,0];                        %航路点 
8      speed=30;                                                                     %速度 
9      trajectory(car,waypoints,speed);                                              %车辆轨迹 
10    plot(s)                                                                        %绘制场景图 
11    chasePlot(car)                                                                 %绘制追逐图 
12    bep=birdsEyePlot('XLim',[-40,40],'YLim',[-30,30]);                             %绘制鸟瞰图 
13    olPlotter=outlinePlotter(bep);                                                 %轮廓绘图仪 
14    lblPlotter=laneBoundaryPlotter(bep,'Color','r','LineStyle','-');               %右车道边界绘图仪 
15    lbrPlotter=laneBoundaryPlotter(bep,'Color','g','LineStyle','-');               %左车道边界绘图仪 
16    rbsEdgePlotter=laneBoundaryPlotter(bep);                                       %绘制车道边界 
17    while advance(s)                                                               %循环开始 
18    rbs=roadBoundaries(car);                                                       %车辆边界 
19    [position,yaw,length,width,originOffset,color]=targetOutlines(car);            %目标轮廓 
20    lb=laneBoundaries(car,'XDistance',0:5:30,'LocationType',...                    %车道边界 
     'Center','AllBoundaries',false); 
21    plotLaneBoundary(rbsEdgePlotter,rbs)                                           %绘制车道边界 
22    plotLaneBoundary(lblPlotter,{lb(1).Coordinates})                               %绘制左车道线 
23    plotLaneBoundary(lbrPlotter,{lb(2).Coordinates})                               %绘制右车道线 
24    plotOutline(olPlotter,position,yaw,length,width, ...                           %绘制轮廓 
  'OriginOffset',originOffset,'Color',color) 
25 end                                                                               %结束

输出结果如图1-15所示。

【例1-2】利用驾驶场景模块仿真驾驶场景。

在“Intersections”场景库中,选择以下驾驶场景。


EgoVehicleGoesStraight_VehicleFromRightGoesStraight.mat

获得驾驶场景如图1-16所示。该场景表示主车辆自南向北行驶,直行穿过十字路口,主车辆装有视觉传感器,一辆来自十字路口右侧的车辆向左直行,首先穿过十字路口。

图1-15 驾驶场景仿真

图1-15 驾驶场景仿真(续)

图1-16 车辆穿过十字路口驾驶场景

在应用程序工具栏上,选择“Export”→“Export Simulink Model”选项,生成驾驶场景和视觉传感器的Simulink模型,如图1-17所示。

单击“BIRD'S-EYE Scope”选项,打开鸟瞰图,单击“Find Signals”选项后单击“Run”按钮,车辆开始运动并进行识别,如图1-18所示,识别结果存储在MATLAB的工作区。

驾驶场景中的车辆和视觉传感器可以根据需要进行设置。

图1-17 驾驶场景和视觉传感器的Simulink模型

图1-18 驾驶场景的仿真