自动驾驶控制算法——纯跟踪算法(Stanley)

目前主流的轨迹跟踪方法有两类:基于几何模型的跟踪方法和基于动力学模型的跟踪方法。

基于几何模型的跟踪方法:

  • Pure Pursuit
  • Stanley

基于动力学模型的跟踪方法:

  • LQR
  • MPC

1. 算法思想

前轮反馈控制(Front wheel feedback)也就是常说的Stanley方法,其核心思想是基于车辆前轴中心点的路径跟踪偏差量对方向盘转向控制量进行计算。

Stanley方法是一种基于横向跟踪误差(前轴中心B到规划轨迹最近点C的距离)的非线性反馈函数,并且能实现横向跟踪误差收敛到0。

Alt
图中,

大地坐标系X 0 Y
车身坐标系x 0 y
全局路径下的规划轨迹path
前轮转角 δ f \delta{{}}{}_{{f}} δf
自车航向角 φ \varphi φ
轨迹航向角 φ r \varphi_r φr
预瞄距离 l d l_d ld
横向误差 e y e_y ey
轴距L
规划轨迹最近点C ( x r , y r ) \left({{x}}{}_{{r}},{{y}}{}_{{r}}\right) (xr,yr)
自车前轴中心A ( x h , y h ) \left({{x}}{}_{{h}},{{y}}{}_{{h}}\right) (xh,yh)

根据车辆位姿与规划轨迹的相对几何关系可以直观的获得前轮转角的目标值,前轮转角 δ f \delta{{}}{}_{{f}} δf由两部分构成:

  • 航向误差引起的转角 δ φ \delta{{}}{}_{{\varphi}} δφ,即规划轨迹最近点的切线方向与车身坐标系x轴的 夹角 δ φ \delta{{}}{}_{{\varphi}} δφ

    根据上图的几何关系,在不考虑横向跟踪误差(或横向误差为0)的情况下,前轮偏角和给定路径切线方向一致,所以航向误差引起的转角:
    δ φ = φ r − φ \delta{{}}{}_{{\varphi}} = \varphi_{r} -\varphi δφ=φrφ
    ​其中, φ r \varphi_{r} φr 表示规划轨迹的航向角, φ \varphi φ表示自车的航向角。

  • 横向误差引起的转角 δ e \delta{{}}{}_{{e}} δe,即规划轨迹最近点的切线方向与前轮速度方向的夹角 δ e \delta{{}}{}_{{e}} δe

    根据上图的几何关系,在不考虑航向跟踪偏差(或航向误差为0)的情况下,横向跟踪误差越大,前轮转向角越大,位置误差引起的转角:
    δ e = arctan ⁡ e y l d \delta _{e} =\arctan \frac{e_{y} }{l_{d} } δe=arctanldey
    l d l _{d} ld是人为给定的一个预瞄距离,通常认为和速度正相关:
    l d = v k l _{d} =\frac{v}{k } ld=kv
    代入,得到位置误差引起的转角:
    δ e = arctan ⁡ k e y v \delta _{e} =\arctan \frac{ke_{y} }{v } δe=arctanvkey

综上,得到Stanley算法总的前轮转角:
δ f = δ φ + δ e \delta{{}}{}_{{f}} = \delta{{}}{}_{{\varphi}} + \delta{{}}{}_{{e}} δf=δφ+δe

算法本质
使用线性自行车模型,横向误差变化率可以通过下式计算:
e y ˙ = − v sin ⁡ δ e \dot{e_{y} }=-v\sin \delta _{e} ey˙=vsinδe

横向偏差变化率:可以理解为车速在横向上的分量,正负号也就是这个速度分量的方向符号,这里正负号和车轮偏角的正负号定义相关,例如文章第一幅图中所示,车轮偏角左偏为正,因此其正弦值也为正,此时横向偏差逐步减小,因此横向偏差变化率会有负号。

其中 sin ⁡ δ e \sin \delta _{e} sinδe根据几何关系可知:
sin ⁡ δ e = e y l d 2 + e y 2 \sin \delta _{e}=\frac{e_{y} }{\sqrt{{l_{d}} ^{2} +{e_{y}}^{2} } } sinδe=ld2+ey2 ey
l d l _{d} ld带入
sin ⁡ δ e = k e y v 2 + k e y 2 \sin \delta _{e}=\frac{{k}e_{y} }{\sqrt{{v} ^{2} +{{k}e_{y}}^{2} } } sinδe=v2+key2 key
所以,得到横向误差:
e y ˙ = − k v e y v 2 + k e y 2 = − k e y 1 + ( k e y v ) 2 \dot{e_{y} }=\frac{{-kv}e_{y} }{\sqrt{{v} ^{2} +{{k}e_{y}}^{2} } } =\frac{{-k}e_{y} }{\sqrt{1 +{\left ( \frac{{k}e_{y}}{v} \right ) }^{2} } } ey˙=v2+key2 kvey=1+(vkey)2 key
当横向误差很小时,忽略二次项,上式可以近似写成:
e y ˙ ≈ − k e y \dot{e_{y} }\approx {-k}e_{y} ey˙key
对左右两边进行积分,得到横向误差的表达式:
e y ( t ) = e y ( 0 ) × e − k t e_{y}\left ( t \right ) =e_{y}\left ( 0 \right )\times e ^{-kt} ey(t)=ey(0)×ekt
可以看出,当 t ⟶ ∞ t\longrightarrow \infty t时,横向误差以指数形式收敛于 0,而参数 k k k决定了收敛速度。

2. 代码实现

3. Pure pursuit与Stanley 算法对比

  1. Pure pursuit 基于对前轮转角进行控制来消除横向误差本质是基于一个基于横向误差的P控制器。所以纯跟踪算法从原理上讲是无法消除航向误差的,而且这里的横向误差是指预瞄点的横向误差,即使横向误差为0,也无法保证自车前轴或后轴或质心处的横向误差为0;
  2. Stanley 基于对前轮转角进行控制来消除横向误差航向误差。由于是基于前轮中心进行的控制,理论上讲是可以将自车前轴中心的横向误差和航向误差都消除至0的;
  3. Pure pursuit算法的关键在于预瞄点的选取:其距离越短,控制精度越高,但可能会产生震荡;预瞄距离越长,控制效果趋于平滑,震荡减弱。实际调试只需根据上述规则以及应用需求调整预瞄系数即可。
  4. Stanley 算法的控制效果取决于控制增益,它缺少Pure pursuit算法的规律性,调试时需要花一定精力去寻找合适的控制增益值。
  • 25
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值