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

news2024/12/25 10:11:44

【实验目的】

  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.coloradmin.cn/o/549814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud组件——Nacos】

前置准备: 分别提供订单系统(OrderService)和用户系统(UserService)。订单系统主要负责订单相关信息的处理,用户系统主要负责用户相关信息的处理。 一、服务注册与发现 1.1、在父工程当中引入Nacos依赖 …

JavaScript实现输入数值判断是否为质数、合数的代码

以下为实现输入数值判断是否为质数、合数的程序代码和运行截图 目录 前言 一、输入数值判断是否为质数、合数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找; 2.本博文代码可…

通讯录实现的需求分析和架构设计

本文实现的是通讯录产品的需求分析和架构设计,重点在于结构层次的设计,方便代码阅读和维护。 一、通讯录实现的需求分析 1、通讯录的功能清单 添加一个人员打印显示所有人员删除一个人员查找一个人员保存文件加载文件 2,数据存储信息 人员…

实际开发中一些实用的JS数据处理方法

写在开头 JavaScript 是一种脚本语言,最初是为了网页提供交互式前端功能而设计的,而现在,通过 Node.js,JavaScript 还可以用于编写服务器端代码。 JavaScript 具有动态性、基于原型的面向对象特性、弱类型、多范式、支持闭包执行…

Golang每日一练(leetDay0072) 课程表 I\II Course Schedule

目录 1. 课程表 Course Schedule I 🌟🌟 2. 课程表 Course Schedule II 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一…

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

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

学系统集成项目管理工程师(中项)系列23b_信息系统集成及服务管理(下)

1. 信息技术服务 1.1. 供方为需方提供如何开发、应用信息技术的服务,以及供方以信息技术为手段提供支持需方业务活动的服务 1.2. 信息技术咨询服务、设计与开发服务、信息系统集成服务、数据处理和运营服务及其他信息技术服务 2. 信息系统审计 2.1. 收集并评估证…

Golang中的协程(goroutine)

目录 进程 线程 并发 并行 协程(goroutine) 使用sync.WaitGroup等待协程执行完毕 多协程和多线程 进程 进程就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理…

C语言_用VS2019写第一个C语言或C++程序

接上一篇:C语言简述、特点、常用编译器,VS2010写第一个C语言程序 本次来分享用VS2019来写C语言或C程序,也是补充上一篇的知识,话不多说,开始上菜: 此博主在CSDN发布的文章目录:我的CSDN目录&…

微信小程序nodejs+vue+uniapp超市网上购物商城系统

超市购物系统用户端要求在系统的安卓手机上可以运行,主要实现了管理端;首页、个人中心、用户管理、商品分类管理、商品信息管理、商品入库管理、订单信息管理、订单配送管理、订单评价管理、退货申请管理、换货申请管理、系统管理,用户端&…

总结857

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前3讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…

4-《安卓进阶》

4-《安卓进阶》 1 Okhttp2 Retrofit3 Android常用图片库对比4 Glide原理手写图片加载框架思路5 Rxjava6 Android IPC机制(面试八股文之一)6.1.Android中进程和线程的区别6.2.IPC概念6.3.Android序列化与反序列化6.3.Android如何开启多进程?多…

MDIO总线

基于linux-3.14.16 首先要搞清楚总线的位置,即硬件上的位置 如上图,mdio总线是mac和phy之间的连接方式,主要用于配置配置phy的寄存器,所以phy应该是器的一类物理设备,mdio总线驱动和总线设备都是围绕phy工作的。 一…

一图看懂 async_timeout 模块:异步 I/O 的超时设置,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 async_timeout 模块:异步 I/O 的超时设置,资料整理笔记(大全) 🧊摘要🧊模块图🧊类关系图…

chatgpt赋能Python-pythonfrozenset

Python frozenset介绍 在Python中,可以通过frozenset创建不可变集合。与set不同,frozenset一旦被创建就无法修改。frozenset通常用于作为字典的键,因为字典键必须是不可变的。 如何创建frozenset frozenset可以通过将可迭代对象作为参数传…

Blazor实战——Known框架快速开始

Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 开源地址: https://gitee.com/known/Known 1. 安装项目模板并创建新项目 打开命令行输入如下命令安装和创建。 -- 安装模板 dotnet n…

chatgpt赋能Python-pythonformat的用法小数点位数

Python中的format函数和小数点位数 介绍 Python中的format函数是一种格式化输出字符串的方法,允许你使用占位符来指定输出的格式。你可以使用format函数来格式化字符串,比如确定字符串的长度、插入变量或按特定格式输出字符串。 在本文中,…

Xubuntu22.04之自动调节亮度护眼redshift(一百七十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

chatgpt赋能Python-pythonfib

Pythonfib:一个优秀的计算斐波那契数列的Python函数 斐波那契数列是一种非常有趣也非常常见的数列,它起源于数学但在计算机科学中也经常被用到。Pythonfib是一个优秀的Python函数,可以用来计算斐波那契数列。本文将对Pythonfib进行详细介绍&…

本地电脑搭建Plex私人影音云盘教程,内网穿透实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDN远程穿透的文章:免费搭建Plex家庭影音中心 - 打造超级多媒体中心【公网远程访问…