Plexe论文详读
在闷头自己写了几天程序后,发现自己对于底层的不熟悉还是严重的影响到了进度。因此,最近开始对Plexe的论文和sumo的指导手册进行解读。
需要注意的是,因为主要是面对项目进行学习,所以只取所需,主要集中在对交通流造成的影响,而忽略了关于网络、协议、传输等内容。因此,部分内容可能并不完整,敬请谅解。更多内容可以自己阅读相关文献。
Introduction
编队协同驾驶技术包含通信与网络、车辆控制理论、车辆动力学、运动预测等多个领域的知识,且对于安全性有着极高的要求。在此情况下,分析模型过于粗糙而无法捕获所有细节,真实场景测试对资金、时间、人力等方面的要求极高,仿真模拟成为了研究人员评估协同驾驶系统的最佳选择。
Plexe是什么?
Plexe是基于Veins开发的一个开源、考虑到车辆动力学、通信与网络障碍以及车辆间通信的、模拟真实场景的仿真软件。
Plexe能干什么?
Plexe在Veins的基础上,通过TraCI接口进一步扩展了交互,实现了从Sumo中更便捷的获取车辆数据来发送给其他车辆,供给队列协议和应用程序使用。
框架如图所示(OMNeT++是Veins的基础)
Plexe-Sumo中的队列实现
在Plexe中,编队的实现即指一种新的车辆跟随框架,能够实现开环或闭环加速度控制的纵向控制,以及简化的横向控制(转向),以适应地改变车道并服从队列动力学。
Sumo中常见的汽车跟随模型是IDM或Krauss两类,但在plexe-sumo中采用的是新的汽车跟随模型巡航控制器(Cruise Control, CC)。根绝需求不同,该模型可以通过修改参数实现其它CC/CACC模型。在默认条件下,CC使用Krauss模型来驾驶汽车()
现在Sumo中的CC模型包括标准CC(定速巡航)、ACC(自适应巡航)、CACC(协同自适应巡航)还有一个发动机驱动滞后。通过TraCI接口,可以访问模型以更改车辆行为并检索不同的信息,其他功能请参考SUMO指导文档。
关于上述CC模型,可以设置所需速度、车头时距和所需的距离间隙。
当CACC模型设置成功时,可以向它提供通过车间通信交互的数据。此外,由于存在可以使用从任意车辆接收到的数据来改进性能的控制器,接口中还提供了一个向控制器提供队列中任何车辆数据的模块。
控制器模型
车辆纵向运动的独立控制参数是通过油门控制所驱动的需求加速度 x ¨ \ddot x x¨。但受限于动力系统引起的滞后,驱动并不是立刻的。
Plexe采用一阶低通滤波器来对此驱动滞后进行建模,也就是说实际加速度的计算应该被表示为
x
¨
[
n
]
=
β
⋅
x
¨
d
e
s
[
n
]
+
(
1
−
β
)
⋅
x
¨
[
n
−
1
]
β
=
Δ
t
τ
+
Δ
t
,
\ddot x[n] = \beta \cdot\ddot x_{des}[n] + (1-\beta) \cdot\ddot x[n-1]\\ \beta = \frac{\Delta_t}{\tau + \Delta_t},
x¨[n]=β⋅x¨des[n]+(1−β)⋅x¨[n−1]β=τ+ΔtΔt,
也就是说当前时刻的加速度是基于期望加速度(控制器给到的)和前一时刻加速度计算得到的。其中,默认状况下
τ
=
0.5
s
\tau = 0.5s
τ=0.5s,而
Δ
t
\Delta_t
Δt是Sumo更新的步长,默认为1s。
下面对几个跟随模型的控制方案进行介绍:
定速巡航控制CC
x ¨ d e s = − k p ( x ˙ − x ˙ d e s ) + η \ddot x_{des} = -k_p(\dot x - \dot x_{des}) + \eta x¨des=−kp(x˙−x˙des)+η
k p k_p kp表示比例控制器的增益(默认为1); η \eta η是考虑到制动器和速度测量的随机扰动(不精确,默认为0)。
自适应巡航控制ACC
x ¨ i _ d e s = − 1 T ( ε ˙ i + λ δ i ) δ i = x i − x i − 1 + l i − 1 + T x ˙ i ε ˙ i = x ˙ i − x ˙ i − 1 \ddot x_{i\_des} = -\frac{1}{T}(\dot \varepsilon_i + \lambda\delta_i)\\ \delta_i = x_i - x_{i-1}+ l_{i-1} + T\dot x_i\\ \dot \varepsilon_i = \dot x_i - \dot x_{i-1} x¨i_des=−T1(ε˙i+λδi)δi=xi−xi−1+li−1+Tx˙iε˙i=x˙i−x˙i−1
下标 i , i − 1 i,i-1 i,i−1分别表示被控车辆和前方车辆; T T T表示车头时距(s); ε ˙ i \dot \varepsilon_i ε˙i表示两车间的相对速度; l i − 1 l_{i-1} li−1表示前车长度, δ i \delta _i δi表示距离上的误差,即实际距离 ( x i − x i − 1 + l i − 1 ) (x_i - x_{i-1}+ l_{i-1}) (xi−xi−1+li−1)与期望距离 ( T x ˙ i ) (T\dot x_i) (Tx˙i)的差。期望距离 ( T x ˙ i ) (T\dot x_i) (Tx˙i)随速度成比例增长,出于安全和稳定的考虑,车头时距 T > 2 ⋅ τ T>2\cdot \tau T>2⋅τ。 λ \lambda λ是一个严格大于0的设计参数,默认为0.1。
当处于ACC模式时,CC与ACC两控制器之间的相互作用可以被表示为 x ¨ d e s = min ( x ¨ C C , x ¨ A C C ) \ddot x_{des} = \min(\ddot x_{CC},\ddot x_{ACC}) x¨des=min(x¨CC,x¨ACC)。基本上,如果CC强制加速以达到所需的速度,但ACC因前方有车辆而强制减速,则汽车将遵循ACC的指示。相反,如果ACC强制加速跟随前面的汽车,但汽车已经达到所需的速度,CC将使汽车与前面的汽车“分离”。此外,如果前面没有车辆或距离高于250米,那么该模型只考虑CC,假设雷达没有检测到前面没有汽车。
协同自适应巡航控制CACC
前面介绍的两种控制器能够补充sumo中仅有人类行为模型的空缺,也可以去控制编队中的领航车辆。但这两种控制器并不适用于要求较小车间距离和队列稳定的编队中的跟随车辆。
当编队的控制器能够衰减从领航车辆到末尾车辆的运动扰动传播时,该控制器是队列稳定的,即协同自适应巡航控制(CACC)。它能够在车辆之间通过车间通信共享数据。
Plexe中包括两类CACC,是引入新CACC或与其它先进方法进行比较的理想环境。
-
基于经典控制理论的CACC[24]
使用来自领航车辆和前车的数据来保持固定的与速度无关的车辆间距。对于编队种第 i i i辆车的控制律可以表示为:
x ¨ i _ d e s = α 1 x ¨ i − 1 + α 2 x ¨ 0 + α 3 ε ˙ i + α 4 ( x ˙ i − x ˙ 0 ) α 5 ε i ε i = x i − x i − 1 + l i − 1 + g a p d e s ε ˙ i = x ˙ i − x ˙ i − 1 \ddot x_{i\_des} = \alpha_1 \ddot x_{i-1}+ \alpha_2 \ddot x_0 + \alpha_3 \dot \varepsilon_i + \alpha_4 (\dot x_i - \dot x_0) \alpha_5\varepsilon_i\\ \varepsilon_i = x_i -x_{i-1} + l_{i -1 }+\rm{gap}_{des}\\ \dot \varepsilon_i = \dot x_i-\dot x_{i-1} x¨i_des=α1x¨i−1+α2x¨0+α3ε˙i+α4(x˙i−x˙0)α5εiεi=xi−xi−1+li−1+gapdesε˙i=x˙i−x˙i−1
下标 0 0 0表示领航车辆的相关属性, i − 1 i-1 i−1表示前车的相关属性, ε i \varepsilon_i εi是基于恒定期望间隙 g a p d e s \rm{gap}_{des} gapdes的距离误差(默认为5米)。各项参数 α \alpha α间的关系可以表示为
α 1 = 1 − C 1 ; α 2 = C 1 ; α 3 = − ( 2 ξ − C 1 ( ξ + ξ 2 − 1 ) ) ω n α 4 = − C 1 ( ξ + ξ 2 − 1 ) ω n α 5 = − ω n 2 \alpha_1 = 1 - C_1;\\ \alpha_2 = C_1;\\ \alpha_3 = -(2\xi - C_1(\xi + \sqrt{\xi^2 - 1})) \omega_n\\ \alpha_4 = -C_1(\xi + \sqrt{\xi^2-1})\omega_n\\ \alpha_5 = -\omega_n^2 α1=1−C1;α2=C1;α3=−(2ξ−C1(ξ+ξ2−1))ωnα4=−C1(ξ+ξ2−1)ωnα5=−ωn2
C 1 C_1 C1表示领航车辆与前一车辆加速度间的权重因子, ξ \xi ξ表示阻尼比, ω n \omega_n ωn表示控制器的带宽;三者的默认值来自于文献[25].当处于该种CACC模式时,CC与CACC两控制器之间的相互作用取决于距离。当与前车距离超过20m时, x ¨ d e s = min ( x ¨ C C , x ¨ C A C C ) \ddot x_{des} = \min(\ddot x_{CC},\ddot x_{CACC}) x¨des=min(x¨CC,x¨CACC);否则 x ¨ d e s = x ¨ C A C C \ddot x_{des} = \ddot x_{CACC} x¨des=x¨CACC。
-
基于共识理论的CACC
目前尚未找到资料。
协同编队策略
协同编队的重点不仅仅是自动跟车和车队稳定,还应包括车队创建、位置更正和车队取消等其它任务。这需要车队能够处理其他干扰车辆,比如超车等。这些任务需要通过一定的协同编队策略实现。
论文中通过一个“一车辆接近车队并试图加入车队尾部”的例子来具体阐述了加入编队这一任务的编队策略,其中领航车辆和加入车辆的状态机如下图所示。
状态机: 我将状态机理解为车辆所处状态的流程图。
- 领航车辆的初始状态为
Leading
,加入车辆的初始状态为IDLE
; - 加入车辆向领航车辆发送加入请求并等待回复,进入
Wait Reply
状态; - 领航车辆向加入车辆发送同意信息,等待加入车辆驶入加入位置,进入
Wait Position
状态; - 加入车辆收到回复后,往加入位置移动,进入
Move to Position
状态; - 加入车辆进入加入位置,向领航车辆发送能够加入的信息,等待领航车辆确认,进入
Wait Join
状态; - 领航车辆向加入车辆发送确认信息,进入
Wait Join
状态; - 加入车辆切换至CACC模式 ,将车间间隙维持在允许范围内,进入
Follow
状态; - 领航车辆确认加入车辆已经加入后,进入
Leading
状态。
需要注意的是,在该策略下其它编队车辆均未参与,仅在交互中被告知有一车辆加入。
Use Case
该文献的实验验证阶段,通过两个例子来验证模拟的有效性。
Case 1:自定义CACC控制器模型
自定义CACC控制器的控制律可以被表示为:
x
¨
i
_
d
e
s
=
k
d
(
x
i
−
1
−
x
i
−
−
l
i
−
1
−
25
m
)
+
k
s
(
x
˙
i
−
1
−
x
˙
i
)
\ddot x_{i\_des}=k_d(x_{i-1}-x_i--l_{i-1}-25m)+k_s(\dot x_{i-1}-\dot x_i)
x¨i_des=kd(xi−1−xi−−li−1−25m)+ks(x˙i−1−x˙i)
其目标为保持前后车相同的车速和25m的车间间距。
实验通过模拟八辆车的协同编队,使领航车辆的车速以正弦波形式发生改变,从而对不同参数和控制器模型条件下的性能进行测试。
测试结果通过将同一时刻下不同车辆的车速进行对比来进行展示。
Case 2:加入编队任务实现
实验通过加入车辆加入4辆车所构成车队尾部的距离、车速和加速度对不同参数下CACC模型性能的优越性进行验证。
Conclusion
Plexe能够有效地对车辆协同编队驾驶进行模拟,并能够对不同参数和不同任务条件下的控制器模型性能进行验证。
讨论
最近一直卡在了复杂背景交通流条件下的加入编队仿真实现。目前看来,一旦引入背景交通流,各类编队任务的实现难度显然是上升了一个大台阶。我还是试图从Plexe包和Traci包上找到解决办法,也想向相关大佬请教一下Plexe-SUMO在复杂背景交通流条件下进行编队实现的可能性到底如何。
另外,想向使用过完整Plexe完整版的大佬请教一下Plexe的PythonAPI和完整的Plexe-Veins-OMNeT++对于仿真是否存在显著影响?
如果有SUMO的相关大佬看到这篇文章,希望赐教!谢谢!
如有错误,敬请各位指正!
REF:
[1] Plexe: A platooning extension for Veins | IEEE Conference Publication | IEEE Xplore
[2] Platooning in SUMO: An Open Source Implementation