实验六 自动驾驶建模与仿真

news/2024/11/19 17:34:05/

【实验目的】

  1. 了解Matlab/Simulink软件环境,熟悉Simulink建模步骤;
  2. 了解车辆运动控制的基本原理,学会简单的车辆运动控制建模及仿真;
  3. 了解自动驾驶建模的基本过程,了解典型ADAS系统模型的应用特点。
  4. 了解自动驾驶相关函数,认识自动驾驶函数的功能及用途。

【实验性质】

验证性实验。

【实验要求】

Matlab2020+软件。

【实验内容】

  1. 操作Matlab软件,学会进行Simulink图形化建模。
  2. 调试车辆运动控制模型。
  3. 学习典型ADAS系统,分析其功能模块组成。
  4. 调用自动驾驶函数进行自动驾驶场景仿真。

【实验步骤】

1、车辆运动控制建模学习

(1)打开的车辆纵向运动控制模型,如下图所示:

 

打开Simulink工具箱(即“Library Browser”),在工具箱中查找模型中的图形符号,学习工具箱中模型库的使用方法。

运行上面的模型,查看并保存运行结果,选取两个运行结果截图贴在下面区域。

模块(示波器)名称:   scope2          

       模块(示波器)名称:   scope3          

 

        2、高级驾驶辅助系统(ADAS)建模学习

  展开自动驾驶工具箱,可以发现里面有很多Matlab自带的案例,选择其一打开,分析其组成及执行过程。

3、自动驾驶场景练习

(1)模拟一辆汽车在S形道路上运动

在Matlab命令行窗口输入以下命令,在表格右列补充完善代码注释(手工书写):

s=drivingScenario;

roadCenters=[-35,20,0;-20,-20,0;0,0,0;20,20,0;35,-20,0];

lm=[laneMarking('Solid','Color','w'); ...

laneMarking('Dashed','Color','y');...

laneMarking('Dashed','Color','y');...

laneMarking('Solid','Color','w')];

ls=lanespec(3,'Marking',lm);

road(s, roadCenters, 'Lanes', ls);

car=vehicle(s, 'ClassID',1,'Position',[-35,20,0]);

waypoints=[-35,20,0;-20,-20,0; 0,0,0;20,20,0; 35,-20,0];

speed=10;

trajectory(car, waypoints, speed);

plot(s);

while advance(s)

   lbdry=laneBoundaries(car);

end

%定义驾驶场景

%设置道路中心

%设置车道标线

%设置车道规范

%在驾驶场景中添加道路

%在驾驶场景中添加静止车辆

%在驾驶场景中添加运动车辆

%设置车辆航路点

%设置车速

%创建车辆轨迹

%绘制驾驶场景

%仿真循环开始

%显示车辆边界

%仿真结束

 

姿态:

ActorID:参与者标识

Position:参与者位置(单位m)

Velocity:速度(单位m/s)

Roll:横滚角(度)

Pitch:俯仰角(度)

Yaw:偏航角(度)

AngularVelocity:角速度(度/s)

运行结果如下图所示:

 

(2)模拟静止车辆和运动车辆在道路上行驶。

在Matlab命令行窗口输入以下命令,在表格右列补充完善代码注释(手工书写):

s=drivingScenario;

roadCenters=[0,0; 10,0; 53,-20];

road(s, roadCenters, 'Lanes', lanespec(2));

stationaryCar=vehicle(s, 'Position',[25,-5.5,0], 'Yaw',-22);

passingCar=vehicle(s);

waypoints=[1,-1.5; 16.4,-2.5; 17.4,-2.8; 23.8,-2; 25,-2.5; 50,-16];

speed=5;

trajectory(passingCar, waypoints, speed);

plot(s, 'Waypoints', 'on');

rec=record(s);

rec(1).ActorPoses(2);

rec(end).ActorPoses(2);

ans

%while advance(s)

%   pause(0.01);

%end

%poses=actorPoses(s);

%定义驾驶场景

%设置道路中心

%在驾驶场景中添加道路

%在驾驶场景中添加静止车辆

%在驾驶场景中添加运动车辆

%设置车辆航路点

%设置车速

%创建车辆轨迹

%绘制驾驶场景

%运行场景并记录

%显示车辆模拟开始姿态

%显示车辆模拟结束姿态

%姿态结构

%仿真循环开始

%停顿时间

%仿真结束

%获取交通参与者姿态

姿态:

ActorID:参与者标识

Position:参与者位置(单位m)

Velocity:速度(单位m/s)

Roll:横滚角(度)

Pitch:俯仰角(度)

Yaw:偏航角(度)

AngularVelocity:角速度(度/s)

 

  运行结果如下图所

 

 

4、停车场路径规划

  1. 停车场停车路径规划(基于碰撞的路径规划)

Matlab安装目录中搜索 parkingLotCostmap.mat 文件所在路径,并将该目录在Matlab地址栏中打开(设为当前路径)

 

在Matlab命令行窗口输入以下命令,在表格右列补充完善代码注释(手工书写):

data = load('parkingLotCostmap.mat');

costmap = data.parkingLotCostmap;

figure;                                                          

plot(costmap);                                                                      

vehicleDims = vehicleDimensions(4.5, 1.7);                               

numCircles = 3;                                                                              

ccConfig = inflationCollisionChecker(vehicleDims, numCircles);

costmap.CollisionChecker = ccConfig;                                         

figure;                                                                                             

plot(costmap);                                                                               

startPose = [11, 10, 0];                                                                  

goalPose = [31.5, 17, 90];                                                             

planner = pathPlannerRRT(costmap);                                         

refPath = plan(planner, startPose, goalPose);                             

hold on;                                                                                          

plot(refPath);                                                                                 

%加载停车场文件

%下载车辆成本图

%设置图形窗口

%绘制车辆成本图

%设置车辆尺寸

%圆圈数

%检测碰撞

%重新配置成本图

%设置图形窗口

%绘制车辆成本图

%设置初始姿态

%设置目的姿态

%绘制车辆成本图

%设置初始姿态

%设置目的姿态

%创建路径规划器

%路径规划

%保存图形

%绘制路径规划

运行结果如下图所示:

 

  1. 驶出停车场路径规划(验证路径规划)

Matlab安装目录中搜索 parkingLotCostmap.mat 文件所在路径,并将该目录在Matlab地址栏中打开(设为当前路径)。

在Matlab命令行窗口输入以下命令,在表格右列补充完善代码注释(手工书写):

data = load('parkingLotCostmap.mat');  

costmap = data.parkingLotCostmap;

plot(costmap);        

startPose = [4,4,90];

goalPose = [70,35,0];

planner = pathPlannerRRT(costmap);

refPath = plan(planner, startPose, goalPose);

isPathValid = checkPathValidity(refPath,costmap);

transitionPoses = interpolate(refPath); 

hold on;                                              

plot(refPath,'DisplayName','Planned Path'); 

scatter(transitionPoses(:,1),transitionPoses(:,2),[],'filled',

'DisplayName','过渡姿态');

%加载停车场文件

%下载车辆成本图

%绘制车辆成本图

%设置初始姿态

%设置目的姿态

%创建路径规划器

%路径规划

%保存图形

%绘制路径规划

%绘制过渡姿态

运行结果如下图所示:

 


http://www.ppmy.cn/news/75549.html

相关文章

电子邮件协议(SMTP,MIME,POP3,IMAP)

SMTP 关键词: 电子邮件协议:SMTP简单邮件传输协议,负责将邮件上传到服务器,采用TCP的25端口,C/S工作。仅传送ASCII码文本 详细介绍: SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上…

c++ #pragma once与#ifndef对比

当我们编写 C 代码时,经常需要使用头文件来引入一些常用的函数、类或者变量。但是,如果一个头文件被重复包含,就会导致编译错误或者运行时错误。为了避免这种情况的发生,我们需要使用预处理指令来防止头文件被重复包含。在 C 中&a…

阿里 P8 整理的《百亿级并发系统设计》实战手册,实在是太香了

面试官问:如何设计一个高并发系统? 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥有高并发经验者优先。 如果你确实有真才实学,在互…

【JavaSE】Java基础语法(二)

文章目录 1. ⛄类型转换1.1 🪂🪂隐式转换1.2 🪂🪂强制转换 2. ⛄运算符2.1 🪂🪂算术运算符2.1.1 算术运算符2.1.2 字符的“”操作2.1.3 字符串的“”操作2.1.4 数值拆分 2.2 🪂🪂自增…

HTTPS加密流程详解

文章目录 HTTPS与HTTP的关系HTTPS基本工作过程对称密钥非对称密钥中间人攻击证书 HTTPS与HTTP的关系 HTTPS协议基于HTTP,只是比HTTP多了一个加密层,为什么要加密呢?因为网络传输的过程中,明文传输的数据都有可能被劫持篡改&#…

数据结构学习分享之链式二叉树(二)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:数据结构学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你了解更多数据结构的知识   🔝🔝 数据结构第八课 1. 前言&a…

你知道Spring使如何实现事务管理的?

在企业应用程序中,事务管理是一个重要的组成部分。事务用于确保一组数据库操作要么全部成功,要么全部失败,从而保持数据的一致性和完整性。Spring Framework 提供了强大的事务管理功能,使开发人员能够轻松地管理和控制事务的行为。…

按摩仪市场的AB面:暗战不止,迷雾未散

配图来自Canva可画 由于生活节奏的加快以及来自各方的压力,再加上熬夜、长时间低头玩手机等不良生活习惯,导致不少人的身体都出现了亚健康状态。不过,随着当下健康理念逐渐深入人心,人们对于健康的重视程度也持续提升。无论是刘畊…