详解自动驾驶仿真框架OpenCDA: An Open Cooperative Driving Automation Framework Integrated with Co-Simulation

在这里插入图片描述
本文介绍一款同时支持协同驾驶开发与测试、自动驾驶全栈开发 和 CARLA-SUMO联合仿真的开源框架 OpenCDA,论文已收录于 ITSC 2021。主要feature有:

  1. 支持CARLA-SUMO联合仿真,CARLA端主管环境渲染、传感器模拟、车辆动力,Sumo端主管交通仿真。
  2. 同时支持协同驾驶/单车智能的开发。内置简单易用的V2X模拟,可以灵活模拟各种噪声与信号延迟。
  3. OpenCDA自带默认的感知、定位、规划、控制、协同变道与车队行驶的算法,可以说搞懂了OpenCDA就等于搞懂了如何在CARLA里做完整的自动驾驶全栈开发。
  4. 自带10+个测试场景,可快速测试你各个模块算法的鲁棒性。在特定地图下自定义场景快捷简单,只需给定一个yaml文件+10行代码即可搞定!
  5. 框架高度模块化,可以轻易将任一模块里的算法切换为用户的算法,而不会影响其他的模块运行。
  6. 提供默认的评价指标,每次仿真运行后自动评价各模块表现与整车表现。
  7. 安装简便,文档记录详细,有完整的开发者手册。

论文链接为:https://arxiv.org/pdf/2107.06260.pdf

项目链接为:https://github.com/ucla-mobility/OpenCDA

文档链接为:https://opencda-documentation.readthedocs.io/en/latest/


文章目录

      • 1. Overview of OpenCDA
      • 2. Experiment Setups and Evaluation Measurement
        • 2.1 Platooning Protocol Design
        • 2.2 Platooning Scenario Testing Design
        • 2.3 Evaluation Measurements
      • 3. Result Analysis
        • 3.1 Single Lane Platooning
        • 3.2 Cooperative Merge and Joint Platoon

1. Overview of OpenCDA

下面对 OpenCDA 进行介绍,如下图所示,OpenCDA由三部分组成:simulation toolscooperative driving automation systemscenario manager

  • 仿真工具中,环境仿真使用CARLA仿真,交通仿真使用SUMO仿真,此外还使用了其它仿真工具,例如无线通信仿真工具ns-3等。
  • 协同驾驶系统中,传感器模块收集原始的传感器信息,信息传送到感知层,然后传递到规划层,最后通过执行层发送执行命令,CARLA 执行器执行命令。
  • 场景管理中,包含场景配置文件场景初始化特定事件触发器评估功能。场景中包含静态元素和动态元素,静态元素由CARLA确定,动态元素由配置文件确定。当任务结束时,会对整个驾驶过程进行评估,包括交通层面评估以及单车层面评估。
    在这里插入图片描述

Software Class Design and Logic Flow

为了更好地说明OpenCDA是如何工作的,这里以一个应用例子 vehicle platooning 来说明,首先介绍类组件,如下图所示。

使用分层类管理器来控制仿真,最基础的类为 VehicleManager,包含着全栈协同驾驶算法。类成员 PerceptionManagerLocalizationManager 对自车进行感知和定位。BehaviorAgent 规划驾驶行为,同时其 LocalPlanner 通过三次样条插值方法产生轨迹:
yt=α0+α1xt+α2xt2+α3xt3(1)y_t = \alpha_0+\alpha_1x_t+\alpha_2x_t^2+\alpha_3x_t^3 \tag{1}yt=α0+α1xt+α2xt2+α3xt3(1)
at={min⁡(vtarget−vtΔt,a1),if vtarget≥vtmax⁡(vtarget−vtΔt,a2),otherwise(2)a_t =\begin {cases} \min(\frac{v_{target}-v_t}{\Delta t},a^1), &\text {if $v_{target} \geq v_t$} \\ \max(\frac{v_{target}-v_t}{\Delta t},a^2), &\text {otherwise} \end{cases} \tag{2} at={min(Δtvtargetvt,a1),max(Δtvtargetvt,a2),if vtargetvtotherwise(2)
xt=vt−1Δt+at−1Δt22(3)x_t = v_{t-1}\Delta t + \frac{a_{t-1}\Delta t^2}{2} \tag{3}xt=vt1Δt+2at1Δt2(3)
vt=vt−1+at−1Δt(4)v_t = v_{t-1} + a_{t-1}\Delta t \tag{4}vt=vt1+at1Δt(4)

其中,xt,ytx_t,y_txt,yt是汽车在ttt时刻的位置,α0,α1,α2,α3\alpha_0,\alpha_1,\alpha_2,\alpha_3α0,α1,α2,α3是三次多项式系数,ata_tat是加速度,其中a1,a2a^1,a^2a1,a2是与舒适性相关的加速度和减速度。Δt\Delta tΔt是时间精度,vtarget,vtv_{target},v_tvtarget,vt是最终想要的目标速度和ttt时刻的速度。

产生后的轨迹会传送到 ControlManager 产生转向,制动,加速等控制命令。V2XManager 会发送或接收由其余CAVs生成的数据包,用于协同驾驶应用。
在这里插入图片描述
仿真工作时的逻辑流如下图所示。场景测试时:

  • 通过yaml文件配置CARLA server交通情况和每一个汽车参数(传感器参数、检测模型、目标速度等)。
  • 接下来,每辆汽车通过V2XManager信息共享,如果激活了协同应用,CoopPerceptionManagerCoopLocalizationManager会使用所有的信息进行目标检测和定位;反之,汽车会选择默认的PerceptionManagerLocalizationManager
  • 信息传送到下流模块,进行规划。同样地,协同应用激活的话会选择协同策略做出决策;反之BehaviorAgentTrajectoryPlanner会规划行为并生成平顺的轨迹。
  • 最终,ControlManager输出控制命令,CARLA server将这些命令应用在对应汽车上,更新信息,进行下一步仿真。
  • 仿真终止时,内置评估工具箱对驾驶性能进行评估,包括感知、定位、规划、控制、安全性等。
    在这里插入图片描述

2. Experiment Setups and Evaluation Measurement

为了验证OpenCDA的实际效果如何,作者以汽车编队(vehicle platooning)为例来说明,整个仿真测试时间步长为0.05s0.05s0.05s

2.1 Platooning Protocol Design

首先是编队协议设计,在编队应用中,所有车辆由PlatoonManager来管理,协议如下图所示。整体上,整个驾驶任务可以分成许多子任务,编队成员根据编队状态的不同也有着不同的驾驶模式。

编队应用被激活后,编队中的领航车(leading vehicle)会通过V2XManager听取外部车辆的入队请求。如果没有收到请求,整个队列会保持稳定行驶而领航车会保持领航模式。与此同时,如果协同感知应用被激活,编队每一个成员会共享彼此间的感知数据(如图像,3D点云),并且会通过PerceptionManager进行感知处理,领航车会得到更好的感知结果。

没有车辆申请入队的话,所有跟随车(following vehicle)会平缓的调整车速使队列的相邻汽车保持一个恒定时间间隔,为了完成这个任务,编队成员会通过V2XManager得到前车的轨迹,方法如下:
posjt=posj−1t−Lj−1+posjt−Δt×gap/Δt1+gap/Δt(5)pos^t_j = \frac{pos^t_{j-1}-L_{j-1}+pos^{t-\Delta t}_j\times gap/ \Delta t}{1+gap/ \Delta t} \tag{5}posjt=1+gap/Δtposj1tLj1+posjtΔt×gap/Δt(5)

vjt=∣∣posjt−posjt−Δt∣∣Δt(6)v^t_j = \frac{||pos^t_{j}-pos^{t-\Delta t}_{j}||}{ \Delta t} \tag{6}vjt=ΔtposjtposjtΔt(6)

其中posjt,posj−1tpos^t_j,pos^t_{j-1}posjt,posj1tttt时刻车辆编号为jjj的位置和其前车位置。Lj−1L_{j-1}Lj1是前车长度,Δt\Delta tΔt是时间精度,gapgapgap是想要的时间间隔。vjtv^t_jvjtttt时刻汽车速度。

如果队列收到了一个入队请求,领航车会根据申请车的位置,规划路径来判断是否可以进行入队操作。如果入队申请被拒的话,车辆会继续寻找并保持单车驾驶模式;否则PlatooningManager会选择最合适的入队位置,如果需要的话,队列成员会调整自身速度,入队车辆会移动到入队位置完成入队操作。
在这里插入图片描述


2.2 Platooning Scenario Testing Design

下图是编队联合仿真测试场景片段,整个测试都使用了感知和定位算法,感知算法为yolov5,定位算法为GNSS/IMU融合算法。

在这里插入图片描述

如下图所示,这里有两个测试场景:

  • 单车道编队,5辆汽车在同一车道行驶,为了测试队列稳定性,当领航车突然改变车速时,观察跟随车会不会继续保持想要的时间间隔。
  • 协同编队,当其余车道上车辆申请入队时,领航车决定最佳的入队位置,这里使用了两种算法来选择最佳入队位置:一种是heuristic-based,另一种是Genetic Fuzzy System
Single lane platooningCooperative Merge and join the platoonReal-world human-driven vehicle speed profile
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.3 Evaluation Measurements

这里是一些评价指标:

  • 安全性,自动驾驶中最重要的评价指标,使用了碰撞时间(TTC)平均碰撞时间(attc)危险频率(碰撞时间小于警告时间),平均碰撞时间计算方法为:
    ATTC=∑t=1Nxit−xi−1t−lvit−vi−1tN(7)ATTC= \frac{{\sum^{N}_{t=1}}\frac{x^t_i-x^t_{i-1}-l}{v^t_i-v^t_{i-1}}}{N} \tag{7}ATTC=Nt=1Nvitvi1txitxi1tl(7)
    其中,xitx^t_ixitttt时刻车辆位置,xi−1tx^t_{i-1}xi1t是前车位置,lll是车辆长度,NNNvit<vi−1tv^t_i<v^t_{i-1}vit<vi1t的仿真时间步数。
  • 稳定性,使用时间间隔和加速度来表示;
  • 效率,使用完成入队时间和加速度标准差来表示。

3. Result Analysis

3.1 Single Lane Platooning

单车道入队测试结果为:

在这里插入图片描述在这里插入图片描述

3.2 Cooperative Merge and Joint Platoon

协同入队测试结果为:

在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439605.shtml

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

相关文章

JavaMonitor 监视器

为什么wait(), notify()和notifyAll()必须在同步方法或者同步块中被调用&#xff1f; 当一个线程需要调用对象的wait()方法的时候&#xff0c;这个线程必须拥有该对象的锁&#xff0c;接着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的notify()方法。同样的…

KITTI自动驾驶数据集可视化教程

本文介绍关于自动驾驶数据集KITTI的基本操作&#xff0c;包括Camera和LiDAR可视化教程&#xff0c;源码已上传&#xff1a;https://download.csdn.net/download/cg129054036/20907604 1. 数据准备 将 KITTI 数据 (calib, image_2, label_2, velodyne) 添加到 dataset/KITTI/ob…

重读经典《Quaternion kinematics for the error-state Kalman filter》

本文将介绍一篇关于 四元数运动学的误差卡尔曼滤波 经典论文。本文结构如下&#xff1a; 第1章四元数定义和性质介绍&#xff0c;包括&#xff1a;加法、减法、乘法&#xff08;矩阵表示&#xff09;、模、幂数、指数运算等。第2章旋转群定义和性质介绍&#xff0c;包括&#…

【CodeForces - 789C】Functions again(最大子段和变形,dp,思维)

题干&#xff1a; Something happened in Uzhlyandia again... There are riots on the streets... Famous Uzhlyandian superheroes Shean the Sheep and Stas the Giraffe were called in order to save the situation. Upon the arriving, they found that citizens are wo…

一步步编写操作系统 55 CPL和DPL入门2

接上节。 图中第132行的jmp指令&#xff0c;段选择子为SELECTOR_CODE&#xff0c;其RPL的值为RPL0&#xff0c;RPL0定义在include/boot.inc中&#xff0c;其值为0。选择子的索引部分值为1&#xff0c;表示对应GDT中第1个段描述符&#xff0c;该描述符的DPL为0&#xff0c;&…

详解停车位检测算法 Vision-Based Parking-Slot Detection: A DCNN-Based Approach and a Large-Scale Benchmark

本文介绍一篇基于深度学习的停车位检测论文&#xff1a;DeepPS&#xff0c;作者同时公开了数据集ps2.0&#xff0c;工作很扎实&#xff0c;对于入门停车位检测很有帮助&#xff0c;论文发表在 IEEE T-IP 2018。 项目链接为&#xff1a;https://cslinzhang.github.io/deepps/ 0…

Monitor(管程)是什么意思?Java中Monitor(管程)的介绍

本篇文章给大家带来的内容是关于Monitor&#xff08;管程&#xff09;是什么意思&#xff1f;Java中Monitor&#xff08;管程&#xff09;的介绍&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 monitor的概念 管程&#x…

详解经典GPS辅助惯性导航论文 A GPS-aided Inertial Navigation System in Direct Configuration

本文介绍一篇 IMU 和 GPS 融合的惯性导航论文&#xff0c;重点是理解本文提出的&#xff1a;Dynamical constraints update、Roll and pitch updates 和 Position and heading updates。 论文链接为&#xff1a;https://www.sciencedirect.com/science/article/pii/S166564231…

详解停车位检测论文:Attentional Graph Neural Network for Parking-slot Detection

本文介绍一篇注意力图神经网络用于停车位检测论文&#xff0c;论文已收录于 RA-L2021。在之前的基于卷积神经网络的停车位检测方法中&#xff0c;很少考虑停车位标记点之间的关联信息&#xff0c;从而导致需要复杂的后处理。在本文中&#xff0c;作者将环视图中的标记点看作图结…

详解3D物体检测模型 SPG: Unsupervised Domain Adaptation for 3D Object Detection via Semantic Point Generation

本文对基于激光雷达的无监督域自适应3D物体检测进行了研究&#xff0c;论文已收录于 ICCV2021。 在Waymo Domain Adaptation dataset上&#xff0c;作者发现点云质量的下降是3D物件检测器性能下降的主要原因。因此论文提出了Semantic Point Generation (SPG)方法&#xff0c;首…

Waymo研发经理:《自动驾驶感知前沿技术介绍》

Waymo研发经理|自动驾驶感知前沿技术介绍这是Waymo研发经理&#xff08;VoxelNet作者&#xff09;的一个最新分享报告&#xff1a;《自动驾驶感知前沿技术介绍》。在这份报告里&#xff0c;介绍了Waymo在自动驾驶感知中五个研究方向的最新成果。 1. Overview of the autonomous…

几种常见软件过程模型的比较

瀑布模型 瀑布模型&#xff08;经典生命周期&#xff09;提出了软件开发的系统化的、顺序的方法。其流 程从用户需求规格说明开始&#xff0c;通过策划、建模、构建和部署的过程&#xff0c;最终提供一 个完整的软件并提供持续的技术支持。 优点&#xff1a; 1. 强调开发的…

两篇基于语义地图的视觉定位方案:AVP-SLAM和RoadMap

本文介绍两篇使用语义地图进行视觉定位的论文&#xff0c;两篇论文工程性很强&#xff0c;值得一学。 AVP-SLAM是一篇关于自动泊车的视觉定位方案&#xff0c;收录于 IROS 2020。论文链接为&#xff1a;https://arxiv.org/abs/2007.01813&#xff0c;视频链接为&#xff1a;ht…

【51Nod - 1270】数组的最大代价(dp,思维)

题干&#xff1a; 数组A包含N个元素A1, A2......AN。数组B包含N个元素B1, B2......BN。并且数组A中的每一个元素Ai&#xff0c;都满足1 < Ai < Bi。数组A的代价定义如下&#xff1a; &#xff08;公式表示所有两个相邻元素的差的绝对值之和&#xff09; 给出数组B&…

一步步编写操作系统 56 门、调用门与RPL序 1

小弟多次想把调用门和RPL分开单独说&#xff0c;但几次尝试都没有成功&#xff0c;我发现它们之间是紧偶合、密不可分&#xff0c;RPL的产生主要是为解决系统调用时的“越权”问题&#xff0c;系统调用的实现方式中&#xff0c;以调用门和中断门最为适合。由于以后我们将用中断…

自动驾驶纯视觉3D物体检测算法

视频链接&#xff1a;https://www.shenlanxueyuan.com/open/course/112 这是Pseudo-LiDAR作者最近做的一个分享报告&#xff1a;《Pseudo-LiDAR&#xff1a;基于相机的3D物体检测算法》。在这份报告里&#xff0c;作者主要介绍了博士期间的研究成果&#xff1a;基于深度学习的…

一步步编写操作系统 57 门、调用门与RPL序 2

接上文&#xff1a; 提供了4种门的原因是&#xff0c;它们都有各自的应用环境&#xff0c;但它们都是用来实现从低特权级的代码段转向高特权级的代码段&#xff0c;咱们这里也只讨论有关特权级的功用&#xff1a; 1.调用门 call和jmp指令后接调用门选择子为参数&#xff0c;以…

Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation

在上一讲《Coursera自动驾驶课程第14讲&#xff1a;Linear and Nonlinear Kalman Filters》 我们学习了卡尔曼滤波相关知识&#xff0c;包括&#xff1a;线性卡尔曼滤波&#xff08;KF&#xff09;、扩展卡尔曼滤波&#xff08;EKF&#xff09;、误差卡尔曼滤波&#xff08;ES-…

详解车道线检测数据集和模型 VIL-100: A New Dataset and A Baseline Model for Video Instance Lane Detection

本文介绍一个新的车道线数据集 VIL-100 和检测模型 MMA-Net&#xff0c;论文已收录于 ICCV2021&#xff0c;重点是理解本文提出的 LGMA 模块&#xff0c;用于聚合局部和全局记忆特征。 论文链接&#xff1a;https://arxiv.org/abs/2108.08482 项目链接&#xff1a;https://gi…

七天入门图像分割(1):图像分割综述

最近在研究自动驾驶视觉语义地图构建&#xff0c;因为要使用到语义分割技术&#xff0c;趁此机会学习了百度飞桨的图像分割课程&#xff0c;课程蛮好的&#xff0c;收获也蛮大的。 课程地址&#xff1a;https://aistudio.baidu.com/aistudio/course/introduce/1767 1. 课程简要…