前言
本章内容主要参考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
dt→0 ,
∣
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=∣ds∣∣dr∣τ⋅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 为曲率。
车身系下的线性二自由度动力学模型
考虑车辆的横向运动和横摆运动,有:
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αf−bCαr−vx+mvxaCαf−bCαrIzvxa2Cαf+b2Cαr][y˙ψ˙]+[−mCαf−IzaCα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αf−bCαr00000−mvx+mvxaCαf−bCαr1Izvxa2Cαf+b2Cαr
yy˙ψψ˙
+
0−mCαf0−IzaCα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
nr 上,误差可计算为:
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˙)⋅nr+(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
nr˙=dsdnr⋅dtds=−ks˙τr,且注意有
n
⃗
r
⋅
τ
⃗
r
=
0
\vec{n}_r\cdot\vec{\tau}_r=0
nr⋅τr=0,
O
P
⃗
−
O
P
r
⃗
=
e
1
n
⃗
r
\vec{OP}-\vec{OP_r}=e_1\vec{n}_r
OP−OPr=e1nr (
P
P
P 位于
n
⃗
r
\vec{n}_r
nr 上),得:
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
τ⋅nr=
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˙1−vxe2=e¨1−vxe˙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˙1−vxe2=e¨1−vxe˙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+mvxCafa−Carbe˙2−mCafδ−θ˙r(vx−mvxCafa−Carb)=IzvxCafa−Carbe˙1+(−IzCafa−Carb)e2+IzvxCafa2+Carb2e˙2−IzCafaδ+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αf−bCαr0−mCaf+Car0−IzaCαf−bCαr0mvxaCαf−bCαr1Izvxa2Cαf+b2Cαr
e1e˙1e2e˙2
+
0−mCαf0−IzaCαf
δ+
0−vx+mvxaCaf−bCar0Izvxa2Caf+b2Car
θ˙r
参考
[1] 余志生. 汽车理论[J]. 2000.
[2] 【基础】自动驾驶控制算法第四讲 坐标变换与横向误差微分方程
[3] Rajamani R. Vehicle dynamics and control[M]. Springer Science & Business Media, 2011.