Apollo横向和纵向控制器都属于high level controller, 我们在设计控制器的过程中一直都是假设车辆的执行器是可以完美的执行我们控制算法算出来的控制命令, 然后现实是车辆执行器的延迟是非常验证的, 建议一下大家可以可以记录一下log对比一下时间戳, 然后你就可以发现车辆的执行器跟踪的有多差劲. 我在实际测试的过程中就发现了发现方向盘的超调和震荡就非常严重, 延迟也很严重. 下面一篇文章解释了超调, 我觉得解释的而非常好
PID控制中的超调
理论基础
首先根据上篇博客好好回顾一下理论, 对于方向盘,我们可以使用一阶系统或者二阶系统进行建模, 当我们使用二阶系统进行建模的时候, 我们的状态量包括两个, 一个是实际方向盘转角 δ \delta δ一个是实际方向盘转角的变化率 δ ˙ \dot{\delta} δ˙
我们假设二阶方向盘转角参考系统的微分方程为
δ ¨ m + 2 ζ m ω m δ ˙ m + ω m 2 δ m = ω m 2 r ( 1 ) \ddot{\delta}_{m} + 2\zeta_{m}\omega_{m}\dot{\delta}_{m} + \omega_{m}^{2}\delta_{m} = \omega_{m}^{2}r~~~~~~~(1) δ¨m+2ζmωmδ˙m+ωm2δm=ωm2r (1)
二阶方向盘实际系统的微分方程为
δ ¨ p + 2 ζ p ω p δ ˙ p + ω p 2 δ p = ω p 2 u ( 2 ) \ddot{\delta}_{p} + 2\zeta_{p}\omega_{p}\dot{\delta}_{p} + \omega_{p}^{2}\delta_{p} = \omega_{p}^{2}u~~~~~~~(2) δ¨p+2ζpωpδ˙p+ωp2δp=ωp2u (2)
我们现将其转换成状态空间模型, 状态量包括转角和转角变化率, 我们定义参考系统的状态量 x m = [ δ m δ ˙ m ] x_{m} = \begin{bmatrix} \delta_{m} \\ \dot{\delta}_{m} \end{bmatrix} xm=[δmδ˙m]和真是系统的状态量 x p = [ δ p δ ˙ p ] x_{p} = \begin{bmatrix} \delta_{p} \\ \dot{\delta}_{p} \end{bmatrix} xp=[δpδ˙p], b p = [ 0 ω p 2 ] b_p = \begin{bmatrix} 0 \\ \omega_{p}^{2}\end{bmatrix} bp=[0ωp2]我们可以分别得到模型和实际系统的状态方程
参考系统 M M M:
x ˙ m = A m x m + b m r ( 3 ) \dot{x}_{m} = A_{m}x_{m} + b_{m}r~~~~~~~(3) x˙m=Amxm+bmr (3)
令 A m = [ 0 1 − ω m 2 − 2 ζ m ω m ] A_{m} = \begin{bmatrix} 0 & 1\\ -\omega_{m}^{2} &-2\zeta_{m} \omega_{m} \end{bmatrix} Am=[0−ωm21−2ζmωm], b m = [ 0 ω m 2 ] b_m = \begin{bmatrix} 0 \\ \omega_{m}^{2}\end{bmatrix} bm=[0ωm2]
真是系统 P P P的状态空间表达式为
x ˙ p = A p x p + b p u ( 4 ) \dot{x}_{p} = A_{p}x_{p}+b_{p}u~~~~~~~(4) x˙p=Apxp+bpu (4)
其中 x p = [ y p y ˙ p ] x_{p} = \begin{bmatrix} y_{p} \\ \dot{y}_{p}\end{bmatrix} xp=[ypy˙p], A p = [ 0 1 − ω p 2 2 ζ p x p ] A_{p} = \begin{bmatrix} 0& 1 \\ -\omega_{p}^{2} & 2\zeta_{p}x_{p}\end{bmatrix} Ap=[0−ωp212ζpxp], b p = [ 0 1 ] b_{p} = \begin{bmatrix} 0 \\ 1\end{bmatrix} bp=[01]
假设控制器的形式为 u = θ x T x p + θ r T r u=\theta^{T}_{x}x_{p} + \theta^{T}_r r u=θxTxp+θrTr,