使用编程创建驾驶场景。
1.使用Driving scenario Designer 交互方式创建驾驶场景
2.导出matalb function
3.修正这个函数,创建原始场景的变体。
4.调用这个函数,生成drivingScenario object。
5.在simulink中仿真,导入这个objcet ,使用Scenario Reader 模块
在APP中创建场景。
drivingScenarioDesigner('LeftTurnScenarioNoSensors.mat')
点击导出MATLAB Function
生成了下图的函数
function [scenario, egoVehicle] = LeftTurnScenarioNoSensors()
% createDrivingScenario Returns the drivingScenario defined in the Designer% Generated by MATLAB(R) 9.13 (R2022b) and Automated Driving Toolbox 3.6 (R2022b).
% Generated on: 21-Aug-2023 22:30:51% Construct a drivingScenario object.构建结构体对象
scenario = drivingScenario;% Add all road segments
roadCenters = [150 24.2 0;134.3 24.7 0;54 24.2 0];
laneSpecification = lanespec([2 2]);
road(scenario, roadCenters, 'Lanes', laneSpecification, 'Name', 'Road');roadCenters = [105 75 0;105.2 54.5 0;105 -20 0];
laneSpecification = lanespec([2 2]);
road(scenario, roadCenters, 'Lanes', laneSpecification, 'Name', 'Road1');% Add the ego vehicle
egoVehicle = vehicle(scenario, ...'ClassID', 1, ...'Position', [56 19 0], ...% 初始位置'Mesh', driving.scenario.carMesh, ...% 车的形状'Name', 'egoVehicle');
waypoints = [56 19 0;135 19 0];
speed = 10;
smoothTrajectory(egoVehicle, waypoints, speed);% Add the non-ego actors
otherVehicle = vehicle(scenario, ...'ClassID', 1, ...'Position', [103 73 0], ...'Mesh', driving.scenario.carMesh, ...'Name', 'otherVehicle');
waypoints = [103 73 0;102.8 34.3 0;114.3 22.4 0;148.1 22.4 0];
speed = [11;10;10;11];
yaw = [-90;-90;0;0];
smoothTrajectory(otherVehicle, waypoints, speed, 'Yaw', yaw);
运行这个函数会返回道路场景、车以及车上传感器所采集的信息。
修改函数,创建场景变体。
上边代码相当于给你个代码壳子,你可以往里填充。一个常见的变体是测试主车以不同的速度行驶。在上边代码中,ego车的车速是10 m/s。为了生成不同的速度,你可以在上述代码中添加接口。
(1)添加输入变量。
(2)在平滑轨迹中,替换了speed.
(3)还可以考虑
修改路和车道的参数。修改轨迹或者车辆初始位置;修改车辆参数。
(4)调用你修改的这个函数
可以看到确实是20m/s
没修改之前的场景 (10m/s)VS 修改之后的场景(20m/s)
主车跟左拐车没有相遇。
注意,如果你的主车有传感器,你要使用这个命令去打开app
drivingScenarioDesigner(scenario,sensors)
.
注意更改classId ,car是1,truck是2。
在simulink中导入场景
使用Scenario Reader 模块。
关于Simulink中如何使用,
可以通过一个简单的例子来学会。
首先输入Scenario Reader,依次选择
最后加个小wifi
炫酷的鸟瞰图。这个场景过于简单,所以不炫酷。
回到lattice
首先运行的是这个函数。
首先看一下车道中心线
主车和五辆车
function [scenario, egoVehicle] = drivingScenarioTrafficExample()
% createDrivingScenario Returns the drivingScenario defined in the Designer% Generated by MATLAB(R) 9.9 (R2020b) and Automated Driving Toolbox 3.2 (R2020b).
% Generated on: 28-Apr-2020 15:04:44% Construct a drivingScenario object.
scenario = drivingScenario;% 创建一个drivingScenario对象% Add all road segments
roadCenters = [0 50 0;150 50 0;300 75 0;310 75 0;400 0 0;300 -50 0;290 -50 0;0 -50 0;0 -50 0];
laneSpecification = lanespec(4);% 四个车道
road(scenario, roadCenters, 'Lanes', laneSpecification, 'Name', 'Road');% Add the ego vehicle
egoVehicle = vehicle(scenario, ...'ClassID', 1, ...'Position', [10.7 51.4 0], ...'Name', 'Car');% Add the non-ego actors
car1 = vehicle(scenario, ...'ClassID', 1, ...'Position', [34.7 49.3 0], ...'Name', 'Car1');
waypoints = [34.7 49.3 0;60.1 48.2 0;84.2 47.9 0;119 49.3 0;148.1 51.4 0;189.6 58.7 0;230.6 68 0;272.6 74.7 0;301.4 77.5 0;316.7 76.8 0;332.4 75.2 0;348.9 72.2 0;366.2 65.1 0;379.6 55.6 0];
speed = [10;10;10;10;10;10;10;10;10;10;10;10;10;10];
trajectory(car1, waypoints, speed);car2 = vehicle(scenario, ...'ClassID', 1, ...'Position', [17.6 46.7 0], ...'Name', 'Car2');
waypoints = [17.6 46.7 0;43.4 45.5 0;71.3 43.8 0;102.3 43.5 0;123.5 45.5 0;143.6 47.4 0;162.4 50 0;198.5 61 0;241.1 70.1 0;272.3 74.1 0;292 76.6 0;312.8 77.2 0;350.3 75.2 0;362.5 70.4 0;375.9 63.3 0;390.7 49.9 0;401.3 33 0];
speed = [9;9;9;9;9;9;9;9;9;9;9;9;9;9;9;9;9];
trajectory(car2, waypoints, speed);car3 = vehicle(scenario, ...'ClassID', 1, ...'Position', [62.6 51.9 0], ...'Name', 'Car3');
waypoints = [62.6 51.9 0;87.4 51.3 0;117.7 52.2 0;147.6 55 0;174.9 59.7 0;203.3 65.8 0;265 69.7 0;288.3 73.1 0;314.5 73.1 0;334.9 70.8 0;360 59.9 0];
speed = [6;6;6;6;6;6;6;6;6;6;6];
trajectory(car3, waypoints, speed);car4 = vehicle(scenario, ...'ClassID', 1, ...'Position', [101.7 41.1 0], ...'Name', 'Car4');
waypoints = [101.7 41.1 0;124.6 42 0;148.5 43.9 0;171.9 48.2 0;197.1 52.8 0;222.3 58.5 0;252.4 64.4 0;281.4 68.5 0;307.7 69.5 0;329.9 68.2 0;352.7 62.8 0];
speed = [7;7;7;7;7;7;7;7;7;7;7];
trajectory(car4, waypoints, speed);car5 = vehicle(scenario, ...'ClassID', 1, ...'Position', [251.3 75.6 0], ...'Name', 'Car5');
waypoints = [251.3 75.6 0;255.7 76.7 0];
speed = [0.01;0.01];
trajectory(car5, waypoints, speed);
车辆的参数
carLen = 4.7; % in meters
carWidth = 1.8; % in meters
rearAxleRatio = .25;
画出这个场景
构造参考路径
结构体,referencePathFrenet。这个结构题可以给出,沿着路径长度的状态。
找到匹配点,提供坐标系转换。
waypoints = [0 50; 150 50; 300 75; 310 75; 400 0; 300 -50; 290 -50; 0 -50]; % in meters
refPath = referencePathFrenet(waypoints);
这两个代码生成了这个结构体
这六列是什么(x,y,)
使用show函数show出来,这里就不求甚解了。
ax = show(refPath);
axis(ax,'equal'); xlabel('X'); ylabel('Y');
详细阅读 referencePathFrenet
给wayPoints (x,y)或者(x,y,theta)--》平滑修补成连续曲线。
查询路径上最接近全局状态的点;插值;坐标系转换‘
全局状态是[x,y,theta,kappa,speed,accel]