基于几何模型的控制方法Pure Pursuit方法和Stanley方法
Pure Pursuit方法(纯跟踪方法)
![](https://img-blog.csdnimg.cn/img_convert/1dc5308373855533893626cabaa65520.png)
纯跟踪方法的思想就是在参考轨迹上找一个点
P
r
=
(
x
r
,
y
r
)
P_r=(x_r, y_r)
Pr=(xr,yr),通过调整前轮转向角
δ
f
\delta_f
δf让车辆后轴中心通过画圆弧轨迹能够经过点
P
r
P_r
Pr。下面是纯跟踪方法前轮转向角的计算过程:
{
δ
f
=
arctan
(
L
R
)
R
=
l
d
2
sin
α
α
=
arctan
(
y
r
−
y
h
x
r
−
x
h
)
−
ψ
\left\{ \begin{aligned} &\delta_f = \arctan(\frac{L}{R})\\ &R = \frac{l_d}{2\sin\alpha}\\ &\alpha = \arctan(\frac{y_r - y_h}{x_r - x_h}) - \psi \end{aligned} \right.
⎩
⎨
⎧δf=arctan(RL)R=2sinαldα=arctan(xr−xhyr−yh)−ψ
式中,
δ
f
\delta_f
δf表示前轮转向角,为车辆模型的输入,
L
L
L表示车辆的轴距,
R
R
R表示以后轴中心的转弯半径,
l
d
l_d
ld表示春跟踪方法的预瞄距离,
α
\alpha
α表示车辆坐标系下预瞄点的朝向角,
P
r
=
(
x
r
,
y
r
)
P_r = (x_r, y_r)
Pr=(xr,yr)和
P
h
=
(
x
h
,
y
h
)
P_h = (x_h, y_h)
Ph=(xh,yh)分别表示参考轨迹上的预瞄点和主车位置点。(实际中参考轨迹上预瞄点到主车位置不一定恰好等于预瞄距离
l
d
l_d
ld,需要找匹配点进行插值)
纯跟踪方法推导比较直观,根据图中的几何关系可以推导,可以参考运动学模型的推导用两次正弦定理就可以得到前轮转向角 δ f \delta_f δf与各已知量之间的关系。此外,纯跟踪方法控制的是车辆后轴中心,因此可以直接套用以后轴中心为原点的车辆模型。
Stanley方法
![](https://img-blog.csdnimg.cn/img_convert/a0e1598cd7e1b51b9d0c8619581db648.png)
Stanley方法的思想像是两个纯P控制器的组合,一个用于控制航向误差,一个用于控制位置误差,找到参考轨迹上离主车位置
P
h
=
(
x
h
,
y
h
)
P_h=(x_h, y_h)
Ph=(xh,yh)最近的匹配点
P
r
=
(
x
r
,
y
r
)
P_r=(x_r, y_r)
Pr=(xr,yr),通过调整前轮转向角
δ
f
\delta_f
δf,让主车与匹配点之间的航向误差
ψ
r
−
ψ
\psi_r - \psi
ψr−ψ和位置误差
e
y
e_y
ey趋于0。
{
δ
f
=
δ
ψ
+
δ
e
δ
ψ
=
ψ
r
−
ψ
δ
e
=
arctan
(
e
y
l
d
)
e
y
=
(
x
r
−
x
h
)
2
+
(
y
r
−
y
h
)
2
l
d
=
v
k
\left\{ \begin{aligned} &\delta_f = \delta_{\psi} + \delta_e\\ &\delta_{\psi} = \psi_r - \psi\\ &\delta_e = \arctan(\frac{e_y}{l_d})\\ &e_y = \sqrt{(x_r - x_h)^2 + (y_r - y_h)^2}\\ &l_d = \frac{v}{k} \end{aligned} \right.
⎩
⎨
⎧δf=δψ+δeδψ=ψr−ψδe=arctan(ldey)ey=(xr−xh)2+(yr−yh)2ld=kv
式中,
δ
f
\delta_f
δf表示前轮转向角,为车辆模型的输入;
δ
ψ
\delta_\psi
δψ表示航向误差引起的转向角控制量;
δ
e
\delta_e
δe表示横向位置误差引起的转向角控制量;
e
y
e_y
ey表示横向位置误差;
l
d
l_d
ld表示预瞄距离,是一个自定义参数。
Stanley方法没有纯跟踪控制方法这么精确的几何模型关系,而是将航向误差 ψ r − ψ \psi_r - \psi ψr−ψ和位置误差 e y e_y ey直接体现在了前轮转向角上,所以像纯P控制。航向误差和位置误差确实与前轮转向角并无直接关系,只是这个控制方法这么定义 δ ψ \delta_{\psi} δψ和 δ e \delta_{e} δe的计算方式而已,从负反馈的角度来说总能收敛到参考线上。
Stanley控制方法不需要推导,主要是了解它的思路。此外,从图2中可以看到,Stanley方法主要是针对前轮进行控制,如果用后轴中心为原点的模型,需要把坐标转换到前轮上。
应用demo
Pure Pursuit和Stanley进行轨迹跟踪的效果如图3和图4所示。纯跟踪方法控制的是后轮,看红色的轨迹;stanley方法控制的是前轮,看绿色轨迹。程序在github仓库。
![](https://img-blog.csdnimg.cn/img_convert/8475c72dd800f61d9fb305257eb8fba4.gif)
![](https://img-blog.csdnimg.cn/img_convert/3e9c08d985950b283ce20e440f8d0462.gif)