本文介绍一款同时支持协同驾驶开发与测试、自动驾驶全栈开发 和 CARLA-SUMO联合仿真
的开源框架 OpenCDA
,论文已收录于 ITSC 2021。主要feature有:
- 支持CARLA-SUMO联合仿真,CARLA端主管环境渲染、传感器模拟、车辆动力,Sumo端主管交通仿真。
- 同时支持
协同驾驶/单车智能
的开发。内置简单易用的V2X模拟,可以灵活模拟各种噪声与信号延迟。 - OpenCDA自带默认的
感知、定位、规划、控制、协同变道与车队行驶
的算法,可以说搞懂了OpenCDA就等于搞懂了如何在CARLA里做完整的自动驾驶全栈开发。 - 自带10+个测试场景,可快速测试你各个模块算法的鲁棒性。在特定地图下自定义场景快捷简单,只需给定一个yaml文件+10行代码即可搞定!
- 框架高度模块化,可以轻易将任一模块里的算法切换为用户的算法,而不会影响其他的模块运行。
- 提供默认的评价指标,每次仿真运行后自动评价各模块表现与整车表现。
- 安装简便,文档记录详细,有完整的开发者手册。
论文链接为: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 tools
、cooperative driving automation system
、scenario manager
。
- 仿真工具中,环境仿真使用
CARLA
仿真,交通仿真使用SUMO
仿真,此外还使用了其它仿真工具,例如无线通信仿真工具ns-3
等。 - 协同驾驶系统中,传感器模块收集原始的传感器信息,信息传送到感知层,然后传递到规划层,最后通过执行层发送执行命令,
CARLA
执行器执行命令。 - 场景管理中,包含
场景配置文件
,场景初始化
,特定事件触发器
,评估功能
。场景中包含静态元素和动态元素,静态元素由CARLA
确定,动态元素由配置文件确定。当任务结束时,会对整个驾驶过程进行评估,包括交通层面评估以及单车层面评估。
Software Class Design and Logic Flow
为了更好地说明OpenCDA
是如何工作的,这里以一个应用例子 vehicle platooning
来说明,首先介绍类组件
,如下图所示。
使用分层类管理器来控制仿真,最基础的类为 VehicleManager
,包含着全栈协同驾驶算法。类成员 PerceptionManager
和 LocalizationManager
对自车进行感知和定位。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(Δtvtarget−vt,a1),max(Δtvtarget−vt,a2),if vtarget≥vtotherwise(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=vt−1Δt+2at−1Δt2(3)
vt=vt−1+at−1Δt(4)v_t = v_{t-1} + a_{t-1}\Delta t \tag{4}vt=vt−1+at−1Δ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
信息共享,如果激活了协同应用,CoopPerceptionManager
和CoopLocalizationManager
会使用所有的信息进行目标检测和定位;反之,汽车会选择默认的PerceptionManager
和LocalizationManager
。 - 信息传送到下流模块,进行规划。同样地,协同应用激活的话会选择协同策略做出决策;反之
BehaviorAgent
和TrajectoryPlanner
会规划行为并生成平顺的轨迹。 - 最终,
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/Δtposj−1t−Lj−1+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=Δt∣∣posjt−posjt−Δt∣∣(6)
其中posjt,posj−1tpos^t_j,pos^t_{j-1}posjt,posj−1t是ttt时刻车辆编号为jjj的位置和其前车位置。Lj−1L_{j-1}Lj−1是前车长度,Δt\Delta tΔt是时间精度,gapgapgap是想要的时间间隔。vjtv^t_jvjt是ttt时刻汽车速度。
如果队列收到了一个入队请求,领航车会根据申请车的位置,规划路径来判断是否可以进行入队操作。如果入队申请被拒的话,车辆会继续寻找并保持单车驾驶模式;否则PlatooningManager
会选择最合适的入队位置,如果需要的话,队列成员会调整自身速度,入队车辆会移动到入队位置完成入队操作。
2.2 Platooning Scenario Testing Design
下图是编队联合仿真测试场景片段,整个测试都使用了感知和定位算法,感知算法为yolov5
,定位算法为GNSS/IMU
融合算法。
如下图所示,这里有两个测试场景:
- 单车道编队,5辆汽车在同一车道行驶,为了测试队列稳定性,
当领航车突然改变车速时
,观察跟随车会不会继续保持想要的时间间隔。 - 协同编队,当其余车道上车辆申请入队时,领航车决定最佳的入队位置,这里使用了两种算法来选择最佳入队位置:一种是
heuristic-based
,另一种是Genetic Fuzzy System
。
Single lane platooning | Cooperative Merge and join the platoon | Real-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=N∑t=1Nvit−vi−1txit−xi−1t−l(7)
其中,xitx^t_ixit是ttt时刻车辆位置,xi−1tx^t_{i-1}xi−1t是前车位置,lll是车辆长度,NNN是vit<vi−1tv^t_i<v^t_{i-1}vit<vi−1t的仿真时间步数。 - 稳定性,使用时间间隔和加速度来表示;
- 效率,使用完成入队时间和加速度标准差来表示。
3. Result Analysis
3.1 Single Lane Platooning
单车道入队测试结果为:
3.2 Cooperative Merge and Joint Platoon
协同入队测试结果为: