赞
踩
项目的阿克曼小车,在接近终点时如果角度有偏差,或者途中需要做大角度的调整(主要涉及到倒车的情况)时的行动总是不理想。所以,现在开始从控制器算法入手尝试去优化。本文会沿着从算法原理-源码理解-分析调整-最终改进的道路,记录项目的进程,欢迎留言指正和讨论。
为便于理解,本文从PP( Pure Pursuit)算法开始,参见附件第二篇(Implementation of the Pure Pursuit Path Tracking Algorithm)
显然基于前述特性,需要找到一种方法,使得前瞻距离能与路径的弯曲程度匹配。
可论文提出(过程原文有,在此不赘述):可以从前瞻距离得到旋转半径,但没法反过来从路径的曲率半径得到确定的前瞻距离。所以给出结论是:用路径的曲率半径的1-2倍作为前瞻距离都是合理的。(这是1992年论文,再看看后面吧)
算法没有考虑小车或者执行器的能力属性,只是假定它能理想的响应到要求的曲线。这会导致两个问题:
1) 在高速的情况下可能会发出急转弯的控制要求,会导致小车尾部打滑(漂移?)
2)小车没有期望的那么快靠近路径,因为会有转向的一阶滞后
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。