控制器算法学习1-RPP受控纯追踪算法

1 引入

项目的阿克曼小车,在接近终点时如果角度有偏差,或者途中需要做大角度的调整(主要涉及到倒车的情况)时的行动总是不理想。所以,现在开始从控制器算法入手尝试去优化。本文会沿着从算法原理-源码理解-分析调整-最终改进的道路,记录项目的进程,欢迎留言指正和讨论。

2 PP( Pure Pursuit)算法

2.1 算法原理

为便于理解,本文从PP( Pure Pursuit)算法开始,参见附件第二篇(Implementation of the Pure Pursuit Path Tracking Algorithm)
在这里插入图片描述

  • 2.1.1 基本思路:
    如上图,以机器人为中心 ( P r ) (P_{r}) Pr,画一个圆(半径L可以是固定,也可以根据速度调整),圆与规划的路径交点为前瞻(lookahead)点 P l P_{l} Pl,控制器以机器人当前点与前瞻点的连线,作为目标运动命令(线速度+角速度)的计算和发布,驱动机器人始终追踪规划好的路径。
  • 2.1.2 计算:
    在这里插入图片描述
    阿克曼车(前轮转向)小车的运动计算中心在后轮轴上,要从当前位置运动到前瞻点位置,需要计算的是旋转半径 r r r(这里后面会根据阿克曼的结构写详细些 — Nav2导航中的阿克曼计算),如以小车后轮中心为原点,前瞻点的坐标变换为(x,y),从上图可以得到:
    在这里插入图片描述
    • 公式2.1是因为前瞻点到小车位置的距离是 l l l,而得到的。
    • 公式2.2 指出要计算小车原点到旋转中心的距离 r r r,还需要再求出 d d d。而 d d d的计算,可以按下面步骤:
      在这里插入图片描述
      可见控制小车运动的曲率(旋转半径的倒数),与前瞻与点当前位置的X偏差有关,注意这个X是指小车坐标系的X方向,不是地图的X方向。
  • 2.1.3 算法流程
    • 确定小车当前坐标.
    • 找到规划的路径中距离小车最近的点. (后面将从这点开始沿着路径找到第一个目标点,避免向后找,搞错方向)
    • 找到目标点(前瞻点) 。(从前面那个点沿着路径往后找到第一个距离小车当前位置大于等于前瞻距离l的路径点)
    • 将目标点的坐标转换到小车坐标系
    • 计算曲率和发送命令让小车方向对准该曲率
    • 更新小车坐标

2.2 算法特性

  • 改变前瞻距离的影响
    在要考虑两种不同的情况:
    (1) 重新获取路径:小车距离路径太远,需要重新获取路径
    (2) 保持路径:小车基本就在路径上,希望继续保持原规划路径。
    在这里插入图片描述
    在第(1)种情况下,前瞻距离大可以使得小车更为平顺的汇入路径,减少反复的振荡调整(如上图)。
    第(2)种情况下,前瞻距离越大,路径上的弯曲就越少能被追踪到。如果小车到目标点之间特别弯曲,没法用一个圆弧完成连接,就会导致错误的驱动。

2.3算法优化方向

显然基于前述特性,需要找到一种方法,使得前瞻距离能与路径的弯曲程度匹配。
可论文提出(过程原文有,在此不赘述):可以从前瞻距离得到旋转半径,但没法反过来从路径的曲率半径得到确定的前瞻距离。所以给出结论是:用路径的曲率半径的1-2倍作为前瞻距离都是合理的。(这是1992年论文,再看看后面吧)

2.4 算法的问题

算法没有考虑小车或者执行器的能力属性,只是假定它能理想的响应到要求的曲线。这会导致两个问题:
1) 在高速的情况下可能会发出急转弯的控制要求,会导致小车尾部打滑(漂移?)
2)小车没有期望的那么快靠近路径,因为会有转向的一阶滞后

2.5 算法变体

  • Adaptive Pure Pursuit (APP):MIT提出依照平移速度按比例改变前瞻距离 L t L_{t} Lt
    在这里插入图片描述
    v t v_{t} vt是速度, l t l_{t} lt是系数(反映预期以当前速度运动到前瞻点的时间)。

3 RPP受控纯追踪算法

Nav2官网RPP区(https://navigation.ros.org/configuration/packages/configuring-regulated-pp.html)的算法原理论文是:Regulated Pure Pursuit for Robot Path Tracking(参见本文附件)。

  • 论文说RPP会在剧烈转弯或者受限区域降低速度。(根据2.5的公式,降低速度会缩小前瞻距离)。

  • 第一阶段,RPP算法会把路径点转换到机器人基准坐标下,并进行裁剪。这么做,确定路径的曲率就简化为简单的几何公式:
    在这里插入图片描述
    (与2.1.2最后一个公式一样,只是用的字母不同)
    在转换之前要把路径中当前位置之前的所有点删掉,避免过时的路径点的转换计算量。转换后的路径中也要删除掉距离比前瞻距离大得多的点,这些点太远了在当前时刻不用考虑,但这些远处的路径点会存储起来,用作机器人沿着路径行进到后面的迭代计算,直到接受到新的路径。

  • 下一步,RPP会用与APP一样的方法,如2.5的公式那样,前瞻距离 L t L_{t} Lt与速度成比例,这样在速度有较大范围变化的情况下,可以增加稳定性。前瞻距离 L t L_{t} Lt用来选择前瞻点 P l P_{l} Pl。在路径点稀疏的情况下增加插值算法,可以明显提高平滑性,但在一些(使用分辨率0.025m - 0.1 m栅格地图的)服务或者工业机器人没啥显著效果,分辨率 (0.1 - 1.0m)的稀疏路径点就有效果了。

  • 通过曲率和接近试探法来计算期望的线速度,最终会取两种方法的最大值(为什么是最大值?

    • 曲率试探法(curvature heuristic 曲率启发法,曲率推导法?whatever)目的是在有剧烈转弯的地方把速度降下来。
      在这里插入图片描述
      从上式可知,控制速度 v t ′ v_{t}' vt有个最小值,就是最小速度 v t v_{t} vt。即曲率 κ \kappa κ大于某个设定值后,速度降低到一定值,不再继续下降了。
      而在路径平缓,即曲率 κ \kappa κ变小的时候,速度需要比例提升,其中 r m i n r_{min} rmin是最小转弯半径。所以,在最小转弯半径的地方,曲率 κ \kappa κ就等于最小转弯半径的倒数&#x

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
matlab最优化程序包括:无约束一维极值问题、进退法、黄金分割法、斐波那契法、牛顿法基本牛顿法、全局牛顿法、割线法、抛物线法、三次插值法、可接受搜索法、Goidstein法、Wolfe Powell法、单形搜索法、Powell法、最速下降法、共轭梯度法、牛顿法、修正牛顿法、拟牛顿法、信赖域法、显式最速下降法、Rosen梯度投影法、罚函数法、外点罚函数法、內点罚函数法、混合罚函数法、乘子法、G-N法、修正G-N法、L-M法、线性规划、单形法、修正单形法、大M法、变量有界单形法、整数规划、割平面法、分支定界法、0-1规划、二次规划、拉格朗曰法、起作用集算法、路径跟踪法、粒子群优化算法、基本粒子群算法、带压缩因子的粒子群算法、权重改进的粒子群算法、线性递减权重法、自适应权重法、随机权重法、变学习因子的粒子群算法、同步变化的学习因子、异步变化的学习因子、二阶粒子群算法、二阶振荡粒子群算法 (matlab optimization process includes Non-binding one-dimensional extremum problems Advance and retreat method Golden Section Fibonacci method of basic Newton s method Newton s method Newton s Law of the global secant method parabola method acceptable to the three interpolation search method Goidstein France Wolfe.Powell France Simplex search method Powell steepest descent method Conjugate gradient method Newton s method Newton s method to amend Quasi-Newton Method trust region method explicitly steepest descent method, Rosen gradient projection method Penalty function method outside the penalty function method within the penalty function method Mixed penalty function multiplier method G-N was amended in G-N method L-M method Of linear programming simplex method, revised simplex method Big M method variables bounded simplex method, Cutting Plane Method integer programming branch and bound method 0-1 programming quadratic programming )

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值