[ROS Navigation Tuning Guide]翻译

英文原文:https://github.com/zkytony/ROSNavigationGuide/blob/master/main.pdf

摘要

ROS导航堆栈对于移动机器人从一个地方移动到另一个地方是强大的可靠。 导航堆栈的工作是通过处理来自测距、传感器和环境图的数据来产生让机器人执行的安全路径。 最大限度地提高此导航堆栈的性能需要对参数进行一些精细的调整,这项工作并不像看起来那么简单。 如果对概念和推理了解不清楚,可能会随意尝试,这将浪费大量的时间。

目录

1 速度和加速度

2 全局路径规划

(a)全局路径规划方法选择

(b)全局路径规划参数

3 局部路径规划

(a)局部路径规划方法选择

(b)DWA局部路径规划

(i)DWA算法

(ii)DWA前向模拟器

(iii)DWA轨迹评价

(iv)其他DWA参数

4 代价地图参数

5 AMCL(导航与定位)

6 恢复行为

7 动态重新设置

8 存在的问题

1 速度和加速度

本节涉及同步驱动机器人。动力性(即速度和机器人的加速度)对于包括动态窗口方法(DWA)和定时弹性带(TEB)在内的本地规划器来说是必不可少的。 在ROS导航堆栈,本地规划器接收测距消息(“odom”主题)并输出速度命令(“cmd vel”主题)来控制机器人的运动。

最大/最小速度和加速度是移动基站的两个基本参数。正确设置它们对于最佳的本地计划行为非常有帮助。 在ROS中导航,我们需要知道平移和旋转的速度和加速度。

1.1 获得最大速度

通常可以参考你的移动基站的手册。例如,SCITOS G5的最大速度是1.4m/s。在ROS中,你可以订阅odom主题来获取当前的测距信息。 如果你可以手动控制你的机器人(如通过操纵杆),你可以尝试向前运行,直到达到恒定速度,然后输出里程计数据。

平移速度(m/s)是机器人在直线移动时的速度。它的最大值就是上边我们获得的最大值。旋转速度(rad/s)等效于角速度,它的最大值是机器人旋转到位时的速度。为了获得最大角速度,我们可以通过控制操纵杆来让机器人旋转360°,直到它的角速度达到恒定值。

为了安全起见,我们倾向于设定最大平移速度和旋转速度低于它们的实际值。

1.2 获得最大加速度

如果手册没有说明,有很多种方法可以获得移动基站的最大加速度。

在ROS中,我们可以输出带有时间戳的里程计数据,然后看机器人达到恒定的最大平移速度(ti)需要多长时间,然后使用来自里程计数据(nav msgs/Odometry message)来计算这个过程的加速度。多做几次实验求平均值。使用tt、tr分别来表征从静态到达最大平移速度和最大旋转速度的时间。最大平移加速度约等于最大平移速度除以时间tt,同样的,最大旋转加速度约等于最大旋转速度除以旋转时间tr。

1.3 设置最小值

设置最小速度的方法与上述不同。对于最小平移速度,我们将它设置为一个大的负值,因为这将可以使机器人陷入困境中时可以后退,即使大多数情况下它都是前进的。对于最小的旋转速度,如果参数允许,我们将其设置为负值,以便机器人可以在任意方向旋转。要注意,DWA本地规划器采用的是机器人最小旋转速度的绝对值。

1.4 x、y方向速度

x方向的速度是指平行于机器人直线运动方向的速度,这与移动速度相同。y方向的速度垂直于直线运动,它被称之为“冲击速度”。对于非整体机器人(如差速轮机器人),y速度应该设置为零。

2 全局路径规划

2.1 全局路径规划方法选择

为了使用导航包中的move_base节点,我们需要有全局规划器和局部规划器。在导航包中有三种全局规划器:carrot规划器、navfn规划器和global规划器。

2.1.1 carrot规划器

这是最简单的一种规划器。它检查给定的目标点是否是障碍物,如果是,则通过沿机器人和目标点的向量来选择靠近原始目标的替代目标。最终他将给局部规划器或内部控制器一个有效的目标点。因此,这种规划器没有任何全局路径规划。如果你需要机器人靠近给定的目标,即使目标不可到达的情况下,这种方法是有效的。但在复杂的室内环境中,这种方法不是很实用。

2.1.2 navfn和global规划器

navfn使用dijkstra算法来在起点和终点之间寻找最小代价路线。global规划器建立了更灵活的替代navfn的选择,这些选择包括:(1)支持A*算法,(2)切换二次近似,(3)切换 格路径。navfn和global规划器都是基于这篇论文:http://cs.stanford.edu/group/manips/publications/pdfs/Brock_1999_ICRA.pdf

2.2 全局路径规划参数

因为global规划器是一种更常使用的方法,我们来看它的一些关键参数。注意:不是所有的参数都能在ROS 页上找到,但是你可以通过运行rosrun rqt_reconfigure rqt_reconfigure来查看。

我们可以设置这些默认值:allow unknown(true), use dijkstra(true), use quadratic(true), use grid path(false), old navfn behavior(false) 。如果我们想在RVIZ中查看势力图可以将visualize_potential值由FALSE设为TRUE。

除了这些参数外, 还有三个没有列出来的参数会决定全局路径规划的性能。分别是cost_factor, neutral_cost, lethal_cost。事实上,这些参数在navfn算法中也提到了。这个开源代码详细的解释了navfn如何计算这些代价值。https://github.com/ros-planning/navigation/blob/indigo-devel/navfn/include/navfn/navfn.h

navfn代价值的计算方法如下:cost = COST_NEUTRAL + COST_FACTOR * costmap_cost_value

传入的代价值设置在0到252的范围,进一步分析:

COST_NEUTRAL为50时,COST_FACTOR需要约为0.8,从而确保输入值的分布能使输出值在50到253间变化。如果COST_FACTOR较高,cost值将会在障碍物附近有一个峰值,然后规划器将视狭窄走廊的整个宽度为较差,将不会沿着中心规划路径。

实验观察:实验也证实了这些解释。将cost_factor设置过高或过低都会降低路径质量。这些路径没有穿过每侧障碍物的中间,也没有相对光滑的曲率。极端的COST_NEUTRAL值也有类似的效果。对于关键的cost值,如果设置的过低可能会无法产生任何路径,即使可行路径是明显的。图5-10显示了COST_FACTOR和COST_NEUTRAL对全局路径规划的影响。绿色的线是全局规划器产生的全局路径。经过几次实验,我们发现当COST_FACTOR=0.55,COST_NEUTRAL=66,cost=253时,全局路径是很好的。

3 局部路径规划

局部规划器包含dwa局部规划器、eband局部规划器和teb局部规划器。它们使用不同的算法来产生速度指令。通常dwa规划器使用的较多,我们将详细讨论这种算法。其它规划器的信息稍后将会提供。

3.1 DWA本地规划器

3.1.1 DWA算法

dwa局部规划器采用动态窗口方法,ROS维基上提供了这种算法执行过程的介绍:

1.将机器人的控制空间离散化(dx,dy,dtheta)

2.对于每一个采样速度,从机器人的当前状态执行正向模拟,以预测如果在短时间段内采用采样速度将会发生什么

3.评估从正向模拟产生的每个轨迹使用包含诸如:障碍物接近度、目标接近度、全局路径接近度和速度等特征的度量,丢弃非法轨迹(与障碍物相撞的轨迹)

4.选择得分最高的轨迹,将相关联的速度发送给移动基站

5.清零然后重复以上过程

DWA算法是由Dieter Fox的论文https://www.ri.cmu.edu/pub_files/pub1/fox_dieter_1997_1/fox_dieter_1997_1.pdf 提出的。根据这篇论文的介绍,DWA算法的目的是生成一个动作对(v,w),它代表了机器人最佳的圆形轨迹。DWA通过在下一个时间间隔内搜索速度空间来达到此目的。这个空间的速度被限制为可以接受的,这意味着机器人必须能够在到达这些可接受速度所规定的圆形轨迹上的最接近的障碍物之前停止。 此外,DWA将仅考虑动态窗口内的速度,其被定义为给定当前平移和旋转速度和加速度在下一时间间隔内可到达的速度对集合。 DWA最大化目标函数,其取决于(1)到目标的进展,(2)从障碍物中清除,以及(3)前进速度以产生最佳速度对。

现在,我们来看ROS Wiki的算法总结。 第一步是在动态窗口内的速度空间中的采样速度对(vx,vy,w)。第二步是消除不可接受的速度(即消除不良轨迹)。第三步是使用目标函数来评估速度对,输出轨迹得分。 第四和第五步很容易了解:采取当前最佳速度选项并重新计算。

这个DWA规划器取决于提供障碍物信息的本地成本图。 因此,调整本地成本图的参数对于DWA本地规划的最佳行为至关重要。 接下来,我们将参考前向仿真,轨迹评分,成本地图等参数。

3.1.2 DWA本地规划器:前向模拟

前向模拟是DWA算法的第二步。在这一步中,本地规划器将机器人控制空间中的速度采样,并检查由这些速度样本表示的圆形轨迹,并最终消除不良速度(轨迹与障碍物相交)。在机器人的一段时间间隔内,每个速度样本由仿真时间控制及仿真。我们可以将模拟时间视为允许机器人以采样速度移动的时间。

通过实验,我们观察到仿真时间越长,计算负荷越大。此外,当仿真时间变长后,本地路径规划器产生路径的时间也会变长,这是合理的。这里有一些关于如何调整仿真时间参数的建议。

如何设置仿真时间:如果将仿真时间设置为非常低的值(≤2.0)将导致性能有限,特别是当机器人需要通过狭窄的门口或家具之间的间隙时,因为没有足够的时间来获得最佳轨迹来通过狭窄的通道。另一方面,由于使用了DWA本地规划器,所有的轨迹都是简单的圆弧,如果将仿真时间设置的非常高(≥5.0),将导致长曲线不是非常灵活。这个问题并不是不可避免的,因为规划器在每个时间间隔后都会积极地重新规划,可以进行小的调整。对于高性能的计算机,4.0秒的值也是足够的。

4.2 膨胀

膨胀层由代价值为0-255的单元组成。每个单元可能会被占据、无障碍或未知三种情况。下图介绍了膨胀值的计算方法。

(图13)

inflation_radius和cost_scaling_factor是决定膨胀的主要参数。inflation_radius控制零成本点距离障碍物有多远。cost_scaling_factor与单元的代价值成反比,设置高值将使衰减更陡峭。

Pronobis博士建议,最佳的代价图衰减曲线是具有相对较低斜率的曲线,以便最佳路径尽可能远离每侧的障碍物。优点是机器人可以在障碍物中间移动。如图14和图15所示,具有相同的起点和目标,当代价图曲线陡峭时,机器人往往靠近障碍物。在图14中,膨胀半径=0.55,代价比例因子=5.0;在图15中,膨胀半径=1.75,代价比例因子=2.58

例如,Hokuyo URG-04LX-UG01激光扫描仪的分辨率是0.01mm,因此扫描分辨率≤0.01的地图将需要机器人旋转几次才能清除未知的点。我们发现0.02的精度就够用了。

4.4 障碍物层和体素层

这两层负责标注代价图上的障碍,他们可以被称为障碍层。根据ROS维基,障碍物层跟踪二维的,体素层跟踪三维的。障碍物是根据机器人传感器的数据进行标记(检测)或清除(删除),其中需要订阅代价图的主题。

在ROS执行中,体素层从障碍物层继承,并且都是通过使用激光雷达发布的PointCloud或PointCloud2类型的消息来获取障碍物信息。此外,体素层需要深度传感器,如Microsoft Kinect或华硕Xtion,3D障碍物最终会被膨胀为二维代价图。

体素层如何工作:体素是空间中具有一定相对位置的3D立方体(类似于3D像素)。它可以用于与附近体积的数据或属性相关联。例如,它的位置是够是一个障碍。与体素与深度相机相关的3D重建已经有很多研究了。

体素 格是一个ROS包,它提供了一个高效的三维体素 格数据结构的实现,它存储三种状态的体素:标记、自由、未知。体素 格占据了代价地图区域内的体积。在每次更新体素边界期间,体素层根据传感器的数据来标记或去除体素 格中的一些体素。它还执行光线跟踪,接下来会讨论。请注意,在更新时,不会重新创建体素 格,而仅仅在更改本地代价图的大小时才更新。

为什么要在障碍物层或体素层光线跟踪:光线跟踪为人所知是因为用于渲染逼真的3D图形,所以可能会困惑为什么被用于处理障碍物。一个重要的原因是可以通过传感器来检测不同类型的障碍物。理论上,我们还可以知道障碍物是刚性的还是柔性的。

(图18-20)

5 AMCL

AMCL是处理机器人定位的ROS包。它是自适应蒙特卡罗定位的缩写(Adaptive Monte Carlo Localization),也被称为部分滤波定位器。这种定位方法的原理如下:每个样本存储表示机器人姿态的位置和方向数据。粒子是随机抽样的,当机器人移动时,粒子根据他们的状态记忆机器人的动作,采用递归贝叶斯估计进行重采样。

稍后将提供AMCL参数调整的更多讨论。请参考ROS维基http://wiki.ros.org/amcl了解更多信息。关于原始算法的细节,可以参考Chapter 8 of Probabilistic Robotics, by Thrun, Burgard, and Fox.

6 恢复行为

机器人导航的一个讨厌的事情就是机器人可能会卡住。幸运的是,导航堆栈具有内置的恢复行为。即使如此,有时机器人会耗尽所有可用的恢复行为后保持静止。因此,我们需要一个更强大的解决方案。

恢复行为的类型:ROS导航包有两种恢复行为,分别是清除代价地图恢复和旋转恢复。清除代价地图恢复是将本地代价地图还原成全局代价地图的状态。旋转恢复是通过旋转360°来恢复。

解救机器人:有时由于旋转故障,旋转恢复将无法执行。在这一点上,机器人可能会放弃,因为它已经尝试了所有的恢复行为。在大多数试验中,我们观察到,当机器人放弃时,实际上有很多方法可以解救机器人。为了避免放弃,我们使用SMACH来连续尝试不同的恢复行为,通过其他额外的行为,例如设置非常接近机器人的临时目标,并返回到以前访问过得姿态(即退出)。这些方法可以显著提高机器人的耐久性,并且从以前观察到的无望空间中解救出来。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年8月9日
下一篇 2017年8月9日

相关推荐