通过函数脚本创建一个简单的环形道路(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)

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学习!!

猜你喜欢

转载自blog.csdn.net/m0_46427461/article/details/124542228
今日推荐