基于LQR和前馈控制的自动驾驶控制算法(1):二自由度动力学模型


前言

本章内容主要参考bilibili的up主【忠厚老实的老王】中的自动驾驶控制系列视频,可以说许多内容都是我对该系列视频的学习笔记,非常感谢该大佬的用心讲解。以下是推导中涉及了较为小众的基础知识。

【基础1】向量微分[2]

在这里插入图片描述

设经过 d t dt dt 时刻,向量 r ⃗ \vec{r} r 移动为 r ⃗ + d r ⃗ \vec{r}+d\vec{r} r +dr ,有:
d r ⃗ d t = d r ⃗ d s ⋅ d s d t \frac{d\vec{r}}{dt}=\frac{d\vec{r}}{ds}\cdot\frac{ds}{dt} dtdr =dsdr dtds
d t → 0 dt \rightarrow 0 dt0 , ∣ d r ⃗ ∣ = ∣ d s ⃗ ∣ |d\vec{r}|=|d\vec{s}| dr =ds 方向趋于切线方向 τ ⃗ \vec{\tau} τ ,即:
d r ⃗ d t = ∣ d r ⃗ ∣ ∣ d s ∣ τ ⃗ ⋅ d s d t = τ ⃗ ⋅ d s d t = s ˙ τ ⃗ \frac{d\vec{r}}{dt}=\frac{|d\vec{r}|}{|ds|}\vec{\tau}\cdot\frac{ds}{dt} = \vec{\tau}\cdot\frac{ds}{dt} = \dot{s}\vec{\tau} dtdr =dsdr τ dtds=τ dtds=s˙τ

【基础2】Frenet公式[2]

d τ ⃗ d s = k n ⃗ d n ⃗ d s = − k τ ⃗ \begin{align*} \frac{d\vec{\tau}}{ds}&=k\vec{n} \\ \frac{d\vec{n}}{ds}&=-k\vec{\tau} \end{align*} dsdτ dsdn =kn =kτ
其中, τ ⃗ \vec{\tau} τ n ⃗ \vec{n} n 分别为切向和法向单位向量, k k k 为曲率。


车身系下的线性二自由度动力学模型

二自由度车辆模型[1]

二自由度车辆模型[1]

考虑车辆的横向运动和横摆运动,有:
m ( y ¨ + v x ψ ˙ ) = F y f cos ⁡ δ + F y r I z ψ ¨ = a F y f cos ⁡ δ − b F y r \begin{align*} m(\ddot{y}+v_x\dot{\psi})&=F_{yf}\cos{\delta}+F_{yr} \\ I_z\ddot{\psi}&=aF_{yf}\cos{\delta}-bF_{yr} \end{align*} m(y¨+vxψ˙)Izψ¨=Fyfcosδ+Fyr=aFyfcosδbFyr
假设轮胎特性处于线性区,轮胎侧向力 F y F_y Fy 近似计算为:
F y = C α α F_y=C_{\alpha}\alpha Fy=Cαα
其中 C α C_\alpha Cα 为左右双轮的侧偏刚度, α \alpha α 为轮胎侧偏角,可计算为:
{ α f = arctan ⁡ y ˙ + a ψ ˙ v x − δ ≈ y ˙ + a ψ ˙ v x − δ α r = arctan ⁡ y ˙ − b ψ ˙ v x ≈ y ˙ − b ψ ˙ v x \left\{ \begin{aligned} \alpha_f &= \arctan{\frac{\dot{y}+a\dot{\psi}}{v_x}} - \delta \approx \frac{\dot{y}+a\dot{\psi}}{v_x}- \delta \\ \alpha_r &= \arctan{\frac{\dot{y}-b\dot{\psi}}{v_x}} \approx \frac{\dot{y}-b\dot{\psi}}{v_x} \end{aligned} \right. αfαr=arctanvxy˙+aψ˙δvxy˙+aψ˙δ=arctanvxy˙bψ˙vxy˙bψ˙
采用小转角假设,设 cos ⁡ δ ≈ 1 \cos{\delta} \approx 1 cosδ1 ,整理可得:
[ y ¨ ψ ¨ ] = [ C α f + C α r m v x − v x + a C α f − b C α r m v x a C α f − b C α r I z v x a 2 C α f + b 2 C α r I z v x ] [ y ˙ ψ ˙ ] + [ − C α f m − a C α f I z ] δ (1) \begin{bmatrix} \ddot{y} \\ \ddot{\psi} \end{bmatrix} = \begin{bmatrix} \frac{C_{\alpha{}f}+C_{\alpha{}r}}{mv_x} & -v_x+\frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{mv_x} \\ \frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{I_zv_x} & \frac{a^2C_{\alpha{}f}+b^2C_{\alpha{}r}}{I_zv_x} \end{bmatrix} \begin{bmatrix} \dot{y} \\ \dot{\psi} \end{bmatrix} + \begin{bmatrix} -\frac{C_{\alpha{}f}}{m} \\ -\frac{aC_{\alpha{}f}}{I_z} \end{bmatrix} \delta \tag{1} [y¨ψ¨]=[mvxCαf+CαrIzvxaCαfbCαrvx+mvxaCαfbCαrIzvxa2Cαf+b2Cαr][y˙ψ˙]+[mCαfIzaCαf]δ(1)
或可写为:
[ y y ˙ ψ ψ ˙ ] ˙ = [ 0 1 0 0 0 C α f + C α r m v x 0 − m v x + a C α f − b C α r m v x 0 0 0 1 0 a C α f − b C α r I z v x 0 a 2 C α f + b 2 C α r I z v x ] [ y y ˙ ψ ψ ˙ ] + [ 0 − C α f m 0 − a C α f I z ] δ \dot{\begin{bmatrix} y \\ \dot{y} \\ \psi \\ \dot{\psi} \end{bmatrix}} = \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0 & \frac{C_{\alpha{}f}+C_{\alpha{}r}}{mv_x} & 0 & -mv_x+\frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{mv_x}\\ 0 & 0 & 0 & 1 \\ 0 & \frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{I_zv_x} & 0 & \frac{a^2C_{\alpha{}f}+b^2C_{\alpha{}r}}{I_zv_x} \end{bmatrix} \begin{bmatrix} y \\ \dot{y} \\ \psi \\ \dot{\psi} \end{bmatrix}+ \begin{bmatrix} 0 \\ -\frac{C_{\alpha{}f}}{m} \\ 0 \\ -\frac{aC_{\alpha{}f}}{I_z} \end{bmatrix} \delta yy˙ψψ˙ ˙= 00001mvxCαf+Cαr0IzvxaCαfbCαr00000mvx+mvxaCαfbCαr1Izvxa2Cαf+b2Cαr yy˙ψψ˙ + 0mCαf0IzaCαf δ

Frenet坐标系下的误差模型

误差定义[3]

横向误差 e 1 e_1 e1:从参考路径到车辆质心的距离
航向误差 e 2 e_2 e2:相对参考路径的横摆角误差

模型推导[2]

在这里插入图片描述
如图,若车辆质心位置为 P P P ,对应参考路径中最近点为 P r Pr Pr ,易知 P P P 位于 n ⃗ r \vec{n}_r n r 上,误差可计算为:
e 1 = ( O P ⃗ − O P r ⃗ ) ⋅ n r ⃗ e 2 = ψ + β − θ r ≈ ψ − θ r \begin{align*} e_1 &= (\vec{OP}-\vec{OP_r})\cdot\vec{n_r} \\ e_2 &=\psi+\beta-\theta_r \approx \psi-\theta_r \end{align*} e1e2=(OP OPr )nr =ψ+βθrψθr
e 1 e_1 e1 求导得:
e ˙ 1 = ( O P ⃗ ˙ − O P r ⃗ ˙ ) ⋅ n ⃗ r + ( O P ⃗ − O P r ⃗ ) ⋅ n ⃗ ˙ r \dot{e}_1= (\dot{\vec{OP}}-\dot{\vec{OP_r}})\cdot\vec{n}_r + (\vec{OP}-\vec{OP_r})\cdot\dot{\vec{n}}_r e˙1=(OP ˙OPr ˙)n r+(OP OPr )n ˙r
根据【基础1】【基础2】可知 O P ⃗ ˙ = ∣ V ⃗ ∣ τ ⃗ \dot{\vec{OP}}=\left|\vec{V}\right|\vec{\tau} OP ˙= V τ O P r ⃗ ˙ = s ˙ τ ⃗ r \dot{\vec{OP_r}}=\dot{s}\vec{\tau}_r OPr ˙=s˙τ r n ⃗ r ˙ = d n ⃗ r d s ⋅ d s d t = − k s ˙ τ ⃗ r \dot{\vec{n}_r}=\frac{d\vec{n}_r}{ds}\cdot\frac{ds}{dt}=-k\dot{s}\vec{\tau}_r n r˙=dsdn rdtds=ks˙τ r,且注意有 n ⃗ r ⋅ τ ⃗ r = 0 \vec{n}_r\cdot\vec{\tau}_r=0 n rτ r=0 O P ⃗ − O P r ⃗ = e 1 n ⃗ r \vec{OP}-\vec{OP_r}=e_1\vec{n}_r OP OPr =e1n r ( P P P 位于 n ⃗ r \vec{n}_r n r 上),得:
e ˙ 1 = ∣ V ⃗ ∣ τ ⃗ ⋅ n ⃗ r = ∣ V ⃗ ∣ cos ⁡ ( π 2 − θ + θ r ) = ∣ V ⃗ ∣ sin ⁡ ( θ − θ r ) \begin{align*} \dot{e}_1 &= \left|\vec{V}\right|\vec{\tau}\cdot\vec{n}_r \\ &= \left|\vec{V}\right|\cos{(\frac{\pi}{2}-\theta+\theta_r)} \\ &= \left|\vec{V}\right|\sin{(\theta-\theta_r)} \end{align*} e˙1= V τ n r= V cos(2πθ+θr)= V sin(θθr)
注意到:
sin ⁡ ( θ − θ r ) = sin ⁡ ( β + ψ − θ r ) = sin ⁡ β cos ⁡ ( ψ − θ r ) + cos ⁡ β sin ⁡ ( ψ − θ r ) \begin{align*} \sin{(\theta-\theta_r)} &= \sin{(\beta+\psi-\theta_r)}\\ &= \sin{\beta}\cos{(\psi-\theta_r)}+\cos{\beta}\sin{(\psi-\theta_r)} \end{align*} sin(θθr)=sin(β+ψθr)=sinβcos(ψθr)+cosβsin(ψθr)
故:
e ˙ 1 = ∣ V ⃗ ∣ sin ⁡ β cos ⁡ ( ψ − θ r ) + ∣ V ⃗ ∣ cos ⁡ β sin ⁡ ( ψ − θ r ) = v y cos ⁡ ( ψ − θ r ) + v x sin ⁡ ( ψ − θ r ) ≈ v y + v x sin ⁡ ( ψ − θ r ) (认为 ψ − θ r 是小量) ≈ v y + v x e 2 \begin{align*} \dot{e}_1 &= \left|\vec{V}\right|\sin{\beta}\cos{(\psi-\theta_r)}+\left|\vec{V}\right|\cos{\beta}\sin{(\psi-\theta_r)} \\ &= v_y\cos{(\psi-\theta_r)}+v_x\sin{(\psi-\theta_r)} \\ & \approx v_y+v_x\sin{(\psi-\theta_r)} \quad \text{(认为$\psi-\theta_r$是小量)} \\ &\approx v_y+v_xe_2 \end{align*} e˙1= V sinβcos(ψθr)+ V cosβsin(ψθr)=vycos(ψθr)+vxsin(ψθr)vy+vxsin(ψθr)(认为ψθr是小量)vy+vxe2
得:
v y = e ˙ 1 − v x e 2 v ˙ y = e ¨ 1 − v x e ˙ 2 \begin{align*} v_y &= \dot{e}_1-v_xe_2 \\ \dot{v}_y &= \ddot{e}_1-v_x\dot{e}_2 \end{align*} vyv˙y=e˙1vxe2=e¨1vxe˙2
e 2 e_2 e2 求导得:
e ˙ 2 = ψ ˙ − θ ˙ r e ¨ 2 = ψ ¨ − θ ¨ r ≈ ψ ¨ \begin{align*} \dot{e}_2 &= \dot{\psi}-\dot{\theta}_r \\ \ddot{e}_2 &= \ddot{\psi}-\ddot{\theta}_r \approx \ddot{\psi} \end{align*} e˙2e¨2=ψ˙θ˙r=ψ¨θ¨rψ¨
整理可得( y ˙ = v y \dot{y}=v_y y˙=vy y ¨ = v ˙ y \ddot{y} = \dot{v}_y y¨=v˙y):
{ y ˙ = e ˙ 1 − v x e 2 y ¨ = e ¨ 1 − v x e ˙ 2 ψ ˙ = e ˙ 2 + θ ˙ r ψ ¨ = e ¨ 2 (2) \left\{ \begin{aligned} \dot{y} &= \dot{e}_1-v_xe_2 \\ \ddot{y} &= \ddot{e}_1-v_x\dot{e}_2 \\ \dot{\psi} &= \dot{e}_2+\dot{\theta}_r \\ \ddot{\psi} &= \ddot{e}_2 \end{aligned} \right. \tag{2} y˙y¨ψ˙ψ¨=e˙1vxe2=e¨1vxe˙2=e˙2+θ˙r=e¨2(2)

式(2)在[3]中给出另一种定义方法,最终得到的式子是相似的。

将(2)代入(1),使用Matlab整理:

%% 二自由度模型
syms C_af C_ar m v_x a b I_z delta real;
syms y_dot psi_dot real;

A = [(C_af + C_ar)/(m*v_x), -v_x + (a*C_af - b*C_ar)/(m*v_x);
     (a*C_af - b*C_ar)/(I_z*v_x), (a^2*C_af + b^2*C_ar)/(I_z*v_x)];
B = [-C_af/m; -a*C_af/I_z];

X = [y_dot; psi_dot];
u = delta;

y_psi_ddot = A * X + B * u;

disp('y_ddot:');
disp(y_psi_ddot(1));
disp('psi_ddot:');
disp(y_psi_ddot(2));
%% 代入
syms e1 e1_dot e1_ddot e2 e2_dot e2_ddot theta_dot_r
y_dot_n = e1_dot-v_x*e2;
psi_dot_n = e2_dot + theta_dot_r;

rightEq1 = y_psi_ddot(1)+v_x*e2_dot;
rightEq2 = y_psi_ddot(2);

rightEq1 = subs(rightEq1, y_dot, y_dot_n);
rightEq1 = subs(rightEq1, psi_dot, psi_dot_n);
rightEq1 = collect(rightEq1, [e1 e1_dot e2 e2_dot delta])
rightEq2 = subs(rightEq2, y_dot, y_dot_n);
rightEq2 = subs(rightEq2, psi_dot, psi_dot_n);
rightEq2 = collect(rightEq2, [e1 e1_dot e2 e2_dot delta])

得:
e ¨ 1 = C a f + C a r m   v x   e ˙ 1 + ( − C a f + C a r m )   e 2 + C a f   a − C a r   b m   v x   e ˙ 2 − C a f m   δ − θ ˙ r   ( v x − C a f   a − C a r   b m   v x ) e ¨ 2 = C a f   a − C a r   b I z   v x   e ˙ 1 + ( − C a f   a − C a r   b I z )   e 2 + C a f   a 2 + C a r   b 2 I z   v x   e ˙ 2 − C a f   a I z   δ + θ ˙ r   ( C a f   a 2 + C a r   b 2 ) I z   v x \begin{align*} \ddot{e}_1 &= \frac{C_{\mathrm{af}}+C_{\mathrm{ar}}}{m\,v_{x}}\,\dot{e}_1+\left(-\frac{C_{\mathrm{af}}+C_{\mathrm{ar}}}{m}\right)\,e_{2}+\frac{C_{\mathrm{af}}\,a-C_{\mathrm{ar}}\,b}{m\,v_{x}}\,\dot{e}_2-\frac{C_{\mathrm{af}}}{m}\,\delta -\dot{\theta}_{r}\,\left(v_{x}-\frac{C_{\mathrm{af}}\,a-C_{\mathrm{ar}}\,b}{m\,v_{x}}\right) \\ \ddot{e}_2 &=\frac{C_{\mathrm{af}}\,a-C_{\mathrm{ar}}\,b}{I_{z}\,v_{x}}\,\dot{e}_1+\left(-\frac{C_{\mathrm{af}}\,a-C_{\mathrm{ar}}\,b}{I_{z}}\right)\,e_{2}+\frac{C_{\mathrm{af}}\,a^2+C_{\mathrm{ar}}\,b^2}{I_{z}\,v_{x}}\,\dot{e}_2-\frac{C_{\mathrm{af}}\,a}{I_{z}}\,\delta +\frac{\dot{\theta }_{r}\,\left(C_{\mathrm{af}}\,a^2+C_{\mathrm{ar}}\,b^2\right)}{I_{z}\,v_{x}} \end{align*} \\ e¨1e¨2=mvxCaf+Care˙1+(mCaf+Car)e2+mvxCafaCarbe˙2mCafδθ˙r(vxmvxCafaCarb)=IzvxCafaCarbe˙1+(IzCafaCarb)e2+IzvxCafa2+Carb2e˙2IzCafaδ+Izvxθ˙r(Cafa2+Carb2)
进一步改写为:
[ e 1 e ˙ 1 e 2 e ˙ 2 ] ˙ = [ 0 1 0 0 0 C α f + C α r m v x − C a f + C a r m a C α f − b C α r m v x 0 0 0 1 0 a C α f − b C α r I z v x − a C α f − b C α r I z a 2 C α f + b 2 C α r I z v x ] [ e 1 e ˙ 1 e 2 e ˙ 2 ] + [ 0 − C α f m 0 − a C α f I z ] δ + [ 0 − v x + a C a f − b C a r m   v x 0 a 2 C a f + b 2 C a r I z   v x ] θ ˙ r \dot{\begin{bmatrix} e_1 \\ \dot{e}_1 \\ e_2\\ \dot{e}_2 \end{bmatrix}} = \begin{bmatrix} 0 & 1 & 0 & 0 \\ 0 & \frac{C_{\alpha{}f}+C_{\alpha{}r}}{mv_x} & -\frac{C_{\mathrm{af}}+C_{\mathrm{ar}}}{m} & \frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{mv_x}\\ 0 & 0 & 0 & 1 \\ 0 & \frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{I_zv_x} & -\frac{aC_{\alpha{}f}-bC_{\alpha{}r}}{I_z} & \frac{a^2C_{\alpha{}f}+b^2C_{\alpha{}r}}{I_zv_x} \end{bmatrix} \begin{bmatrix} e_1 \\ \dot{e}_1 \\ e_2\\ \dot{e}_2 \end{bmatrix}+ \begin{bmatrix} 0 \\ -\frac{C_{\alpha{}f}}{m} \\ 0 \\ -\frac{aC_{\alpha{}f}}{I_z} \end{bmatrix}\delta + \begin{bmatrix} 0 \\ -v_{x}+\frac{aC_{\mathrm{af}}-bC_{\mathrm{ar}}}{m\,v_{x}} \\ 0 \\ \frac{a^2C_{\mathrm{af}}+b^2C_{\mathrm{ar}}}{I_{z}\,v_{x}} \end{bmatrix} \dot{\theta}_r e1e˙1e2e˙2 ˙= 00001mvxCαf+Cαr0IzvxaCαfbCαr0mCaf+Car0IzaCαfbCαr0mvxaCαfbCαr1Izvxa2Cαf+b2Cαr e1e˙1e2e˙2 + 0mCαf0IzaCαf δ+ 0vx+mvxaCafbCar0Izvxa2Caf+b2Car θ˙r


参考

[1] 余志生. 汽车理论[J]. 2000.
[2] 【基础】自动驾驶控制算法第四讲 坐标变换与横向误差微分方程
[3] Rajamani R. Vehicle dynamics and control[M]. Springer Science & Business Media, 2011.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

车队老哥记录生活

支持作者创作更多免费好文~

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

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

打赏作者

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

抵扣说明:

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

余额充值