Apollo油门刹车标定方案-机器学习
Introduction
我们考虑整个纵向控制算法作为一个端到端的问题,可以分两步解决:
- 基于人类驾驶数据,首先生成标定表。
- 然后用更复杂的在线算法更新标定表,使其更符合车辆动力学。
我们的研究结果表明自动校准系统确实节省了相当多的费用并提高了控制精度。标定是也是自动化和智能化的,因此适用于大规模自动驾驶汽车部署。
Method
apollo控制模块
阿波罗控制模块设计为了跟踪阿波罗规划模块生成的轨迹,并使跟踪误差最小化。它需要轨迹,车辆位置和车辆状态作为输入,以操纵车辆。
纵向控制算法使用公式(1)计算油门刹车值,其中速度(v)和加速度(accA)时纵向控制得到的已知的变量。
T : a c c , v → c m d (1) T:acc,v \rightarrow cmd \tag{1} T:acc,v→cmd(1)
其中 T T T表示标定表, c m d cmd cmd表示油门刹车控制命令。
-
离线模型:离线模型根据人工驾驶数据生成一个初始标定表。这个离线算法的工作流程包括:
- 采集人的驾驶数据
- 预处理数据并选择输入特征
- 通过机器学习模型生成校准表
-
在线学习:在线算法基于自动驾驶中的实时反馈数据调整标定表。目的是让离线模型更加match车辆动力学模型。在线算法的工作流程包括:
- 实时收集车辆状态和反馈
- 预处理和过滤数据
- 调整校准表
数据预处理
1. 用于训练离线模型的数据预处理
人类驾驶数据作为输入,纵向速度、加速度和油门、刹车作为特征。注意,油门模型和刹车模型分开训练。
由于人类驾驶数据天生具有噪声和不均匀性(即速度/加速度不均匀地分布在驾驶过程中),阿波罗控制模块会采取以下步骤以清洗数据。i. 采用公式(2)中的均值滤波器平滑数据;ii. 公式(3)用来消除数据横向摆动;iii. 公式(4)用来消除异常值。
y = ( x t − 1 + x t − 2 + ⋯ + x t − N ) N (2) y=\frac{\left(x_{t-1}+x_{t-2}+\cdots+x_{t-N}\right)}{N} \tag{2} y=N(xt−1+xt−2+⋯+xt−N)(2)
表示前N个时刻数据的平均值。
∣ θ ∣ < δ steer (3) |\theta|<\delta_{\text {steer }} \tag{3} ∣θ∣<δsteer (3)
其中 θ \theta θ表示方向盘转角, δ s t e e r \delta_{steer} δsteer表示方向盘转角阈值。
∣ x − x mean ∣ x s t d > 1 → 异常值 (4) \frac{\left|x-x_{\text {mean }}\right|}{x_{s t d}}>1 \rightarrow \text { 异常值 } \tag{4} xstd∣x−xmean ∣>1→ 异常值 (4)
其中 x x x是待处理数据, x m e a n x_{mean} xmean是数据平均值, x s t d x_{std} xstd表示数据标准差。
2. 用于在线学习的数据预处理
在线学习会基于自动驾驶模式下的数据反馈,频繁的调节标定表。这个算法的特征选取为:i. 油门刹车命令;ii. 速度;iii. 期望加速度;iiii. 实际加速度。
仅选择符合公式(3)的数据。使用公式(5)来保证标定表对于控制量 c m d cmd cmd单调。
T ′ [ c m d i ] [ v x ] − T ′ [ c m d j ] [ v x ] c m d i − c m d j < 0 , ∀ c m d i , c m d j , v x (5) \frac{T^{\prime}\left[c m d_{i}\right]\left[v_{x}\right]-T^{\prime}\left[c m d_{j}\right]\left[v_{x}\right]}{c m d_{i}-c m d_{j}}<0, \forall c m d_{i}, c m d_{j}, v_{x} \tag{5} cmdi−cmdjT′[cmdi][vx]−T′[cmdj][vx]<0,∀cmdi,cmdj,vx(5)
其中 T ′ T^{\prime} T′表示标定表的索引。
由于实时数据采集中的响应延迟(即发送油门刹车命令,到命令被执行后得到加速度)会影响数据质量,我们延时一段时间从传感器采集数据。在油门/刹车指令发出200ms后,我们从IMU中采集加速度。采用截止频率为2Hz的3阶巴特沃夫低通滤波器来消除数据的高频扰动。由于200ms的延迟并不总是合适,采用公式(6)进一步保证数据的一致性。
∣ c m d r e f − c m d r e f + Δ t ∣ < δ c m d _ g a p , Δ t = − 100 m s , ⋯ , 100 m s (6) \left|c m d_{r e f}-c m d_{r e f+\Delta_{t}}\right|<\delta_{ {cmd\_gap }}, \Delta_{t}=-100 \mathrm{~ms}, \cdots, 100 \mathrm{~ms} \tag{6} ∣cmdref−cmdref+Δt∣<δcmd_gap,Δt=−100 ms,⋯,100 ms(6)
其中 δ c m d _ g a p \delta_{ {cmd\_gap }} δcmd_gap表示允许的最大控制量波动。仅当控制命令 c m d r e f c m d_{r e f} cmdref的周围 [ c m d r e f − 100 m s , c m d r e f + 100 m s ] \left[\mathrm{cmd}_{r e f-100 \mathrm{~ms}}, \mathrm{cmd}_{r e f+100 \mathrm{~ms}}\right] [cmdref−100 ms,cmdref+100 ms]都满足公式(6)时,该数据才能被使用。公式(7)用来消除传感器数据 ( v k , a k ) \left(v_k,a_k\right) (vk,ak)的噪声。
( v r e f − v k ) × ( a r e f − a k ) > 0 (7) \left(v_{r e f}-v_{k}\right) \times\left(a_{r e f}-a_{k}\right)>0 \tag{7} (vref−vk)×(aref−ak)>0(7)
3. 离线建模算法
伪码1展现了数据处理过程,得到了对应关系后使用神经网络进行训练。采用Tensorflow实现标准三层神经网络,激活函数采用sigmoid,损失函数采用均方误差,使用内置的Adam优化器。
4. 在线学习算法
每个控制周期在线学习算法都会更新标定表,一旦调整后在下个控制周期生效,伪码2给出了更新细节。
1-5行采集数据,如果速度已经收敛(如公式(8)),6-7行停止标定程序。
e v = ∣ v ref − v actual ∣ ⩽ γ v (8) e_{v}=\left|v_{\text {ref }}-v_{\text {actual }}\right| \leqslant \gamma_{v} \tag{8} ev=∣vref −vactual ∣⩽γv(8)
其中 v r e f v_{ref} vref表示期望速度, v a c t u a l v_{actual} vactual表示当前实际速度, γ v \gamma_v γv表示阈值。
8-11行中的 Δ k \Delta_k Δk由 g a i n k gain_k gaink得到, Δ k \Delta_k Δk等于期望加速度 a c c r e f acc_{ref} accref减延迟后的实际加速度 a c c k acc_k acck。
g a i n k = a c c r e f − a c c k (9) gain_k=acc_{ref}-acc_k \tag{9} gaink=accref−acck(9)
为了更新标定表,定义了损失函数(公式(10)),该损失函数用来更新对应的标定表 T [ c m d i ] [ v j ] T\left[\mathrm{cmd}_{i}\right]\left[v_{j}\right] T[cmdi][vj]。
cost c m d i , v j = distance c m d i , v j × cost similarity (10) \operatorname{cost}_{\mathrm{cmd}_{i}, v_{j}}=\text { distance }_{c m d_{i}, v_{j}} \times \operatorname{cost}_{\text {similarity }} \tag{10} costcmdi,vj= distance cmdi,vj×costsimilarity (10)
其中 distance c m d i , v j \text { distance }_{c m d_{i}, v_{j}} distance cmdi,vj,是一个二维的距离函数,具有距离衰减特性(距离越近值越小,距离越远值越大)。
d i s t a n c e c m d i , v j = ( 1 − μ ) × [ α ( c m d r e f − c m d i ) m c m d + β ( v r e f − v j ) m v ) + ξ ] (11) distance _{c m d_{i}, v_{j}}= \left.(1-\mu) \times\left[\alpha\left(c m d_{r e f}-c m d_{i}\right)^{m_{c m d}}+\beta\left(v_{r e f}-v_{j}\right)^{m_{v}}\right)+\xi\right] \tag{11} distancecmdi,vj=(1−μ)×[α(cmdref−cmdi)mcmd+β(vref−vj)mv)+ξ](11)
其中 α \alpha α和 β \beta β是衰减系数, m c m d m_{cmd} mcmd和 m v m_v mv是距离衰减因子, ξ \xi ξ设置为 1 e − 8 1e^{-8} 1e−8, μ \mu μ表示为
μ = { 1 , if ∣ c m d ref − c m d i ∣ ⩽ δ cmd or ∣ v r e f − v j ∣ ⩽ δ v 0 , otherwise (12) \mu=\left\{\begin{array}{ll} 1, & \text { if }\left|c m d_{\text {ref }}-c m d_{i}\right| \leqslant \delta_{\text {cmd }} \text { or }\left|v_{r e f}-v_{j}\right| \leqslant \delta_{v} \\ 0, & \text { otherwise } \end{array}\right. \tag{12} μ={1,0, if ∣cmdref −cmdi∣⩽δcmd or ∣vref−vj∣⩽δv otherwise (12)
相似性损失定义为公式(13),实际数据与初始表越相似,损失越大。
cost similarity = ε × e − ı × ∣ init _ table [ c m d i ] [ v j ] − a c c k ∣ (13) \operatorname{cost}_{\text {similarity }}=\varepsilon \times e^{-\imath \times \mid \text { init } \_ \text {table }\left[\mathrm{cmd}_{i}\right]\left[v_{j}\right]-a c c_{k} \mid} \tag{13} costsimilarity =ε×e−×∣ init _table [cmdi][vj]−acck∣(13)
其中 ε \varepsilon ε表示相似性衰减系数 ı \imath 表示指数衰减因子,最终的更新量 Δ t \Delta_t Δt 由公式(14)表示
Δ t = gain k × σ 1 + cost c m d i , v j (14) \Delta_{t}=\frac{\operatorname{gain}_{k} \times \sigma}{1+\operatorname{cost}_{c m d_{i}, v_{j}}} \tag{14} Δt=1+costcmdi,vjgaink×σ(14)
其中 σ \sigma σ表示学习率。
最终,原始表 T T T更新为 T ′ T^{\prime} T′
T ′ [ c m d i ] [ v j ] = a t + Δ t (15) T^{\prime}\left[c m d_{i}\right]\left[v_{j}\right]=a_{t}+\Delta_{t} \tag{15} T′[cmdi][vj]=at+Δt(15)
约束条件:
T ′ [ c m d i ] [ v x ] − T ′ [ c m d j ] [ v x ] c m d i − c m d j < 0 , j , x = 1 , ⋯ , n ∣ c m d r e f − c m d m ∣ < δ c m d − g a p , m = k − t , ⋯ , k + t ( v r e f − v k ) × ( a r e f − a k ) > 0 \begin{array}{l} \frac{T^{\prime}\left[c m d_{i}\right]\left[v_{x}\right]-T^{\prime}\left[c m d_{j}\right]\left[v_{x}\right]}{c m d_{i}-c m d_{j}}<0, j, x=1, \cdots, n \\ \left|c m d_{r e f}-c m d_{m}\right|<\delta_{c m d_{-g a p}}, m=k-t, \cdots, k+t \\ \left(v_{r e f}-v_{k}\right) \times\left(a_{r e f}-a_{k}\right)>0 \end{array} cmdi−cmdjT′[cmdi][vx]−T′[cmdj][vx]<0,j,x=1,⋯,n∣cmdref−cmdm∣<δcmd−gap,m=k−t,⋯,k+t(vref−vk)×(aref−ak)>0
最终更新效果就是对于每一个标定表 T [ c m d i ] [ v j ] T\left[c m d_{i}\right]\left[v_{j}\right] T[cmdi][vj],实际加速度与标定表的值差距越大更新量越大, ( c m d i , v j ) \left(c m d_{i},v_{j}\right) (cmdi,vj)距离 ( c m d r e f , v r e f ) \left(c m d_{ref},v_{ref}\right) (cmdref,vref)越近更新量越大。
References
[1] Zhu F, Xu X, Ma L, et al. Autonomous driving vehicle control auto-calibration system: An industry-level, data-driven and learning-based vehicle longitudinal dynamic calibrating algorithm[C]//2020 IEEE Intelligent Vehicles Symposium (IV). IEEE, 2020: 391-397.