前言

本篇文章主要记录自动驾驶控制算法学习中的一些基础的非模型优化的算法,包括纯跟踪算法(PurePursuit)、Stanley算法、后轮反馈控制算法。


一、纯跟踪算法

1. 车辆运动学模型

纯跟踪算法采用基于车辆后轴中心的运动学模型,此处假定后轮不转向。
在这里插入图片描述

模型中的符号和定义如下:

A A A:前轮中心点; B B B:后轮中心点;(左右轮都合并为单个轮子)
δ f \delta _{f} δf:前轮转向角;
L L L:车辆轴距;
V V V:车辆的速度;
O O O:车辆的瞬时旋转中心;
R R R:车辆的轨迹半径;
Ψ \Psi Ψ:车辆的航向角;

基于车辆后轴中心的运动学模型为:
X ˙ = V cos ⁡ Ψ Y ˙ = V sin ⁡ Ψ Ψ ˙ = V tan ⁡ δ f L \begin{aligned} \dot{X} =V\cos \Psi \\ \dot{Y} =V\sin \Psi \\ \dot{\Psi}= \frac{V\tan \delta _{f} }{L} \\ \end{aligned} X˙=VcosΨY˙=VsinΨΨ˙=LVtanδf
前轮转向角和后轴跟随曲线之间的几何关系可表示为:
tan ⁡ δ f = L R \begin{aligned} \tan{\delta _{f}} = \frac{L}{R} \end{aligned} tanδf=RL

2. 纯跟踪算法推导

纯追踪算法的原理为通过调整前轮转向角 δ f \delta_f δf,使得车辆后轴中心刚好可以经过规划路径中给定的路径点。可以理解为,以车辆后轮沿当前点与给定路径点构成的圆弧行驶。
在这里插入图片描述

图中的部分符号和定义如下:
P P P:车辆追踪的规划路径中的目标点;
r r r:车辆后轴中心与目标点组成的圆弧的半径;
α \alpha α:后轴中心到目标点的向量与车身坐标系的夹角;
e y e_y ey:目标点在车身坐标系下的横向偏差;

前轮转向角和后轴跟随曲线之间的几何关系可知,计算前轮转角需计算出车辆后轴中心点的路径半径 R R R,当 R = r R=r R=r时,车辆的后轴中心经过目标点。
在三角形 △ o P B \bigtriangleup oPB oPB中,由正弦定理可得:
sin ⁡ 2 α l d = sin ⁡ ( π 2 − α ) r \begin{aligned} \frac{\sin 2 \alpha}{l_d} = \frac{\sin (\frac{\pi}{2}-\alpha)}{r} \end{aligned} ldsin2α=rsin(2πα)
sin ⁡ ( π 2 − α ) = cos ⁡ α \sin (\frac{\pi}{2}-\alpha)=\cos \alpha sin(2πα)=cosα sin ⁡ 2 α = 2 sin ⁡ α cos ⁡ α \sin 2 \alpha=2 \sin{\alpha} \cos{\alpha} sin2α=2sinαcosα,将上式整理可得:
r = l d 2 sin ⁡ α \begin{aligned} r = \frac{l_d}{2 \sin \alpha} \end{aligned} r=2sinαld

tan ⁡ δ f = L R \tan{\delta _{f}} = \frac{L}{R} tanδf=RL,令 R = r R=r R=r,可得前轮转角的表达式为:
δ f = arctan ⁡ 2 sin ⁡ ( α ) L l d \begin{aligned} \delta _{f} =\arctan \frac{2 \sin {(\alpha)} L }{l_d} \end{aligned} δf=arctanld2sin(α)L
其中, α \alpha α为后轴中心到目标点的向量与车身坐标系的夹角,方向根据车身参考系的设定进行判断,本文章设定为左正右负。

拓展:
由上图可知 sin ⁡ α = e y l d \sin \alpha = \frac{e_y}{l_d} sinα=ldey,带入上式可得:

r = l d 2 2 e y \begin{aligned} r = \frac{l_d^2}{2 e_y} \end{aligned} r=2eyld2

tan ⁡ δ f = L R \tan{\delta _{f}} = \frac{L}{R} tanδf=RL,令 R = r R=r R=r,可得:
δ f = arctan ⁡ 2 e y L l d 2 \begin{aligned} \delta _{f} =\arctan \frac{2 e_y L }{l_d^2} \end{aligned} δf=arctanld22eyL
其中目标点在车身坐标系下的横向偏差 e y e_y ey可通过向量运算求得,已知目标点 P ( x p , y p ) P(x_p,y_p) P(xp,yp)到车辆后中心点 B ( x b , y b ) B(x_b, y_b) B(xb,yb)的向量为 P B ⃗ = ( x p − x b , y p − y b ) \vec{PB}=(x_p-x_b, y_p- y_b) PB =(xpxb,ypyb),沿车辆速度方向的单位向量 k ⃗ = ( cos ⁡ Ψ , sin ⁡ Ψ ) \vec{k} = (\cos \Psi , \sin \Psi) k =(cosΨ,sinΨ)
e y = ∣ P B ⃗ × k ⃗ ∣ \begin{aligned} e_y =\left | \vec{PB} \times \vec{k} \right | \end{aligned} ey= PB ×k

二、Stanley算法

1.车辆运动学模型

Stanley同样采用与纯跟踪算法相同的运动学模型-基于车辆后轴中心的运动学模型,Stanley算法中使用前轴中心的信息可通过几何转换获得。

2.Stanley算法推导

在这里插入图片描述
图中的部分符号和定义如下:
A 、 B A、B AB:车辆前轴、后轴中心点;
P P P:规划路径中距前轴中心最近的点;
L L L:车辆轴距;
v v v:车辆前轮速度;
Ψ \Psi Ψ:车辆航向角;
Ψ t \Psi_t Ψt P P P点处的航向角;
δ f \delta_f δf:车辆的前轮转角;
δ e \delta_e δe:车辆前轮转角与 P P P点处航向角之间的偏差;
Ψ e \Psi_e Ψe P P P点处航向角与车辆航向角之间的偏差;
e y e_y ey:前轴中线点到 P P P点切线方向的偏差;
d d d:车辆速度方向与 P P P点切线方向的交点与前轴中心点沿 P P P点切线方向的纵向偏差;

Stanley算法是一种基于前轮航迹误差( e y e_y ey)的非线性反馈控制算法,由上图中的几何关系可得:
Ψ e = Ψ t − Ψ \begin{aligned} \Psi_e = \Psi_t - \Psi \end{aligned} Ψe=ΨtΨ
前轮速度方向与目标点航向偏差的表达式为:
δ e = arcsin ⁡ k ⋅ e y v = arctan ⁡ e y d \begin{aligned} \delta_e =\arcsin \frac{k \cdot e_y}{v} = \arctan \frac{ e_y}{d} \end{aligned} δe=arcsinvkey=arctandey
其中 k k k为算法中设定的系数。
上式表明,当车辆沿速度方向行驶至与目标点 P P P切线方向相交位置时,车辆前轮航迹偏差为0。对上述三角形来说,速度值不变的情况下,系数k越大,车辆前轮航迹偏差减少的速度越快。
此外可得 d d d与系数 k k k反相关,与速度 v v v的大小正相关。在小角度的情况下,可近似得: d ≈ v k d\approx \frac{v}{k} dkv
在这里插入图片描述

综上可得,车辆前轮转角控制量 δ f \delta_f δf计算公式为
δ f = Ψ t − Ψ + arcsin ⁡ k ⋅ e y v \begin{aligned} \delta_f = \Psi_t - \Psi + \arcsin \frac{k \cdot e_y}{v} \end{aligned} δf=ΨtΨ+arcsinvkey

拓展:横向误差变化率分析
车辆横向误差变化率为:
e ˙ y = − v sin ⁡ δ e \begin{aligned} \dot e_y = - v\sin \delta_e \end{aligned} e˙y=vsinδe
此处假设 e y e_y ey δ e \delta_e δe为标量,在正确的控制下,横向误差会越来越小,因此横向偏差变化率为负。
根据几何关系可得:
sin ⁡ δ e = e y d ( t ) 2 + e y 2 \begin{aligned} \sin \delta_e = \frac{e_y}{\sqrt{d(t)^2+e_y^2} } \end{aligned} sinδe=d(t)2+ey2 ey
根据 d ≈ v k d\approx \frac{v}{k} dkv,上式可写为:
sin ⁡ δ e = k ⋅ e y v 2 + ( k e y ) 2 \begin{aligned} \sin \delta_e = \frac{k \cdot e_y}{\sqrt{v^2+(ke_y)^2} } \end{aligned} sinδe=v2+(key)2 key
进而可得:
e ˙ y = − k ⋅ e y 1 + ( k e y v ) 2 \begin{aligned} \dot e_y = - \frac{k \cdot e_y}{\sqrt{1+(\frac{ke_y}{v})^2} } \end{aligned} e˙y=1+(vkey)2 key
当横向误差很小时,上式可改写为:
e ˙ y = − k ⋅ e y \begin{aligned} \dot e_y = - k \cdot e_y \end{aligned} e˙y=key
对上式进行积分可得:
e y ( t ) = e y ( 0 ) ⋅ e − k t \begin{aligned} e_y(t) = e_y(0) \cdot e^{-kt} \end{aligned} ey(t)=ey(0)ekt
t ⟶ ∞ t\longrightarrow \infty t时,横向误差以指数形式收敛于0,参数 k k k决定了收敛速度。

三、后轮位置反馈控制算法

1.车辆运动学模型

后轮位置反馈控制同样采用与纯跟踪算法相同的运动学模型-基于车辆后轴中心的运动学模型。

2.后轮位置反馈控制算法推导

在这里插入图片描述

图中的部分符号和定义如下:
A 、 B A、B AB:车辆前轴、后轴中心点;
P P P:规划路径中距后轴中心最近的点;
L L L:车辆轴距;
v v v:车辆后轴中心处的速度;
s ˙ \dot s s˙:目标点处的速度;
Ψ \Psi Ψ:车辆航向角;
Ψ t \Psi_t Ψt P P P点处的航向角;
δ f \delta_f δf:车辆的前轮转角;
ψ e \psi_e ψe P P P点处航向角与车辆航向角之间的偏差;
e y e_y ey:前轴中线点到 P P P点切线方向的偏差;
d d d:后轴中心点到目标点的距离;

车辆的横向位置误差 e y e_y ey可通过向量法计算,已知目标点 P ( x p , y p ) P(x_p,y_p) P(xp,yp)到车辆后中心点 B ( x b , y b ) B(x_b, y_b) B(xb,yb)的向量为 P B ⃗ = ( x p − x b , y p − y b ) \vec{PB}=(x_p-x_b, y_p- y_b) PB =(xpxb,ypyb),沿路径点切线方向的单位向量 k ⃗ = ( cos ⁡ ψ t , sin ⁡ ψ t ) \vec{k} = (\cos \psi_t , \sin \psi_t) k =(cosψt,sinψt)
e y = ∣ P B ⃗ × k ⃗ ∣ \begin{aligned} e_y =\left | \vec{PB} \times \vec{k} \right | \end{aligned} ey= PB ×k
当车辆后轴中心点位于路径对应车辆前进方向左侧时, e y e_y ey为正,反之为负。在上图所示情况下, e y e_y ey为负。

航向角误差 ψ e \psi_e ψe为车辆航向角 ψ \psi ψ与目标点处航向角 ψ t \psi_t ψt的差值:
ψ e = ψ t − ψ \begin{aligned} \psi_e = \psi_t - \psi \end{aligned} ψe=ψtψ
假设以路径曲线在目标点处的旋转中心为 o o o,车辆后轴中心角速度 ω r \omega_r ωr和目标点处的角速度 ω s \omega_s ωs近似相等,根据车辆旋转角速度计算公式 V R \frac{V}{R} RV可得:
s ˙ R = v ⋅ cos ⁡ ψ e R − e y \begin{aligned} \frac{\dot s}{R} = \frac{v \cdot \cos \psi_e}{R-e_y} \end{aligned} Rs˙=Reyvcosψe
在上图所示情况下,目标点处的曲率 k ( s ) k(s) k(s)为正,旋转半径 R = 1 k ( s ) R=\frac{1}{k(s)} R=k(s)1为正, e y e_y ey为负。
s ˙ \dot s s˙的表达式可写为:
s ˙ = v ⋅ cos ⁡ ψ e 1 − k ( s ) ⋅ e y \begin{aligned} \dot s = \frac{v \cdot \cos \psi_e}{1-k(s) \cdot e_y} \end{aligned} s˙=1k(s)eyvcosψe
车辆横向移动的速度 e ˙ \dot e e˙可写为:
e ˙ y = v ⋅ sin ⁡ ψ e \begin{aligned} \dot e_y = v \cdot \sin \psi_e \end{aligned} e˙y=vsinψe

车辆航向角误差的变化率 ψ ˙ e \dot \psi_e ψ˙e可写为:
ψ ˙ e = ψ ˙ − ψ ˙ t \begin{aligned} \dot \psi_e = \dot \psi - \dot \psi_t \end{aligned} ψ˙e=ψ˙ψ˙t
ψ ˙ t = s ˙ R = s ˙ ⋅ k ( s ) \dot \psi_t=\frac{\dot s}{R}=\dot s \cdot k(s) ψ˙t=Rs˙=s˙k(s),带入上式可得:
ψ ˙ e = ψ ˙ − v ⋅ k ( s ) ⋅ cos ⁡ ψ e 1 − k ( s ) ⋅ e y \begin{aligned} \dot \psi_e = \dot \psi - \frac{v \cdot k(s) \cdot \cos \psi_e}{1-k(s) \cdot e_y} \end{aligned} ψ˙e=ψ˙1k(s)eyvk(s)cosψe
综上,目标点处的速度、横向误差变化率、航向误差变化率的微分方程形式整理如下:
s ˙ = v ⋅ cos ⁡ ψ e 1 − k ( s ) ⋅ e y e ˙ y = v ⋅ sin ⁡ ψ e ψ ˙ e = ψ ˙ − v ⋅ k ( s ) ⋅ cos ⁡ ψ e 1 − k ( s ) ⋅ e y \begin{aligned} \dot s = \frac{v \cdot \cos \psi_e}{1-k(s) \cdot e_y} \\ \dot e_y = v \cdot \sin \psi_e \\ \dot \psi_e = \dot \psi - \frac{v \cdot k(s) \cdot \cos \psi_e}{1-k(s) \cdot e_y} \end{aligned} s˙=1k(s)eyvcosψee˙y=vsinψeψ˙e=ψ˙1k(s)eyvk(s)cosψe

李亚普洛夫稳定判据

基于上述微分方程,定义李亚普洛夫函数形式如下:
V ( e y , ψ e ) = 1 2 e y 2 + 1 2 ⋅ k 2 ψ e 2 \begin{aligned} V(e_y,\psi _e) = \frac{1}{2}e_y^2+\frac{1}{2 \cdot k_2}\psi_e^2 \end{aligned} V(ey,ψe)=21ey2+2k21ψe2
其中 k 2 > 0 k_2>0 k2>0,为了使 ( e y , ψ e ) (e_y,\psi _e) (ey,ψe)在平衡点 ( 0 , 0 ) (0,0) (0,0)处稳定,根据李亚普洛夫稳定判据,必须满足以下两个条件:

  1. lim ⁡ ∣ e y , ψ e ∣ → ∞ V = ∞ \lim_{\left |e_y,\psi _e\right | \to \infty} V=\infty limey,ψeV=
  2. V ˙ < 0   ( e y ≠ 0 , ψ e ≠ 0 ) \dot V<0 \ (e_y \ne 0, \psi _e \ne 0) V˙<0 (ey=0,ψe=0)
    对于条件1,定义的李亚普洛夫函数显式成立,所以李亚普洛夫稳定判据第一条满足。
    对于 V ˙ < 0 \dot V<0 V˙<0,结合上述推导的微分方程,推导形式如下:

V ˙ = e y ⋅ e ˙ y + 1 k 2 ⋅ ψ e ⋅ ψ ˙ e = e y ⋅ v ⋅ sin ⁡ ( ψ e ) + 1 k 2 ⋅ ψ e ⋅ ( ψ ˙ − v ⋅ k ( s ) ⋅ cos ⁡ ψ e 1 − k ( s ) ⋅ e y ) \begin{aligned} \dot V = e_y \cdot \dot e_y + \frac{1}{ k_2} \cdot \psi _e \cdot \dot \psi _e \\ =e_y \cdot v \cdot \sin(\psi _e) + \frac{1}{ k_2} \cdot \psi _e \cdot (\dot \psi - \frac{v \cdot k(s) \cdot \cos \psi_e}{1-k(s) \cdot e_y} ) \end{aligned} V˙=eye˙y+k21ψeψ˙e=eyvsin(ψe)+k21ψe(ψ˙1k(s)eyvk(s)cosψe)
V ˙ = 0 \dot V=0 V˙=0,得临界控制率 ψ ˙ ∗ \dot \psi^* ψ˙表达式如下:
ψ ˙ ∗ = v ⋅ k ( s ) ⋅ cos ⁡ ( ψ e ) 1 − k ( s ) ⋅ e y − k 2 ⋅ v ⋅ e y sin ⁡ ( ψ e ) ψ e \begin{aligned} \dot \psi^* = \frac{v \cdot k(s) \cdot \cos(\psi_e)}{1 - k(s) \cdot e_y} -\frac{k_2 \cdot v \cdot e_y \sin(\psi _e)}{\psi _e} \end{aligned} ψ˙=1k(s)eyvk(s)cos(ψe)ψek2veysin(ψe)

为满足李亚普洛夫稳定判据第2条,设置一个调节函数 g ( e y , ψ e , t ) = k ψ ∣ v ∣ > 0 g(e_y,\psi_e,t)=k_{\psi} |v|>0 g(ey,ψe,t)=kψv>0,可以得出基于航向角变化率的控制命令:
ψ ˙ = ψ ˙ ∗ − k ψ ⋅ ∣ v ∣ ⋅ ψ e \begin{aligned} \dot \psi = \dot \psi^* - k_{\psi} \cdot |v| \cdot \psi_e \end{aligned} ψ˙=ψ˙kψvψe
将上式带入 V ˙ \dot V V˙的表达式可得:
V ˙ = k ψ k 2 ⋅ ∣ v ∣ ⋅ ψ e 2 ≤ 0 \begin{aligned} \dot V =\frac{k_{\psi}}{k_2} \cdot |v| \cdot \psi_e^2 \le 0 \end{aligned} V˙=k2kψvψe20
所以设计的控制率满足稳定性条件。

根据车辆几何关系:
tan ⁡ δ f = L R \begin{aligned} \tan{\delta _{f}} = \frac{L}{R} \end{aligned} tanδf=RL
车辆航向变化率、车速、转弯半径的关系为 ψ ˙ = V R \dot \psi = \frac{V}{R} ψ˙=RV,结合上式可得车辆前轮转角为:
δ f = arctan ⁡ ψ ˙ ⋅ L v \begin{aligned} \delta _{f} =\arctan \frac{\dot \psi \cdot L}{v} \end{aligned} δf=arctanvψ˙L
其中:
ψ ˙ = v ⋅ k ( s ) ⋅ cos ⁡ ( ψ e ) 1 − k ( s ) ⋅ e y − k 2 ⋅ v ⋅ e y sin ⁡ ( ψ e ) ψ e − k ψ ⋅ ∣ v ∣ ⋅ ψ e \begin{aligned} \dot \psi = \frac{v \cdot k(s) \cdot \cos(\psi_e)}{1 - k(s) \cdot e_y} -\frac{k_2 \cdot v \cdot e_y \sin(\psi _e)}{\psi _e} - k_{\psi} \cdot |v| \cdot \psi_e \end{aligned} ψ˙=1k(s)eyvk(s)cos(ψe)ψek2veysin(ψe)kψvψe


参考文献

1、自动驾驶决策规划控制
2、控制算法

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐