我是靠谱客的博主 能干刺猬,最近开发中收集的这篇文章主要介绍详解自动驾驶仿真框架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 通过三次样条插值方法产生轨迹:
y t = α 0 + α 1 x t + α 2 x t 2 + α 3 x t 3 (1) y_t = alpha_0+alpha_1x_t+alpha_2x_t^2+alpha_3x_t^3 tag{1} yt=α0+α1xt+α2xt2+α3xt3(1)
a t = { min ⁡ ( v t a r g e t − v t Δ t , a 1 ) , if  v t a r g e t ≥ v t max ⁡ ( v t a r g e t − v t Δ t , a 2 ) , 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)
x t = v t − 1 Δ t + a t − 1 Δ t 2 2 (3) x_t = v_{t-1}Delta t + frac{a_{t-1}Delta t^2}{2} tag{3} xt=vt1Δt+2at1Δt2(3)
v t = v t − 1 + a t − 1 Δ t (4) v_t = v_{t-1} + a_{t-1}Delta t tag{4} vt=vt1+at1Δt(4)

其中, x t , y t x_t,y_t xt,yt是汽车在 t t t时刻的位置, α 0 , α 1 , α 2 , α 3 alpha_0,alpha_1,alpha_2,alpha_3 α0,α1,α2,α3是三次多项式系数, a t a_t at是加速度,其中 a 1 , a 2 a^1,a^2 a1,a2是与舒适性相关的加速度和减速度。 Δ t Delta t Δt是时间精度, v t a r g e t , v t v_{target},v_t vtarget,vt是最终想要的目标速度和 t t t时刻的速度。

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

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

2. Experiment Setups and Evaluation Measurement

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

2.1 Platooning Protocol Design

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

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

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

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

其中 p o s j t , p o s j − 1 t pos^t_j,pos^t_{j-1} posjt,posj1t t t t时刻车辆编号为 j j j的位置和其前车位置。 L j − 1 L_{j-1} Lj1是前车长度, Δ t Delta t Δt是时间精度, g a p gap gap是想要的时间间隔。 v j t v^t_j vjt t t t时刻汽车速度。

如果队列收到了一个入队请求,领航车会根据申请车的位置,规划路径来判断是否可以进行入队操作。如果入队申请被拒的话,车辆会继续寻找并保持单车驾驶模式;否则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)危险频率(碰撞时间小于警告时间),平均碰撞时间计算方法为:
    A T T C = ∑ t = 1 N x i t − x i − 1 t − l v i t − v i − 1 t N (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)
    其中, x i t x^t_i xit t t t时刻车辆位置, x i − 1 t x^t_{i-1} xi1t是前车位置, l l l是车辆长度, N N N v i t < v i − 1 t v^t_i<v^t_{i-1} vit<vi1t的仿真时间步数。
  • 稳定性,使用时间间隔和加速度来表示;
  • 效率,使用完成入队时间和加速度标准差来表示。

3. Result Analysis

3.1 Single Lane Platooning

单车道入队测试结果为:

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

3.2 Cooperative Merge and Joint Platoon

协同入队测试结果为:

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

最后

以上就是能干刺猬为你收集整理的详解自动驾驶仿真框架OpenCDA: An Open Cooperative Driving Automation Framework Integrated with Co-Simulation的全部内容,希望文章能够帮你解决详解自动驾驶仿真框架OpenCDA: An Open Cooperative Driving Automation Framework Integrated with Co-Simulation所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部