路径跟踪算法之PID、PP、Stanley详细理解

一、前言

今天又来补作业了!


在跟踪控制领域,PID(Proportional-Integral-Derivative, 分别为比例、积分、微分)、PP( Pure-Puresuit, 纯跟踪)、Stanley(前轮反馈控制)是三种最为常见的路径跟踪算法

下面将会以 如何使用 如何最简单理解 的角度进行说明,文章的表达方式比较随意,有稿纸书写的,也有电子记录的,也有代码片段的,终极目的是通俗易懂,希望大家都能有所收获。

二、PID算法

先看一段PID进行横向跟踪的核心代码实现:

// 计算机器人位置到参考位置的夹角
double alpha = atan2(refer_path.y-robot_state.y, refer_path.x-robot_state.x);
// 及算法机器人位置到参考位置的距离
double l_d = sqrt(pow(refer_path.x-robot_state.x,2)+pow(refer_path.y-robot_state.y,2));
// 计算机器人朝向角与参考位置的角度
double theta_e = alpha-robot_state.psi;
// 计算机器人与参考位置的y向距离偏差
double e_y = l_d*sin(theta_e);
// pid求解转向控制量
double delta_f = PID.calOutput(e_y);

///
// PID控制的实现
/**
  * kp 代表比例系数
  * ki 代表积分系数
  * kd 代表微分系数
  * sum_error 表示累计误差
  * lower 代表最小控制量
  * upper 代表最大控制量
  * pre_error 代表上一次误差
*/
double PID_controller::calOutput(double error) {
    double u = error * this->kp + this->sum_error * this->ki + (error - this->pre_error) * this->kd;
    if (u < this->lower)
        u = this->lower;
    else if (u > this->upper)
        u = this->upper;
    this->pre_error = error;
    this->sum_error = this->sum_error + error;
    return u;
}

其实PID的核心代码就只有上面一小段!

计算机器人与参考位置的y向距离偏差 可以看下面的示意图
在这里插入图片描述
如何理解PID算法呢?直接给出公式, δ ( k ) \delta \left ( k \right ) δ(k)就是下一时刻的控制量。
在这里插入图片描述
PID的三个参数如何调整呢?直接给出调节口诀
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来

下面也给出比较推荐的几篇文章:
通俗理解:https://blog.csdn.net/m0_38106923/article/details/109545445
原理理解:https://zhuanlan.zhihu.com/p/562593474
调参技巧:https://zhuanlan.zhihu.com/p/85020348

三、Pure-Puresuit 算法

以最简单的差速模型来进行分析
在这里插入图片描述
在这里插入图片描述
对于其他模型,基本原理也是一样,只是要根据对应模型去进行推导就行。
在这里插入图片描述

车辆模型具体可以参考:https://blog.csdn.net/WaiNgai1999/article/details/132062188

四、Stanley算法

Stanley基本上都用于车辆模型,核心思想是基于车辆 前轴中心点 的路径跟踪偏差量对方向盘转向控制量进行计算(pp算法是以后轴中心定义的),下面简单以车辆模型进行推导。

控制模型:
在这里插入图片描述
控制量(转向角)推导如下:
在这里插入图片描述
Stanley算法收敛性的验证:
在这里插入图片描述

五、总结

1、PP 和 Stanley 都是几何跟踪算法,其最大的区别是PP以后轮为中心,Stanley以前轮为中心;
2、PID仍然是目前运用最为广泛的跟踪算法,其计算简单,但调参需要经验;
3、PP 和 Stanley 能够较好的对未来的路径进行调控,而PID更容易出现超调现象;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值