【自动驾驶】动力学横向控制误差模型

参考资料

1. 基本概述

车辆横向控制主要通过控制轮胎转角实现,而对于驾驶员来说,可直接操控的是方向盘角度,因此在搭建车辆动力学模型时,可以建立以相对于道路的方向和距离误差为状态变量的动力学模型。

在这里插入图片描述

假设——

  • e y e_y ey​:车辆重心距车道中心线的距离;
  • e ψ e_{\psi} eψ​:偏航角误差;
  • V x V_x Vx:车辆纵向速度;
  • R R R:车辆转弯半径,其中转弯半径 R R R足够大,以满足上述章节的小角度近似假设。

定义——

  • 车身转过期望角度所需要的偏航角速度
    ψ ˙ d e s = V x R (1) \tag{1} \dot\psi_{des}=\frac{V_x}{R} ψ˙des=RVx(1)

  • 所需的横向加速度(即期望的向心加速度)为
    a d e s = V x 2 R = V x ψ ˙ d e s (2) \tag{2} a_{des}=\frac{V_x^2}{R}=V_x\dot\psi_{des} ades=RVx2=Vxψ˙des(2)

  • 车辆偏航角误差

e ψ = ψ − ψ d e s (3) \tag{3} e_{\psi}=\psi-\psi_{d e s} eψ=ψψdes(3)

  • 车辆偏航角速度误差
    e ˙ ψ = ψ ˙ − ψ ˙ des  (4) \tag{4} \dot{e}_{\psi}=\dot{\psi}-\dot{\psi}_{\text {des }} e˙ψ=ψ˙ψ˙des (4)

  • 车辆偏航角加速度误差
    e ¨ ψ = ψ ¨ − ψ ¨ des  (5) \tag{5} \ddot{e}_{\psi}=\ddot{\psi}-\ddot{\psi}_{\text {des }} e¨ψ=ψ¨ψ¨des (5)

  • 车辆 横向加速度误差
    e ¨ y = a y − a d e s = ( y ¨ + V x ψ ˙ ) − V x ψ ˙ des  = y ¨ + V x ( ψ ˙ − ψ ˙ d e s ) (6) \tag{6} \begin{aligned} \ddot{e}_{y} &=a_{y}-a_{d e s} \\ &=\left(\ddot{y}+V_{x} \dot{\psi}\right)-V_{x} \dot{\psi}_{\text {des }} \\ &=\ddot{y}+V_{x}\left(\dot{\psi}-\dot{\psi}_{d e s}\right) \end{aligned} e¨y=ayades=(y¨+Vxψ˙)Vxψ˙des =y¨+Vx(ψ˙ψ˙des)(6)
    其中, a y a_y ay由两 种力共同作用产生 : 车辆延 y y y 轴产生的惯性加速度 y ¨ \ddot{y} y¨ 和车辆绕旋转中心 O O O 旋转产生的向心加速度 a c = V x 2 R = V x ψ ˙ ∘ a_{c}=\frac{{V_x}^2}{R}=V_{x} \dot{\psi}_{\circ} ac=RVx2=Vxψ˙

  • 车辆 横向速度误差

    当车辆纵向速度 V x V_x Vx恒定时, y y y 轴方向的速度误差可以表示为
    e ˙ y = ∫ e ¨ y   d t = y ˙ + V x ( ψ − ψ d e s ) (7) \tag{7} \dot{e}_{y}=\int \ddot{e}_{y} \mathrm{~d} t=\dot{y}+V_{x}\left(\psi-\psi_{d e s}\right) e˙y=e¨y dt=y˙+Vx(ψψdes)(7)
    当纵向速度 V x V_x Vx随着时间变化时,对等式(6)积分得
    e ˙ y = ∫ e ¨ y   d t = ∫ y ¨ + V x ( ψ ˙ − ψ ˙ des  ) d t = y ˙ + ∫ V x ( ψ ˙ − ψ ˙ des  ) d t (8) \tag{8} \dot{e}_{y}=\int \ddot{e}_{y} \mathrm{~d} t=\int \ddot{y}+V_{x}\left(\dot{\psi}-\dot\psi_{\text {des }}\right) \mathrm{d} t=\dot{y}+\int V_{x}\left(\dot\psi-\dot\psi_{\text {des }}\right) \mathrm{d} t e˙y=e¨y dt=y¨+Vx(ψ˙ψ˙des )dt=y˙+Vx(ψ˙ψ˙des )dt(8)

    参考资料中的等式(8)为
    e ˙ y = ∫ e ¨ y   d t = y ˙ + ∫ V x ( ψ − ψ des  ) d t \dot{e}_{y}=\int \ddot{e}_{y} \mathrm{~d} t=\dot{y}+\int V_{x}\left(\psi-\psi_{\text {des }}\right) \mathrm{d} t e˙y=e¨y dt=y˙+Vx(ψψdes )dt
    根据一步一步推导看的话书中的这个等式应该是有问题的,这里先贴在这,有懂的朋友也可以帮忙解惑一下~~

    这就使得模型非线性且时变,不利于控制系统的设计。因此这里假设纵向速度 V x V_x Vx恒定, 即当作一个线性时不变(LTI)模型。如果速度变化,就需要使用线性参变模型(LPV) 替代, 其纵向速度是一个随着时间变化的参数。

2. 误差动力学模型

将等式(6)(7)变换如下:

y ¨ = e ¨ y + V x ψ ˙ d e s − V x ψ ˙ y ˙ = e ˙ y − V x e ψ (9) \tag{9} \begin{aligned} &\ddot{y}=\ddot{e}_{y}+V_{x} \dot{\psi}_{d e s}-V_{x} \dot{\psi}\\ &\dot{y}=\dot{e}_{y}-V_{x} e_{\psi} \end{aligned} y¨=e¨y+Vxψ˙desVxψ˙y˙=e˙yVxeψ(9)
根据车辆动力学模型中的等式(14)
y ¨ = − 2 C α f + 2 C α r m V x y ˙ − ( V x + 2 C α f l f − 2 C α r l r m V x ) ψ ˙ + 2 C α f m δ (10) \tag{10} \ddot{y}=-\frac{2 C_{\alpha f}+2 C_{\alpha r}}{m V_{x}} \dot{y}-\left(V_{x}+\frac{2 C_{\alpha f} l_{f}-2 C_{\alpha r} l_{r}}{m V_{x}}\right) \dot{\psi}+\frac{2 C_{\alpha f}}{m} \delta y¨=mVx2Cαf+2Cαry˙(Vx+mVx2Cαflf2Cαrlr)ψ˙+m2Cαfδ(10)

将等式(4)(9)代入等式(10)得

e ¨ y + V x ψ ˙ d e s − V x ( e ˙ ψ + ψ ˙ des  ) = − 2 C α f + 2 C α r m V x ( e ˙ y − V x e ψ ) − ( V x + 2 C α f l f − 2 C α r l r m V x ) ( e ˙ ψ + ψ ˙ des  ) + 2 C α f m δ (11) \tag{11} \begin{aligned} \ddot{e}_{y}+V_{x} \dot{\psi}_{d e s}-V_{x} \left(\dot{e}_{\psi}+\dot{\psi}_{\text {des }}\right)&=-\frac{2 C_{\alpha f}+2 C_{\alpha r}}{m V_{x}} \left(\dot{e}_{y}-V_{x} e_{\psi}\right)-\\ &\left(V_{x}+\frac{2 C_{\alpha f} l_{f}-2 C_{\alpha r} l_{r}}{m V_{x}}\right) \left(\dot{e}_{\psi}+\dot{\psi}_{\text {des }}\right)+\frac{2 C_{\alpha f}}{m} \delta \end{aligned} e¨y+Vxψ˙desVx(e˙ψ+ψ˙des )=mVx2Cαf+2Cαr(e˙yVxeψ)(Vx+mVx2Cαflf2Cαrlr)(e˙ψ+ψ˙des )+m2Cαfδ(11)
对等式(11)提取 e ¨ y \ddot{e}_y e¨y​、 e ˙ y \dot{e}_y e˙y​、 e y e_y ey​、 e ψ e_{\psi} eψ e ˙ ψ \dot e_{\psi} e˙ψ ψ ˙ d e s \dot{\psi}_{des} ψ˙des​和 δ \delta δ项得

e ¨ y = − 2 C α f − 2 C α r m V x e ˙ y + 2 C α f + 2 C α r m e ψ + − 2 C α f l f + 2 C α r l r m V x e ˙ ψ + ( − 2 C α f l f + 2 C α r l r m V x − V x ) ψ ˙ des  + 2 C α f m δ (12) \tag{12} \begin{gathered} \ddot{e}_{y}=\frac{-2 C_{\alpha f}-2 C_{\alpha r}}{m V_{x}} \dot{e}_{y}+\frac{2 C_{\alpha f}+2 C_{\alpha r}}{m} e_{\psi}+\frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}} \dot{e}_{\psi} \\ +\left(\frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}}-V_{x}\right) \dot{\psi}_{\text {des }}+\frac{2 C_{\alpha f}}{m} \delta \end{gathered} e¨y=mVx2Cαf2Cαre˙y+m2Cαf+2Cαreψ+mVx2Cαflf+2Cαrlre˙ψ+(mVx2Cαflf+2CαrlrVx)ψ˙des +m2Cαfδ(12)
整理成矩阵形式为

d d t e ˙ y = [ 0 − 2 C α f + 2 C α r r m V x 2 C α f + 2 C α r m − 2 C α f l f + 2 C α r l r m V x ] [ e y e ˙ y e ψ e ˙ ψ ] + ( − 2 C α f l f + 2 C α r l r m V x − V x ) ψ ˙ d e s + 2 C α f m δ (13) \tag{13} \frac{\mathrm{d}}{\mathrm{d} t} \dot{e}_{y}=\left[\begin{array}{llll}0 & -\frac{2 C_{\alpha f}+2 C_{\alpha r} r}{m V_{x}} & \frac{2 C_{\alpha f}+2 C_{\alpha r}}{m} & \frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}}\end{array}\right]\left[\begin{array}{c}e_{y} \\ \dot{e}_{y} \\ e_{\psi} \\ \dot{e}_{\psi}\end{array}\right]+\\ \left(\frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}}-V_{x}\right) \dot{\psi}_{d e s}+\frac{2 C_{\alpha f}}{m} \delta dtde˙y=[0mVx2Cαf+2Cαrrm2Cαf+2CαrmVx2Cαflf+2Cαrlr] eye˙yeψe˙ψ +(mVx2Cαflf+2CαrlrVx)ψ˙des+m2Cαfδ(13)

同理可得,根据车辆动力学模型中的等式(17)
ψ ¨ = − 2 l f C α f − 2 l r C α r I z v x y ˙ − 2 l f 2 C α f + 2 l r 2 C α r I z v x ψ ˙ + 2 l f C α f I z δ (14) \tag{14} \ddot{\psi}=-\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z} v_{x}} \dot{y}-\frac{2 l_{f}{ }^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} v_{x}} \dot{\psi}+\frac{2 l_{f} C_{\alpha f}}{I_{z}} \delta ψ¨=Izvx2lfCαf2lrCαry˙Izvx2lf2Cαf+2lr2Cαrψ˙+Iz2lfCαfδ(14)

将等式(4)(5)(9)代入等式(14),得
e ¨ ψ + ψ ¨ des  = − 2 l f C α f − 2 l r C α r I z V x ( e ˙ y − V x e ψ ) − 2 l f 2 C α f + 2 l r 2 C α r I z V x ( e ˙ ψ + ψ ˙ des  ) + 2 l f C α f I z δ (15) \tag{15} \begin{aligned} \ddot{e}_{\psi}+\ddot{\psi}_{\text {des }}=-\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z} V_{x}}\left(\dot{e}_{y}-V_{x} e_{\psi}\right) -\frac{2 l_{f}{ }^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \left(\dot{e}_{\psi}+\dot{\psi}_{\text {des }}\right)+\frac{2 l_{f} C_{\alpha f}}{I_{z}} \delta \end{aligned} e¨ψ+ψ¨des =IzVx2lfCαf2lrCαr(e˙yVxeψ)IzVx2lf2Cαf+2lr2Cαr(e˙ψ+ψ˙des )+Iz2lfCαfδ(15)

对等式(15)提取 e ˙ y \dot{e}_y e˙y​、 e y e_y ey​、 e ψ e_{\psi} eψ e ¨ ψ \ddot{e}_{\psi} e¨ψ​、 e ˙ ψ \dot e_{\psi} e˙ψ ψ ˙ d e s \dot{\psi}_{des} ψ˙des​和 δ \delta δ项得
e ¨ ψ = − 2 l f C α f − 2 l r C α r I z V x e ˙ y + 2 l f C α f − 2 l r C α r I z e ψ − 2 l f 2 C α f + 2 l r 2 C α r I z V x e ˙ ψ − 2 l f 2 C α f + 2 l r 2 C α r I z V x ψ ˙ d e s + 2 l f C α f I z δ − ψ ¨ d e s (16) \tag{16} \begin{gathered} \ddot{e}_{\psi}=-\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z} V_{x}} \dot{e}_{y}+\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z}} e_{\psi} \\ -\frac{2 l_{f}{ }^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \dot{e}_{\psi}-\frac{2 l_{f}{ }^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \dot{\psi}_{d e s}+\frac{2 l_{f} C_{\alpha f}}{I_{z}} \delta-\ddot{\psi}_{d e s} \end{gathered} e¨ψ=IzVx2lfCαf2lrCαre˙y+Iz2lfCαf2lrCαreψIzVx2lf2Cαf+2lr2Cαre˙ψIzVx2lf2Cαf+2lr2Cαrψ˙des+Iz2lfCαfδψ¨des(16)
由于上述假设为线性时不变系统 ( L T 1 ) ( V ˙ x = 0 ) (L T 1)\left(\dot{V}_{x}=0\right) (LT1)(V˙x=0) ,故 ψ ¨ d e s = V ˙ x R = 0 \ddot{\psi}_{d e s}=\frac{\dot{V}_{x}}{R}=0 ψ¨des=RV˙x=0 ,将上述等式整理成矩阵形式得
d d t e ˙ ψ = [ 0 − 2 l f C α f − 2 l r C α r I z V x 2 l f C α f − 2 l r C α r I z − 2 l f 2 C α f + 2 l r 2 C α r I z V x ] [ e y e ˙ y e ψ e ˙ ψ ] − 2 l f 2 C α f + 2 l r 2 C α r I z V x ψ ˙ d e s + 2 l f C α f I z δ (17) \tag{17} \begin{aligned} \frac{\mathrm{d}}{\mathrm{d} t} \dot{e}_{\psi}=&\left[\begin{array}{llll} 0 & -\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z} V_{x}} & \frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z}} & -\frac{2 l_{f}{ }^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \end{array}\right]\left[\begin{array}{c} e_{y} \\ \dot{e}_{y} \\ e_{\psi} \\ \dot{e}_{\psi} \end{array}\right] \\ &-\frac{2 l_{f}{ }^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \dot{\psi}_{d e s}+\frac{2 l_{f} C_{\alpha f}}{I_{z}} \delta \end{aligned} dtde˙ψ=[0IzVx2lfCαf2lrCαrIz2lfCαf2lrCαrIzVx2lf2Cαf+2lr2Cαr] eye˙yeψe˙ψ IzVx2lf2Cαf+2lr2Cαrψ˙des+Iz2lfCαfδ(17)
根据等式(13)和(17),基于跟踪误差变量的状态空间模型表示为
d d t [ e y e ˙ y e ψ e ˙ ψ ] = [ 0 1 0 0 0 − 2 C α f + 2 C α r m V x 2 C α f + 2 C α r m − 2 C α f l f + 2 C α r l r m V x 0 0 0 1 0 − 2 l f C α f − 2 l r C α r I z V x 2 l f C α f − 2 l r C α r I z − 2 l f 2 C α f + 2 l r 2 C α r I z V x ] [ e y e ˙ y e ψ e ˙ ψ ] + [ 0 2 C α f m 0 2 l f C α f I z ] δ + [ 0 − 2 C α f l f + 2 C α r l r m V x − V x 0 − 2 l f 2 C α f + 2 l r 2 C α r I z V x ] ψ ˙ d e s (18) \tag{18} \begin{aligned} \frac{\mathrm{d}}{\mathrm{d} t}\left[\begin{array}{l} e_{y} \\ \dot{e}_{y} \\ e_{\psi} \\ \dot{e}_{\psi} \end{array}\right]=& {\left[\begin{array}{cccc} 0 & 1 & 0 & 0 \\ 0 & -\frac{2 C_{\alpha f}+2 C_{\alpha r}}{m V_{x}} & \frac{2 C_{\alpha f}+2 C_{\alpha r}}{m} & \frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}} \\ 0 & 0 & 0 & 1 \\ 0 & -\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z} V_{x}} & \frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z}} & -\frac{2 l_{f}^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \end{array}\right]\left[\begin{array}{l} e_{y} \\ \dot{e}_{y} \\ e_{\psi} \\ \dot{e}_{\psi} \end{array}\right] } \\ &+\left[\begin{array}{c} 0 \\ \frac{2 C_{\alpha f}}{m} \\ 0 \\ \frac{2 l_{f} C_{\alpha f}}{I_{z}} \end{array}\right] \delta+\left[\begin{array}{c} 0\\ \frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}}-V_{x} \\ 0\\ -\frac{2 l_{f}^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \end{array}\right]\dot\psi_{des} \end{aligned} dtd eye˙yeψe˙ψ = 00001mVx2Cαf+2Cαr0IzVx2lfCαf2lrCαr0m2Cαf+2Cαr0Iz2lfCαf2lrCαr0mVx2Cαflf+2Cαrlr1IzVx2lf2Cαf+2lr2Cαr eye˙yeψe˙ψ + 0m2Cαf0Iz2lfCαf δ+ 0mVx2Cαflf+2CαrlrVx0IzVx2lf2Cαf+2lr2Cαr ψ˙des(18)

写成一般形式,状态空间表达式如下:
X ˙ = A X + B 1 δ + B 2 ψ ˙ des  (19) \tag{19} \dot{X}=A X+B_{1} \delta+B_{2} \dot{\psi}_{\text {des }} X˙=AX+B1δ+B2ψ˙des (19)

在使用时,我们一般会忽略 B 2 ψ ˙ des  B_{2} \dot{\psi}_{\text {des }} B2ψ˙des , 然后将状态方程离散化,便于实现。即:
X t = X t − 1 + A X t − 1 Δ t + B 1 δ Δ t = ( I + A Δ t ) X t − 1 + B 1 δ Δ t = A ˉ X t − 1 + B ˉ δ (20) \tag{20} X_t=X_{t-1}+A X_{t-1}\Delta t+B_{1} \delta\Delta t=(I+A\Delta t)X_{t-1}+B_{1} \delta\Delta t = \bar{A}X_{t-1}+\bar{B}\delta Xt=Xt1+AXt1Δt+B1δΔt=(I+AΔt)Xt1+B1δΔt=AˉXt1+Bˉδ(20)
其中
A ˉ = I + A Δ t       ( I 为单位矩阵 ) B ˉ = B 1 Δ t \begin{aligned} \bar{A} &= I+A\Delta t ~~~~~(I为单位矩阵)\\ \bar{B} &= B_{1}\Delta t \end{aligned} AˉBˉ=I+AΔt     (I为单位矩阵)=B1Δt

另外,如果考虑路面坡度角(road bank angle) ϕ \phi ϕ(定义可参考前文动力学模型),则等式(18)变为
d d t [ e y e ˙ y e ψ e ˙ ψ ] = [ 0 1 0 0 0 − 2 C α f + 2 C α r m V x 2 C α f + 2 C α r m − 2 C α f l f + 2 C α r l r m V x 0 0 0 1 0 − 2 l f C α f − 2 l r C α r I z V x 2 l f C α f − 2 l r C α r I z − 2 l f 2 C α f + 2 l r 2 C α r I z V x ] [ e y e ˙ y e ψ e ˙ ψ ] + [ 0 2 C α f m 0 2 l f C α f I z ] δ + [ 0 − 2 C α f l f + 2 C α r l r m V x − V x 0 − 2 l f 2 C α f + 2 l r 2 C α r I z V x ] ψ ˙ d e s + [ 0 g 0 0 ] sin ⁡ ϕ (21) \tag{21} \begin{aligned} \frac{\mathrm{d}}{\mathrm{d} t}\left[\begin{array}{l} e_{y} \\ \dot{e}_{y} \\ e_{\psi} \\ \dot{e}_{\psi} \end{array}\right]=& {\left[\begin{array}{cccc} 0 & 1 & 0 & 0 \\ 0 & -\frac{2 C_{\alpha f}+2 C_{\alpha r}}{m V_{x}} & \frac{2 C_{\alpha f}+2 C_{\alpha r}}{m} & \frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}} \\ 0 & 0 & 0 & 1 \\ 0 & -\frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z} V_{x}} & \frac{2 l_{f} C_{\alpha f}-2 l_{r} C_{\alpha r}}{I_{z}} & -\frac{2 l_{f}^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \end{array}\right]\left[\begin{array}{l} e_{y} \\ \dot{e}_{y} \\ e_{\psi} \\ \dot{e}_{\psi} \end{array}\right] } \\ &+\left[\begin{array}{c} 0 \\ \frac{2 C_{\alpha f}}{m} \\ 0 \\ \frac{2 l_{f} C_{\alpha f}}{I_{z}} \end{array}\right] \delta+\left[\begin{array}{c} 0\\ \frac{-2 C_{\alpha f} l_{f}+2 C_{\alpha r} l_{r}}{m V_{x}}-V_{x} \\ 0\\ -\frac{2 l_{f}^{2} C_{\alpha f}+2 l_{r}{ }^{2} C_{\alpha r}}{I_{z} V_{x}} \end{array}\right]\dot\psi_{des}+\left[\begin{array}{c} 0 \\ g \\ 0 \\ 0 \end{array}\right] \sin{\phi} \end{aligned} dtd eye˙yeψe˙ψ = 00001mVx2Cαf+2Cαr0IzVx2lfCαf2lrCαr0m2Cαf+2Cαr0Iz2lfCαf2lrCαr0mVx2Cαflf+2Cαrlr1IzVx2lf2Cαf+2lr2Cαr eye˙yeψe˙ψ + 0m2Cαf0Iz2lfCαf δ+ 0mVx2Cαflf+2CαrlrVx0IzVx2lf2Cαf+2lr2Cαr ψ˙des+ 0g00 sinϕ(21)

3. python 实现

根据公式(18),我们可以使用numpy实现如下代码:

import numpy as np

class LateralErrorModel:
    """
    This model describes the lateral motion of a vehicle and its response to various inputs.

    Parameters:
        self.m (float): Mass of the vehicle (kg).
        self.Vx (float): Longitudinal velocity (self.m/s).
        self.C_alpha_f (float): Front tire cornering stiffness (N/rad).
        self.C_alpha_r (float): Rear tire cornering stiffness (N/rad).
        self.l_f (float): Distance from the vehicle's center of mass to the front axle (self.m).
        self.l_r (float): Distance from the vehicle's center of mass to the rear axle (self.m).
        self.I_z (float): Moment of inertia about the vertical axis (kg self.m^2).
        self.g (float): Acceleration due to gravity (self.m/s^2).
    """
    def __init__(self, m, Vx, C_alpha_f, C_alpha_r, l_f, l_r, I_z, g):
        self.m = m
        self.Vx = Vx
        self.C_alpha_f = C_alpha_f
        self.C_alpha_r = C_alpha_r
        self.l_f = l_f
        self.l_r = l_r
        self.I_z = I_z
        self.g = g
        
    def GenerateStateSpace(self):
        A = np.array([[0, 1, 0, 0],
                           [0, -(2*self.C_alpha_f + 2*self.C_alpha_r) / (self.m * self.Vx), (2*self.C_alpha_f + 2*self.C_alpha_r) / self.m,
                            (-2*self.C_alpha_f*self.l_f + 2*self.C_alpha_r*self.l_r) / (self.m * self.Vx)],
                           [0, 0, 0, 1],
                           [0, -(2*self.l_f*self.C_alpha_f - 2*self.l_r*self.C_alpha_r) / (self.I_z * self.Vx),
                            (2*self.l_f*self.C_alpha_f - 2*self.l_r*self.C_alpha_r) / self.I_z,
                            (-2*self.l_f**2*self.C_alpha_f + 2*self.l_r**2*self.C_alpha_r) / (self.I_z * self.Vx)]])
        
        B = np.array([[0],
                           [2 * self.C_alpha_f / self.m],
                           [0],
                           [2 * self.l_f * self.C_alpha_f / self.I_z]])
        
        C = np.array([[0],
                           [(-2*self.C_alpha_f*self.l_f + 2*self.C_alpha_r*self.l_r) / (self.m * self.Vx) - self.Vx],
                           [0],
                           [(-2*self.l_f**2*self.C_alpha_f + 2*self.l_r**2*self.C_alpha_r) / (self.I_z * self.Vx)]])
        
        D = np.array([[0],
                           [self.g],
                           [0],
                           [0]])
        return A,B,C,D
    def ComputeStateDerivative(self, state, delta, psi_des, phi):
        """
        Computes the derivative of the state vector using the lateral error dynamics model.

        Parameters:
            state (numpy.ndarray): The current state vector [e_y, e_y_dot, e_psi, e_psi_dot].
            delta (float): The steering input.
            psi_des (float): The desired yaw rate input.
            phi (float): The roll angle input.

        Returns:
            numpy.ndarray: The derivative of the state vector [e_y_dot, e_y_ddot, e_psi_dot, e_psi_ddot].
        """
        A,B,C,D=self.GenerateStateSpace()
        state_dot = np.dot(A, state) + np.dot(B, delta) + np.dot(C, psi_des) + np.dot(D, np.sin(phi))
        return state_dot[:,0]
    def DiscreteStateSpace(self,dt):
        """
        Returns:
            discrete state space
        """
        A,B,C,D = self.GenerateStateSpace()
        I = np.eye(4)
        A_bar = I + A * dt
        B_bar = B*dt
        return A_bar,B_bar



例如我们使用如下参数:

model = LateralErrorModel(m=1000.0, Vx=20.0, C_alpha_f=10000.0, C_alpha_r=15000.0, l_f=1.5, l_r=1.0, I_z=3000.0, g=9.8)

# Initial conditions and inputs
initial_state = np.array([0.0, 0.0, 0.0, 0.0])
delta_input = 0.1
psi_des_input = 0.0
phi_input = 0.1
dt = 0.1
# Compute the derivative of the state using the model instance
state_derivative = model.ComputeStateDerivative(initial_state, delta_input, psi_des_input, phi_input)
A_bar, B_bar = model.DiscreteStateSpace(dt)
print("State derivative:", state_derivative)
print("A_bar: ", A_bar)
print("B_bar: ", B_bar)

最终得到状态转移:

State derivative: [0.         2.97836748    0.         1.        ]
A_bar:  [[1.    0.1   0.    0.   ]
 [0.    0.75  5.    0.   ]
 [0.    0.    1.    0.1  ]
 [0.    0.    0.    0.975]]
B_bar:  [[0.]
 [2.]
 [0.]
 [1.]]

完整代码文件可见github仓库.

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHH3213

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值