概述
MATLAB自带自动驾驶工具箱,可在APP内打开,或在命令行窗口输入>>drivingScenarioDesigner打开。
该工具箱可以
-
使用拖放界面创建道路和汽车模型。
-
配置安装在(ego本车)车辆上的视觉、雷达、激光雷达、INS 和超声波传感器,生成执行组件和车道边界检测、点云数据和惯性测量。
具体用法可参考:设计驾驶场景、配置传感器并生成综合数据 - MATLAB (mathworks.com)
下面主要介绍工具箱封装的函数及脚本示例:
1、常用函数
函数 | 功能 | 常见调用格式 |
drivingScenario | 创建初始的驾驶场景 | scenario = drivingScenario; |
road | 在驾驶场景中添加道路 | road(scenario,roadCenters, 'Lanes',laneSpecification); roadCenters:用N个道路中心点 的坐标组成的N×2 或N×3 实数矩阵 来定义二维平面或三维空间中的道路 laneSpecification:道路规范(主要包括 车道数量、车道宽度、车道线型、车道类型) |
roadBoundaries | 获得道路边界点 | roadBoundaries(scenario); 返回的是边界点坐标的细胞阵列类型 |
vehicle | 在驾驶场景中添加车辆 | 例:ego.vehicle = vehicle(scenario,'Position',ego.pos); |
actor | 在驾驶场景中添加交通参与者(自行车、行人、护栏等) | 例:bicycle = actor(scenario,'ClassID',3,'Position',[706 376 0]', ... 'Length',2,'Width',0.45,'Height',1.5); |
trajectory | 生成轨迹 | 例:trajectory(ego.vehicle, ego.waypoints,ego.speed); (输入该参与者的路径点和速度) |
actorPoses | 获取交通参与者的姿态 | actorPoses(scenario); 返回驾驶场景、场景中所有参与者 的当前姿势(位置、速度和方向) |
chasePlot | 绘制鸟瞰图 | chasePlot(ego.vehicle) |
ClassID | Actor类型 |
1 | Car车辆 |
2 | Truck卡车 |
3 | Bicycle自行车 |
4 | Pedestrain行人 |
5 | Jersey Barrier屏障 |
6 | Guardrail护栏 |
2、Matlab脚本文件创建环形道路场景
clc
clear
close all
%%构建道路场景
%场景初始化
scenario = drivingScenario;
%场景初始化
scenario.SampleTime = 0.1;
%采样时间
%道路中心坐标
roadCenters = [-50 50 0;-50 -50 0;50 -50 0;50 50 0;-50 50 0];
%建立道路
marking = [laneMarking('Solid')...
laneMarking('Dashed') laneMarking('Solid')];
%分界线线型(Dashed虚线)
laneSpecification = lanespec(2,'Marking',marking);
%道路规范
road(scenario,roadCenters,'Lanes',laneSpecification);
%生成道路
%获得道路边界
rdbdy = roadBoundaries(scenario);
rdbdy = rdbdy{1,1}(1:end-1,:);
%rdbdy = [rdbdy(3:end,:);rdbdy(1:2,:)];
%rdbdy(1,3) = 0;
%%构建车辆信息
%根据单向两车道约定,分别计算左车道和右车道中心线坐标,以生成车辆航迹点
ptNums = size(rdbdy,1);
for j = 1:ptNums/2
%道路两侧的道路散点数量总共为ptNums,故ptNums/2为一侧的散点数量
rightBdyPt = rdbdy(j,:);
leftBdyPt = rdbdy(ptNums-j+1,:);
leftWaypoints(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*0.25;%左车道和右车道中心线坐标
rightWaypoints(j,:) = leftBdyPt + (rightBdyPt - leftBdyPt)*0.75;
end
%本车信息
ego.vehicle = [];
ego.waypoints = rdbdy;
ego.pos = ego.waypoints(1,:);
ego.speed = 15;
%1号交通车信息
obs = struct;
obs(1).vehicle = [];
obs(1).waypoints = rdbdy(50:end,:);
obs(1).pos = obs(1).waypoints(1,:);
obs(1).speed = 10;
%2号交通车信息
obs(2).vehicle = [];
obs(2).waypoints = rdbdy(30:end,:);
obs(2).pos = obs(2).waypoints(1,:);
obs(2).speed = 8;
%%在场景增加车辆
%根据自车信息增加车辆
ego.vehicle = vehicle(scenario,'Position',ego.pos);
trajectory(ego.vehicle,ego.waypoints,ego.speed);
%根据交通车信息增加车辆
for i = 1:2
obs(i).vehicle = vehicle(scenario,'Position',obs(i).pos);
trajectory(obs(i).vehicle,obs(i).waypoints,obs(i).speed);
end
%%启动仿真
plot(scenario)
chasePlot(ego.vehicle)
tjty = [];
step = 1;
while advance(scenario)
pause(0.1)
tjty(step).time = scenario.SimulationTime;
tjty(step).pos = scenario.Actors(1,3).Position(1:2);
step = step+1;
hold on;
frame=getframe(gcf);
imind=frame2im(frame);
[imind,cm] = rgb2ind(imind,256);
if i==1
imwrite(imind,cm,'仿真动图.gif','gif', 'Loopcount',inf,'DelayTime',1e-4);
else
imwrite(imind,cm,'仿真动图.gif','gif','WriteMode','append','DelayTime',1e-4);
end
end
%%保存
save Scenario.mat scenario leftWaypoints rightWaypoints tjty
3、得到的结果:
其中,蓝车为 ego.vehicle(我方小车)
该文章参考b站视频:自动驾驶汽车预测-决策-规划-控制实战入门_哔哩哔哩_bilibili
感觉up主讲的真的很详细,很适合自动驾驶的Matlab学习!!
最后
以上就是幸福红酒为你收集整理的通过函数脚本创建一个简单的环形道路(Matlab 自动驾驶工具箱)的全部内容,希望文章能够帮你解决通过函数脚本创建一个简单的环形道路(Matlab 自动驾驶工具箱)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复