今天要给大家分享的是如何在 3D 环境中仿真自动驾驶汽车。原文是一篇在德国大学生方程式大赛网站上的博客文章:https://www.formulastudent.de/pr/news/details/article/driving-an-autonomous-vehicle-in-a-3d-simulation-environment-with-recorded-synthetic-data/。
在本文中,我们将演示一种在封闭环路中自动驾驶汽车的方法。我们的任务是在未知的环境中驾驶汽车,避免与锥桶碰撞,确保完成必要的圈数。
场景创建
第一步是创建一个由车辆,赛道和锥桶组成的3D仿真环境。Vehicle Dynamics Blockset(https://ww2.mathworks.cn/products/vehicle-dynamics.html) 工具箱带有预建的 3D 场景,以仿真和可视化Simulink中建模的车辆。这些 3D 场景是使用 Epic Games 的虚幻引擎可视化的。 由于当前问题需要自定义场景,因此我们使用了虚幻编辑器和用于虚幻4引擎工程的 Vehicle Dynamics Blockset 支持包来构建场景。 要了解如何自定义场景(图2),请按照文档中说明的步骤进行操作。当然,您也可以使用 RoadRunner 设计 3D 场景以进行自动驾驶的仿真。
图1. 虚幻编辑器中的自定义场景
图2. 创建自定义场景的步骤
第一圈:环境建图
图3.用于环境建图的 Simulink 模型
下一个任务是环境建图。如上一节所述,无人驾驶车辆处于未知环境中,该环境由放置在赛道两侧的锥桶组成。为了检测锥桶并为第一圈生成参考路径,我们建立了 Simulink 模型,如图3所示。图4显示了该模型在第一圈中执行的步骤:
图4. 环境建图的框图表达
· 激光雷达安装:激光雷达的目的是测量车辆到锥桶的距离。在 3D 仿真环境中,Simulation 3D Lidar(https://ww2.mathworks.cn/help/driving/ref/simulation3dlidar.html)模块提供了激光雷达传感器。使用 Epic Games 的虚幻引擎渲染环境, 该模块返回具有指定视场和角分辨率的点云。· 锥桶检测(图6):锥桶检测算法的目标是对属于一个锥桶的所有点进行聚类,并确定锥桶的位置。这是通过计算点云中相邻点之间的距离来完成的。属于同一个锥桶的点彼此靠近,而锥桶彼此相距相对较远。聚类后,锥桶的中点是锥桶中所有点的位置的平均值。
图5.激光雷达处理和控制
图6. 显示在点云中检测到的锥桶
· 驾驶控制:驾驶控制器算法基于理解锥桶在激光雷达点云中的位置。该算法有两个目标:
确定车辆前方的两个最重要的锥桶
避免撞到任何锥桶
这是通过找到两个最接近的锥桶并计算两个锥桶的中点来完成的。该算法生成加速,转向指令通往该中点。该算法还将车辆的最大速度限制为一个预设值。· 车辆动力学(图7):车辆动力学模型由车身,简化的动力总成,传动系统,纵向车轮和转向运动学组成。该模型的目的是根据转向,加速和减速命令来计算车辆的位置和方向。Simulation 3D Vehicle with Ground Following(https://ww2.mathworks.cn/help/vdynblks/ref/simulation3dvehiclewithgroundfollowing.html)和 Simulation 3D Scene Configuration(https://ww2.mathworks.cn/help/vdynblks/ref/simulation3dsceneconfiguration.html)用于在虚幻引擎中设置 3D 仿真环境。
图7.车辆模型·输出:运行仿真后,激光雷达成功检测到锥桶。此外,车辆绘制环境图并生成参考轨迹。车辆以最大 8m/s 的速度缓慢行驶。
第二圈:跟随参考轨迹
在第二圈中,车辆跟随从第一圈仿真中获得的参考路径。图8 显示了 Simulink 模型。与上一个模型相比,在此模型中,我们删除了激光雷达模块,并增加了纵向和横向控制器。
图8. 用于跟随参考轨迹的 Simulink 模型
现在,这是一个经典的闭环控制系统问题,控制器的任务是输出所需的转向命令,加速命令和减速命令,以更高的速度跟随参考路径。
图9. 第二圈的闭环控制框图
·横向控制器:Pure pursuit 控制器用于车辆的横向控制。为了在 Simulink 中实现控制器,我们使用了 Pure Pursuit 模块来瞄准目标方向。此外,使用车轮转角公式将目标方向转换为所需的转向角。要了解有关使用 Pure pursuit 控制器的车辆路径跟随的更多信息,请参考:https://ww2.mathworks.cn/help/robotics/ref/purepursuit.html。
图10. Pure pursuit 控制器
·纵向驾驶员模块用于调节车辆的速度(https://ww2.mathworks.cn/help/vdynblks/ref/longitudinaldriver.htmlhttps:/www.mathworks.com/help/vdynblks/ref/longitudinaldriver.html)。具体来说,它是一个 PI 控制器,可为参考速度生成执行信号。
图11. 纵向驾驶员
请注意,目前,我们通过使用查表来定义不同区域的速度,从而简化了速度曲线的创建过程。但是,更推荐使用 Velocity Profiler(https://ww2.mathworks.cn/help/driving/ref/velocityprofiler.html)来自动化速度曲线生成过程。·结果:图12 显示了仿真轨迹和参考轨迹的比较。从结果可以明显看出,横向控制器成功跟随了参考路径。除了横向控制外,纵向驾驶员还可以调节所需的速度。
图12. 第二圈获得的车辆轨迹
总结
这篇文章展示了 MathWorks 工具如何在存在障碍物的情况下用于在封闭赛道上自主驾驶车辆。您可以扩展此方法,并利用文档中提供的示例来设计和仿真自动驾驶汽车:https://ww2.mathworks.cn/help/driving/examples.html。 随着汽车行业的进步和发展,各种学生竞赛中也开始引入了无人驾驶类别,中国大学生方程式无人车(FSAC)竞赛就是其中之一。该类比赛的目的是让同学们利用不同学科知识设计和制造可以自动行驶的汽车。使用 MATLAB 和 Simulink,您可以设计自动驾驶系统功能,包括传感,路径规划,传感器融合和控制系统。
责任编辑:lq
-
3D
+关注
关注
9文章
2864浏览量
107337 -
编辑器
+关注
关注
1文章
803浏览量
31127 -
自动驾驶
+关注
关注
783文章
13694浏览量
166165
原文标题:如何在 3D 环境中仿真自动驾驶汽车
文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论