1. matlab基本绘图脚本
在做自动驾驶算法开发及测试时,需要用到matlab进行绘图,下面是一个简单的matlab绘图脚本,用于对图像进行绘图:
% 创建一个新的图形窗口
figure
% 将图形窗口的颜色设置为白色
set(gcf, 'Color', 'white')
% 绘制图形
x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y)
% 添加标题和标签
title('Sin Function')
xlabel('X')
ylabel('Y')
结果如下:
其次,由于车辆轨迹中包含有时间信息,因此我们经常需要处理大量的时间序列数据。时间序列的创建与使用非常重要,下面是一个时间序列的生成方法:
% 创建时间序列
t = 1:0.1:10;
% 创建对应的函数值序列
y = sin(t);
% 绘制图形
plot(t, y);
set(gcf,'Color','w')
xlabel('时间');
ylabel('函数值');
title('sin(t)函数图像');
结果如下:
需要留意的是,轨迹和常规绘图方法将在后续大量使用,必须掌握。
2.matlab自动驾驶工具箱场景搭建
本小节为本专栏开篇,先介绍对matlab自动驾驶工具箱的基本使用方法,包括场景搭建,导出matlab脚本以及场景修改:
1.创建一个基本的自动驾驶场景:打开APP→Driving Scenario Design工具箱
2.创建一个基本的场景:
设置道路和车辆如下:
在左侧可更改车道路的长度,车道线,车道宽度等。
对车辆的设置如下,点击Actor即可放置车辆:
设置车辆轨迹,点击ADD新增车辆轨迹:
点击运行即可播放车辆动画:
3.实际运用
对自动驾驶工具箱而言,有两种方式,一种是直接直接将数据导入到workspace中进行储存使用,此方法使用时一般需将储存的数据转换为时间序列,故前文要求的转换方法必须掌握,此外,可将传感器数据导入到simulink模块中,本章节只介绍第一种方法,在创立好的工程中点击export将建立的场景导出为matlab function:
导出的matlab脚本如下:
function [scenario, egoVehicle] = createDrivingScenario()
% createDrivingScenario Returns the drivingScenario defined in the Designer
% Generated by MATLAB(R) 9.14 (R2023a) and Automated Driving Toolbox 3.7 (R2023a).
% Generated on: 18-Jan-2024 00:58:11
% Construct a drivingScenario object.
scenario = drivingScenario;%创建场景
% Add all road segments
roadCenters = [-0.2 0.3 0;%设置车道属性
50.2 0.6 0];
road(scenario, roadCenters, 'Name', 'Road');%创建场景中的车道线
% Add the ego vehicle
egoVehicle = vehicle(scenario, ...
'ClassID', 1, ...
'Position', [1.8 -1.3 0], ...
'Mesh', driving.scenario.carMesh, ...
'Name', 'Car');%添加主车
% Add the non-ego actors
car1 = vehicle(scenario, ...
'ClassID', 1, ...
'Position', [9 2 0], ...
'Mesh', driving.scenario.carMesh, ...
'Name', 'Car1');
waypoints = [9 2 0;
15.2 0.3 0;
19.4 -0.8 0;
24.1 -0.7 0;
33.1 -1.1 0;
50 -1.3 0]%添加从车
speed = [30;30;30;30;30;30];%添加车速
trajectory(car1, waypoints, speed);%添加轨迹
plot(scenario)%画场景
值得注意的是,我们导出的为matlab function,若去掉第一行的创建函数,也是可行的,只是在生生成的mat文件上略有不同,可直接使用导出的脚本进行场景搭建。
生成的.mat文件结构如下:
其中SampleTime为采样时间,Actors为我们放置的车辆配置参数,点击打开:
对需要使用的变量用点(.)进行引用即可;
下面是在matlab环境中运行并保存车辆位置点的一个示例:
scenario = drivingScenario;%创建场景
scenario.SampleTime = 0.1; % 采样时间
% Add all road segments
roadCenters = [-0.2 0.3 0;%设置车道属性
50.2 0.6 0];
road(scenario, roadCenters, 'Name', 'Road');%创建场景中的车道线
% Add the ego vehicle
egoVehicle = vehicle(scenario, ...
'ClassID', 1, ...
'Position', [1.8 -1.3 0], ...
'Mesh', driving.scenario.carMesh, ...
'Name', 'Car');%添加主车
% Add the non-ego actors
car1 = vehicle(scenario, ...
'ClassID', 1, ...
'Position', [9 2 0], ...
'Mesh', driving.scenario.carMesh, ...
'Name', 'Car1');
waypoints = [9 2 0;
15.2 0.3 0;
19.4 -0.8 0;
24.1 -0.7 0;
33.1 -1.1 0;
50 -1.3 0]%添加从车
speed = [30;30;30;30;30;30];%添加车速
trajectory(car1, waypoints, speed);%添加轨迹
i=1;%初始化i
while advance(scenario)%启动仿真
ActorPositon(i,1:2) = scenario.Actors(1,2).Position(1,1:2);%创建矩阵以存放位置
i=i+1;
end
disp(i);%显示循环后变量i的值,便于调试
time=0.1*(i-1);%场景跑完花费的时间
disp(time)
t = 0.1:0.1:time;%分步长创建时间序列的时间区间
disp(t)
ActorPos = timeseries(ActorPositon(:,1:2),t);%将位置信息转换为时间序列
plot(scenario)%画场景
xlabel('时间');
ylabel('位置')
plot(t,ActorPositon(:,1),'r');
hold on
plot(t,ActorPositon(:,2),'b');
legend('纵坐标', '横坐标');
set(gcf,'Color','w')
生成的时间序列结果如下: