我是靠谱客的博主 幸福红酒,最近开发中收集的这篇文章主要介绍通过函数脚本创建一个简单的环形道路(Matlab 自动驾驶工具箱),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MATLAB自带自动驾驶工具箱,可在APP内打开,或在命令行窗口输入>>drivingScenarioDesigner打开。

该工具箱可以

  • 使用拖放界面创建道路和汽车模型。

  • 配置安装在(ego本车)车辆上的视觉、雷达、激光雷达、INS 和超声波传感器,生成执行组件和车道边界检测、点云数据和惯性测量。

具体用法可参考:设计驾驶场景、配置传感器并生成综合数据 - MATLAB (mathworks.com)

下面主要介绍工具箱封装的函数及脚本示例:

1、常用函数

Driving Scenario Designer常用函数
函数功能常见调用格式

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)

ClassIDActor类型
1Car车辆
2Truck卡车
3Bicycle自行车
4Pedestrain行人
5Jersey Barrier屏障
6Guardrail护栏

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 自动驾驶工具箱)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部