Stanley Controller与Pure Pursuit算法类似,其同样是基于几何追踪的轨迹跟踪控制器,但是与Pure Pursuit不同的是,Stanley Controller算法基于前轮中心点为参考点进行控制,没有预瞄距离,以前轮中心点与最近参考轨迹点进行横向误差与导航角误差的计算。
Stanley 算法算法原理:
如图,前轮转角控制变量
δ
\delta
δ由两部分构成:
一部分是航向误差引起的转角,即当前车身方向与参考轨迹最近点的切线方向的夹角
θ
e
\theta_e
θe;
另一部分是横向误差引起的转角,即前轮速度方向与参考轨迹最近点的切线方向所成的夹角
δ
e
\delta_e
δe。
根据上图展示的几何关系,易得:
δ
=
θ
e
+
δ
e
\delta =\theta_e+\delta_e
δ=θe+δe
同时,
δ
e
\delta_e
δe满足:
s
i
n
δ
e
=
e
y
d
sin\delta_e = \frac{e_y}{d}
sinδe=dey
即:
δ
e
=
a
r
c
s
i
n
e
y
d
\delta_e = arcsin\frac{e_y}{d}
δe=arcsindey
假定
d
d
d是一个与车速
v
v
v正相关的函数:
d
=
v
k
d = \frac{v}{k}
d=kv
k
k
k为正系数。
因此,车辆的期望角度为:
δ
=
θ
e
+
a
r
c
s
i
n
e
y
d
=
θ
e
+
a
r
c
s
i
n
k
∗
e
y
v
\delta =\theta_e+ arcsin\frac{e_y}{d}=\theta_e+ arcsin\frac{k*e_y}{v}
δ=θe+arcsindey=θe+arcsinvk∗ey
Pure pursuit与Stanley 算法简单对比:
1、Pure pursuit 与 Stanley 两个方法都是基于对前轮转角进行控制来消除横向误差。
2、Pure Persuit算法不考虑轨迹的切线,算法只跟随轨迹点的坐标,但是Stanley算法需要实时考虑轨迹的切线方向,不仅会跟随轨迹的坐标也会跟随轨迹的朝向。
3、Pure Persuit算法的跟随性能很大程度取决于预瞄点的选取,其距离越短,控制精度越高,但可能会产生震荡;预瞄距离越长,控制效果趋于平滑,震荡减弱。实际调试只需根据上述规则以及应用需求调整预瞄系数即可。
4、Stanley由于没有预瞄点的概念,但是有一个正系数k充当了类似的作用,角度的变化率在一定程度上受k的影响,调节该参数会影响收敛速度。
参考:
《路径跟踪算法—Stanley Method实现》
《【自动驾驶】Stanley(前轮反馈)实现轨迹跟踪 | python实现 | c++实现》
《自动驾驶控制算法——纯跟踪算法(Stanley)》