调整指南

本指南旨在帮助用户调整其导航系统。虽然 配置指南 描述了Nav2的所有参数列表,但它不包含太多关于如何使用其中最重要的参数来调整系统的说明。本指南的目的是提供更多关于如何在首次设置之外设置系统的建议,首次设置机器人您可以在 首次机器人安装指南 找到。这里将不会涵盖所有参数 (因此,请查看感兴趣的包的配置指南),但会给出一些有用的提示和建议。 [校准@首飞]

此优化指南一个持续优化的工作。如果你有一些好的建议思路,请给我们发送信息或提PR来分享您的智慧。这是一个由Nav2用户和维护者支持的开源文档。请考虑给他们支持以便能继续发展它。 [校准@首飞]

膨胀潜在领域

许多用户和导航系统配置文件一直忽略了膨胀层的一个点。虽然你确实能够简单对墙壁膨胀一个小半径以防止防止严重的碰撞,但膨胀层的真正价值是创建了一个整张地图的持续势力场。 [校准@首飞]

一些最流行的ROS导航/Nav2调试指南,比如 请查看此文档 ,在应用了inscribed costs之后,在地图上创建一个平缓的势力场有很大的好处,但在实践中仍然很少有用户这样做。(that there's substantial benefit to creating a gentle potential field across the width of the map - after inscribed costs are applied - yet very few users do this in practice.) [校准@首飞]

这种习惯实际上导致NavFn、Theta * 和Smac规划器产生的路径有些次优。这些规划器希望有一个平滑的势力场(potential field),而不是广泛开放的0-cost空间,以便路径能穿过空间中间,也可以更好地处理附近移动的障碍物。在搜索算法遇到膨胀造成的障碍之前,它将允许搜索向自由空间加权,让规划器给障碍尽可能宽的空间。 [校准@首飞]

因此维护者建议,对于所有ROS中可用的基于代价搜索的规划器,增加膨胀层代价比例(cost scale)和半径(radius)以便给整个地图产生平滑的势力场。对于非常大的开放式空间,中间区域是0-cost区域是可以的,但对于大厅,过道和类似的区域; 请创建一个平滑的势力场以便提供最佳性能。 [校准@首飞]

机器人Footprint与半径

Nav2允许用户通过两种方式指定机器人的形状: 几何 footprint 或围绕机器人的圆的半径。在ROS (1) 中,总是指定机器人的半径近似值是非常合理的,由于全球规划算法没有使用它,并且local planners/成本图是在循环假设的情况下建立的。 [待校准@1015]

然而,Nav2,我们现在有多规划控制器算法利用全SE2足迹。如果你的机器人非圆,建议你给planners和控制器实际,几何足迹的机器人。这将允许planners和控制器计划或创建轨迹其更紧密地空间。例如,如果你有很长但紧身机器人,圆形假设不允许机器人计划空间只有点超出你的机器人,由于机器人不适合纵向。 [待校准@1016]

的运动学可行planners (e。g. Smac混合A *,Smac状态点阵) 将使用SE2足迹碰撞检查创建运动学可行计划,如果提供实际足迹。截至2021年12月所有控制器插件支持全足迹碰撞检查确保安全路径跟踪。如果你提供足迹的机器人,将用于确保轨迹有效建议你这样做。防止一些 "stuck robot" 情况可以很容易避免。 [待校准@1017]

如果你的机器人真的是圆形的,继续使用 robot_radius 参数。非圆形机器人改用半径的三个有效原因: [待校准@1018]

  • 机器人很小相对于环境 (例如遥控汽车仓库) [待校准@1019]

  • 机器人的计算能力如此有限,使用SE2足迹检查会增加太多的计算负担 (例如嵌入式微处理器) [待校准@1020]

  • 如果你计划使用完整planner (Theta*, Smac 2D-A*, NavFn),你可以继续使用圆形足迹,因为这些planners不运动学可行不会利用SE2足迹。 [校准@小鱼]

旋转到位行为

使用 旋转控制器 ,机器人将只需旋转之前开始跟踪完整路径。这允许开发人员调整控制器插件优化路径跟踪给你清洁旋转,开箱。 [待校准@1023]

这是添加由于怪癖一些现有控制器而调整控制器任务能硬质或算法并不旋转到位时完整路径 (如果欲望的特性)。结果是尴尬,口吃,或旋转行为机器人's initial and path heading's显著分歧。给控制器更好的起点开始跟踪路径调整控制器显着容易创建更直观结果作壁上观 (一个维护者的意见)。 [待校准@1024]

注意: 如果使用非完整的、运动学上可行的planner (例如Smac Hybrid-a *,Smac状态晶格),这不是必要的行为优化。这一类planner将创建考虑到机器人开始航向的计划,不需要任何旋转行为。 [待校准@1025]

这种行为最适合: [待校准@1026]

  • 可以就地旋转的机器人,如差分和全向机器人。 [待校准@1027]

  • 偏好旋转时开始跟踪新路径显著不同标题比机器人电流航向或调整控制器的任务使紧身旋转困难。 [待校准@1028]

规划器插件选择

Nav2提供了许多现成的规划插件。有关首次设置,请参见 设置导航插件 ,了解这个Nav2中算法样式的更详细分解,和 导航插件 详细说明当前可用插件列表 (可能会随着时间的推移而更新)。 [待校准@1030]

一般来说,下表良好指南规划插件不同类型机器人基地: [待校准@1031]

插件名称

支持的机器人类型

NavFn规划器 [待校准@1034]

圆形差速器,圆形全向 [待校准@1035]

Smac规划器2D [待校准@1036]

Theta星规划器 [待校准@1037]

Smac Hybrid-A*规划器 [待校准@1038]

非圆形或圆形阿克曼,非圆形或圆形腿 [待校准@1039]

Smac格子规划器 [待校准@1040]

非圆形微分,非圆形全向,任意 [待校准@1041]

如果你正在使用一个计算非常有限的非圆形机器人,可能值得评估使用一种完整的planner (例如粒子假设planner) 的好处。维护者的建议是开始使用一种更先进的适合你的平台的算法,但是如果需要的话,可以缩减planner。可行的planner的运行时间通常与它们的完整的同类相当 (或有时更快),所以不要让它们最近的性质欺骗你。 [待校准@1042]

因为计划问题是主要驱动机器人类型,表准确地总结建议用户维护者。内圆形机器人制度,选择规划算法取决于应用和理想行为。NavFn通常让广大,扫地曲线; Θ * 喜欢直线和支持他们任意角度; 和Smac 2D本质上是古典a * 算法成本感知处罚。 [待校准@1043]

备注

这些只是预设和可用插件社区。特定应用/平台,你也可以选择使用这些建立自己,意图Nav2框架。看到 编写新的规划器插件 教程详情。如果你愿意贡献这个工作社区,请提交票或联系维护者!他们也很想接到你。 [待校准@1044]

控制器插件选择 [待校准@1045]

Nav2提供了许多开箱即用的控制器插件。有关首次设置,请参见 设置导航插件 ,了解这个Nav2中算法样式的更详细分解,和 导航插件 详细说明当前可用插件列表 (可能会随着时间的推移而更新)。 [待校准@1046]

不过,一般来说,下表是可用于不同类型机器人的首选有效控制器插件的描述: [校准@小鱼]

插件名称

支持的机器人类型

任务 [待校准@1048]

DWB控制器 [校准@小鱼]

微分,全向 [校准@小鱼]

动态避障 [待校准@1051]

动态避障 [待校准@1051]

TEB控制器 [校准@小鱼]

微分,全向,阿克曼,腿 [待校准@1053]

RPP控制器 [校准@小鱼]

差速器,阿克曼,腿 [待校准@1055]

精确路径跟踪 [待校准@1056]

RPP控制器 | 微分,阿克曼腿 | 确切路径跟踪 | [待校准@1057]

上述所有控制器都可以在配置中处理圆形和任意形状的机器人。 [待校准@1058]

规范的纯追求有利于精确的路径跟随,并且通常与运动上可行的planner之一配对 (例如态晶格、混合-A * 等) 因为已知这些路径在物理约束下是可驱动的。然而,它也可以应用于差速驱动机器人,这些机器人可以轻松地旋转以匹配任何完整的路径。如果你只是想让你的机器人沿着这条路走,而不需要任何动态的障碍避免或偏差,这是你的选择。它简单而几何,并且在急转弯时在障碍物附近 * 和 * 的情况下减慢机器人的速度。 [待校准@1059]

DWB TEB都选项将跟踪路径,而且偏离路径动态障碍 (为了避免)。DWB这通过评分多轨迹一套批评者。这些轨迹也产生插件可以替换,但支持的Omni Diff机器人类型有效速度和加速度限制。这些批评插件可以选择在运行时和包含权重可能调谐创建所需的行为,如最小化路径距离,距离目标或标题,和其他行动处罚可以设计。这需要一点调整给定平台,应用,行为,但可以调整DWB做几乎任何事情。 [待校准@1060]

另一方面,TEB实现了一种基于优化的方法,为障碍物存在中的路径跟踪生成一个图求解问题。TEB非常擅长与场景中的其他移动代理一起很好地处理动态情况,但是其计算成本要高得多,这使得它在很大程度上不适合较小的计算平台机器人 (例如g.最小i3并以20hz运行)。这通常开箱即用,但要调整特定行为,您可能需要修改优化引擎参数,这些参数不像DWB那样直观或植根于物理内容中,但是有相当不错的默认值。 [待校准@1061]

最后,旋转垫片插件帮助TEB和DWB等插件 (以及其他插件) 在开始跟踪路径之前,将机器人旋转到新路径的方向。这允许你调整你的局部轨迹planner操作所需的行为,而不必担心能够在一个非常小的欧几里得距离上旋转角距的显著偏差。。一些控制器在进行严格调整以进行精确的路径跟踪时,其操作受到限制,并且不能非常干净地旋转到新的航向。其他控制器有一个'spiral out'的行为,因为他们的采样需要一些平移速度,防止它简单地旋转到位。这有助于缓解该问题,并使机器人在适当的位置非常平稳地旋转。 [待校准@1062]

备注

这些只是社区的默认和可用插件。对于特定的机器人平台/公司,您也可以选择不使用这些平台/公司,并创建自己的平台。有关更多详细信息,请参见 编写新的控制器插件 [待校准@2100] 教程。如果你愿意为社区贡献这项工作,请提交一张罚单或联系维护人员!他们很乐意收到你的来信。 [待校准@1063]

Smac规划器中的缓存障碍启发式算法 [待校准@1064]

Smac的混合-A*和州晶格规划器提供了一个选择, cache_obstacle_heuristic 。这可以用于缓存启发式算法,以便在相同目标姿势的填充之间使用,这可以显著提高planner的速度 (40-300% 取决于许多因素)。障碍启发式算法被用来引导机器人进入空间中间,尊重成本,并驱动运动学上可行的搜索沿着走廊走向有效的解决方案。认为它像一个2D成本感知搜索 "prime" 的planner哪里它应该去当需要花费更多的努力完全可行搜索/SE2碰撞检查。 [待校准@1065]

这是有用加快性能达到更好重新速度。然而,如果缓存这种启发式,不会更新最新信息costmap引导搜索。规划,planner仍然要使用最新费用信息碰撞检查,因此这不会影响安全路径 *。然而,引导搜索羽绒新阻止走廊或指南搜索对地区,可能有新动态障碍物,可以放慢如果整个解空间阻止。 [待校准@1066]

因此,建议维护者启用此只有工作在主要静态 (e。g.不多搬东西或变化,不使用活传感器更新全球costmap等) 环境规划大型空间奇异目标。目标更改Nav2,启发式将更新最新信息,所以不是很如果更改目标经常。 [待校准@1067]

我们希望提供的其他页面

如果你愿意加入,一些想法在https://github.com/ros-planning/navigation.ros.org/issues/204,但我们愿意接受任何你认为有见地的东西。 [待校准@1089]