admin管理员组

文章数量:1658584

ROS Navigation Tuning Guide

  • 导航调试指南
    • 准备工作
      • 距离传感器
      • 里程计
      • 定位
    • 速度与加速度的设置
      • 获得最大速度
      • 获得最大加速度
      • 设置最小值
      • XY方向的速度
    • Global Planner
      • 接口
      • 参数
    • Local Planner
      • DWA Local Planner
        • DWA algorithm
        • DWA Local Planner : Forward Simulation
        • DWA Local Planner : Trajactory Scoring
        • DWA Local Planner : Other Parameters
    • Costmap 参数
      • footprint
      • inflation
      • costmap resolution
      • obstacle layer and voxel layer
    • AMCL
      • Header in LaserScan messages
      • Parameters for measurement and motion models
      • Translation of the laser scanner
    • Recovery Behaviors
    • Dynamic Reconfigure
    • 其他
      • 代价地图
      • 局部规划器
    • 实调总结
    • 全局规划
    • 局部规划
      • TrajectoryPlannerROS
      • DWAPlannerROS
    • move_base

导航调试指南

借用前辈郑开宇基本调试指南经验,谈一谈对于配置、调参、优化这些到底应该怎么做,经验之谈.

准备工作

三个组件检查:距离传感器,里程计和定位。

距离传感器

如果机器人没有从其距离传感器(例如激光器)获取信息,那么导航将不起作用。首先确保可以在rviz中查看传感器信息,它看起来相对正确(一般判断激光点是否跟障碍物对齐),并以预期的速度在刷新。
最后确认建图导航中是否为需要的传感器数据topic以及link是否正确。

里程计

里程计是一个很不确定的因素,大部分移动机器人是有编码器的,编码器本身会有少量误差,但是加上轮子摩擦空转、地面不平、机器人驱动结构(二轮差动、四轮差动、全向轮)等因素影响,会累计出很大的误差,尤其是原地旋转,通常情况下可以加入IMU等数据进行融合重新计算里程计数据,如果使用得当,里程计误差便可以控制在很好的范围。然而,又是然而,IMU的安装位置是机械的,如何标定IMU的准确相对位置是困难的,不过通常良好的机械安装会使计算后的里程在可控范围内,所以,使用EKF等融合数据时,一定要保证IMU位置与数据的准确,否则只会让里程计信息雪上加霜。

第一个测试检查角速度是否合理。打开rviz,将坐标系设置为“odom”,显示机器人提供的激光扫描,将该主题的衰减时间设置为高(类似20秒),并执行原地旋转。然后,我看看扫描出来的边线在随后的旋转中如何相互匹配。理想情况下,每次扫描将刚好落在相互的顶端,会重叠在一起,但是有些旋转漂移是预期的,所以我只是确保扫描之间误差,不会超过一度或两度以上。

第二个测试检查线速度是否合理。机器人放置在与距离墙壁几米远地方,然后以上面相同的方式设置rviz。接着我将驱动机器人向墙壁前进,从rviz中聚合的激光扫描看看扫描出来边线的厚度。理想情况下,墙体应该看起来像一个扫描,但我只是确保它的厚度不超过几厘米。如果显示扫描边线的分散在半米以上,但有些可能是错误的测距。

其他的测试角速和线速方法:

线速标定:http://www.ncnynl/archives/201701/1217.html
角速标定:http://www.ncnynl/archives/201701/1218.html
线速标定:http://www.ncnynl/archives/201707/1812.html
角速标定:http://www.ncnynl/archives/201707/1813.html

定位

假设里程计和激光扫描仪都能合理地执行,建图和调整AMCL通常并不会太糟糕。首先,运行gmapping或者hector啥的,操控机器人来生成地图。然后使用该地图与AMCL,并确保机器人保持定位。通常是需要设置一个大概的初始位置,稍微移动机器人,就可以看到激光与障碍物对齐了。

速度与加速度的设置

最大/最小速度和加速度是移动基座的两个基本参数,正确设置对优化本地规划器行为有很大帮助.在ROS中有平动和旋转的两种速度/加速度。

加速度与速度,对于规划的影响就很神奇,不同的加速度,速度,最大最小速度,最大加速度,前进速度与转弯速度的组合,各种组合就是会有不一样的效果,想要获得好的效果只能多次尝试不同组合,对于不同的机器人效果也不近相同,还有controller的频率也会影响最后的输出速度。

获得最大速度

通常可以参考移动底盘手册,找到最大速度.还可以订阅odom话题,控制机器人运动,直线运动和原地旋转运动分别可以一个恒定值,便是最大平动速度和旋转速度,为了安全一般我们设置低于最大值.

获得最大加速度

同样可以在手册中找到.若不能再次使用里程计参数,根据机器人到达最大速度的时间,最大速度,位置或角度,可以计算出最大加速度.

设置最小值

这里的最小值我们设置为较大的负值,因为需要机器人后退,以及在任意方向旋转.注意:DWA Local Planner采用机器人最小转速的绝对值.

XY方向的速度

X方向速度为平行于机器人直线运动的方向的速度,与平动速度相同.Y方向速度为垂直于机器人直线运动方向的速度.对于非完整机器人,如两轮差速机器人,需将Y轴方向速度设置为0.

Global Planner

move_base的运行依赖于global planner和local planner.这里有三个nav core::BaseGlobal Planner 的接口: carrot planner, navfn and global planner

接口

  1. carrot planner :最简单的一个.检查到如果给定的目标是障碍物,通过沿向量向后移动机器人和目标点。最终它将这个有效的目标作为一个计划传递给本地规划师或controller。因此,此计划器不执行任何全局操作路径规划。如果你需要你的机器人接近给定的目标,这是很有帮助的。即使目标无法实现。在复杂的室内环境中却不太实际。
  2. navfn and global planner :navfn使用dijkstra的算法找到一个全局路径,该路径在起点和终点。Global Planner是一种更灵活的替代产品。有更多的选择。这些选项包括(1)A*支持(2)切换二次近似(3)切换网格路径。

参数

global planner通常是我们喜欢使用的,下面讨论一些关键参数.并非所有参数在ROS网站,这时使用rqt的参数重新配置程序,可以看到所有参数
rosrun rqt_reconfigure rqt_reconfigure

将参数 allow_unknown(true) use_dijkstra(true) use_quadratic(true) use_grid_path(false)  old_navfn_behavior(false) 设置成默认.如果需要查看potential map,将visualize potential(false)设置成true可能会很有帮助
除了这些参数外,还有三个未列出的参数实际上决定了计划全局路径的质量。成本因素、中性成本、致命成本。实际上,这些参数也出现在NAVFN中。源代码2有一段解释navfn如何计算成本值。

navfn cost value的设置:
cost = COST NEUTRAL + COST FACTOR * costmap cost value
costmap cost values的输入值在0到252之间.
在成本中性值为50的情况下,成本系数需要大约为0.8,以确保输入值在输出范围(50到253)上均匀分布。如果成本因素更高,成本值将在障碍物周围有一个高原,然后规划者将(例如)把狭窄走廊的整个宽度视为同样不可取的,因此不会规划沿着中心的路径.
实验证明。将成本系数设置为过低或过高会降低路径的质量。这些路径有不经过每边障碍物的中间,曲率相对平缓。极端中性的成本值也有同样的效果。对于致死成本,即使可行路径明显,将其设置为低值也可能导致无法生成任何路径。图5-10显示了成本因素和中性成本对全球路径规划的影响。绿线是全球规划师制定的全球路径。经过几次实验,我们发现当cost factor=0.55,neutral cost=66,lethal cost=253时,全局路径是比较理想的。

Local Planner

Local planners依赖于nav core::BaseLocalPlanner interface的接口:
dwa local planner eband local planner teb local planner
它们使用不同算法生成速度命令.我们通常选择DWA.

DWA Local Planner

DWA algorithm

dwa_local_planner采用了Dynamic Window Approach(DWA)算法
算法基本思想:

  • 在机器人控制空间(dx,dy,dta)中离散采样。
  • 对于每个采样速度,从机器人的当前状态执行正向移动模拟,以预测如果在一些(短)时间段内应用采样速度将会发生什么。
  • 从以下方面来评价正向移动模拟产生的每个轨迹:接近障碍物,接近目标,接近全局路径和速度。 放弃非法轨迹(与障碍物相撞的轨迹)。
  • 选择最高得分的轨迹,并将相关速度发送到移动基座。
  • 冲洗并重复

DWA的目标是产生一个(v,ω)对,它表示一个最适合机器人的局部状况。DWA通过搜索下一个时间间隔。这个空间的速度被限制在允许范围内,这意味着机器人必须能够在到达最近的障碍物之前停止。由这些容许速度决定的圆形轨道。而且,DWA只会考虑动态窗口中的速度,该窗口定义为在给定当前平移和旋转速度和加速度的情况下,在下一个时间间隔内可到达的一组速度对。DWA最大化了一个目标函数,这取决于:
(1)抵达目标的进度(2)障碍物空间(3)前进速度产生最佳速度对。

算法摘要:第一步是在动态窗口中的速度空间中采样速度对(v x,v y,ω)。第二步基本上是消除速度(即消除不良轨道),这是不允许的。第三步是使用OBJEC评估速度对.输出轨迹得分的动态函数。第四步和第五步很容易理解,选择当前的最佳速度选项并重新计算。

这个DWA计划依赖于提供障碍信息的本地成本图信息。因此,调整局部成本图的参数对于优化DWA Local planner的行为。接下来,我们将在正向模拟中查看参数,轨迹评分,成本地图等等。

DWA Local Planner : Forward Simulation

前向仿真是DWA算法的第二步。在这一步中,local planner在机器人的控制空间中提取速度样本,并检查这些速度样本所代表的圆形轨迹,最终消除不良速度(轨迹与障碍物相交的速度)。每一个速度样本都被模拟,就好像它被应用到机器人上一个设定的时间间隔,由模拟时间(s)参数控制。我们可以把sim_time看作是机器人以采样速度移动所允许的时间。

实验结果表明,模拟时间越长,计算量越大。另外,当仿真时间变长时,local planner的路径也会变长,这是合理的。下面是一些关于如何调整此sim_time参数的建议。

如果将sim_time设置为一个非常低的值(<=2.0),将导致性能受限,特别是当机器人需要通过狭窄的门口或家具之间的间隙时,因为没有足够的时间来获得实际通过狭窄通道的最佳轨迹。另一方面,由于有了DWA Local planner,所有的轨迹都是简单的圆弧,将sim_time设置为一个非常高的值(>=5.0)将导致不太灵活的长曲线。这个问题并不是不可避免的,因为计划员在每个时间间隔(由控制器频率(hz)控制)后都会主动重新规划,这为小的调整留出了空间。即使对于高性能计算机,4.0秒的值也应该足够。

除了sim_time之外,其他一些值得关注的参数.

速度样本和其他参数 vy_samplevy_sample决定了在x,y方向要取多少平移速度样本。vy_sample控制旋转速度样本的数量。您希望采集的样本数量取决于您拥有多少计算能力。在大多数情况下,我们倾向于将vy_sample设置为高于平动速度样本,因为转弯通常比直行更复杂。如果将max_vel_y设置为0,则无需在y方向上进行速度采样,因为没有可用的采样。我们选取vy_sample=20,vy_sample=40。

模拟粒度 sim_granularity是在轨迹上的点之间采样的步长。它基本上意味着应该检查轨迹上的点的频率(测试它们是否与任何障碍物相交)。较低的值意味着较高的频率,这需要更多的计算能力。默认值0.025通常足以满足Turtlebot大小的移动基础。

DWA Local Planner : Trajactory Scoring

如上所属,DWA Local Planner 最大化目标函数来获得最佳路径.DWA最大化了一个目标函数,取决于:
(1)抵达目标的进度(2)障碍物空间(3)前进速度产生最佳速度对。

目标函数的成本计算如下:
cost = path distance bias ∗ (distance(m) to path from the endpoint of the trajectory) +
goal distance bias ∗ (distance(m) to local goal from the endpoint of the trajectory) +
occdist scale ∗
(maximum obstacle c

本文标签: 指南navigationrosGUIDEtuning