ROS导航【01】: move_base包(导航和路径规划)

move_base – ROS Wiki

目录

一、简述

二、move_base 节点功能

三、动作 API

四、有关参数

后记:

一、简述

move_base 包提供了一个动作的实现(参见 actionlib 包),给定世界坐标上的一个目标,将尝试通过移动基点到达它。 move_base 节点将全局和局部规划器链接在一起以完成其全局导航任务。它支持任何遵循 nav_core 宝中指定的 nav_core::BaseGlobalPlanner 接口的全局规划器和任何遵循 nav_core 宝中指定的 nav_core::BaseLocalPlanner 接口的本地规划器。 move_base 节点还维护了两个代价图,一个用于全局规划器,一个用于本地规划器(参见 costmap_2d 包),用于完成导航任务。

这个包提供了 move_base ROS 节点,它是一个主要组件的导航栈。此节点及其配置选项的详细说明见下文。

ROS导航【01】: move_base包(导航和路径规划)

move_base 节点提供了一个 ROS 接口,用于配置、运行和与机器人上的导航堆栈交互。上面显示了 move_base 节点及其与其他组件交互的高级视图。绿色因机器人平台而异,黄色是可选的,但为所有系统提供,蓝色节点是必需的,但也为所有系统提供。有关 move_base 节点的配置以及整个导航堆栈的更多信息,请参阅导航设置和配置教程。

注意点1: 卡尔曼滤波后,输入move-base节点:

ROS导航【01】: move_base包(导航和路径规划)

注意点2:两篇论文不能不读。EPR103和EPR105,其链接地址是:

https://www.ros.org/reps/rep-0105.html
https://www.ros.org/reps/rep-0103.html

二、move_base 节点功能

ROS导航【01】: move_base包(导航和路径规划)

在正确配置的机器人上运行 move_base 节点(有关更多详细信息,请参阅导航堆栈文档),机器人将尝试在用户指定的公差范围内实现目标姿势。在没有动态障碍的情况下,move_base 节点最终将在其目标或向用户发出失败信号的容限范围内。当机器人认为自己被卡住时,move_base 节点可以选择执行恢复行为。默认情况下,move_base 节点将采取以下操作来尝试清理空间:

首先,用户指定区域之外的障碍物将从机器人的地图中清除。接下来,如果可能,机器人将执行就地旋转以清理空间。如果这也失败了,机器人将更积极地清除它的地图,移除它可以就地旋转的矩形区域之外的所有障碍物。随后将进行另一次就地轮换。如果这一切都失败了,机器人将认为其目标不可行,并通知用户它已中止。这些恢复行为可以使用 recovery_behaviors 参数配置,并使用 recovery_behavior_enabled 参数禁用。

三、动作 API

move_base 节点提供了 SimpleActionServer 的实现(参见 actionlib 文档),它接收包含 geometry_msgs/PoseStamped 消息的目标。您可以通过 ROS 直接与 move_base 节点通信,但如果您关心跟踪其状态,推荐的将目标发送到 move_base 的方法是使用 SimpleActionClient。请参阅 actionlib 文档以获取更多信息。

1)动作订阅主题

move_base/goal (move_base_msgs/MoveBaseActionGoal)

  • move_base 在世界范围内追求的目标。

【move_base 在世界坐标范围内追求的目标】

move_base/cancel (actionlib_msgs/GoalID)

  • 取消特定目标的请求。

【请求取消特定目标。】

2)动作发布主题

move_base/feedback (move_base_msgs/MoveBaseActionFeedback)

  • 反馈包含基地在世界上的当前位置。

【 反馈包含基地在世界上的当前位置。】

move_base/status (actionlib_msgs/GoalStatusArray)

  • 提供有关发送到 move_base 操作的目标的状态信息。

【 提供有关发送到 move_base 操作的目标的状态信息。】

move_base/result (move_base_msgs/MoveBaseActionResult)

  • move_base 操作的结果为空。

【 move_base 操作的结果为空。】

订阅的主题

move_base_simple/goal (geometry_msgs/PoseStamped)

  • 为不关心跟踪其目标执行状态的用户提供到 move_base 的非操作接口。

【 为不关心跟踪其目标执行状态的用户提供到 move_base 的非操作接口。】

Published Topics

cmd_vel (geometry_msgs/Twist)

  • 用于由移动基地执行的速度命令流。

【 用于由移动基地执行的速度命令流。】

Services

~make_plan (nav_msgs/GetPlan)

  • 允许外部用户从 move_base 请求给定姿势的计划,而不会导致 move_base 执行该计划。

【 允许外部用户从 move_base 请求给定姿势的计划,而不会导致 move_base 执行该计划。】

~clear_unknown_space (std_srvs/Empty)

  • 允许外部用户告诉 move_base 清除机器人周围区域中的未知空间。当 move_base 的成本图停止很长一段时间,然后在环境中的新位置重新启动时,这很有用。 – 可用于 1.1.0-groovy 的版本

允许外部用户告诉 move_base 清除机器人周围区域中的未知空间。当 move_base 的成本图停止很长一段时间,然后在环境中的新位置重新启动时,这很有用。 – 可用于 1.1.0-groovy 的版本

~clear_costmaps (std_srvs/Empty)

  • 允许外部用户告诉 move_base 清除 move_base 使用的成本图中的障碍。这可能会导致机器人撞到东西,应谨慎使用。 – 1.3.1 中的新功能

【 允许外部用户告诉 move_base 清除 move_base 使用的成本图中的障碍。这可能会导致机器人撞到东西,应谨慎使用。 – 1.3.1 中的新功能 】

四、有关参数

~base_global_planner(字符串,默认值:”navfn/NavfnROS”适用于 1.1+ 系列)

  • ​​​ 全局规划器与 move_base 一起使用的插件名称,有关插件的更多详细信息,请参阅插件库文档。此插件必须遵守 nav_core 包中指定的 nav_core::BaseGlobalPlanner 接口。 (1.0 系列默认:”NavfnROS”)

~base_local_planner (string, default: “base_local_planner/TrajectoryPlannerROS” For 1.1+ series)

  • 本地规划器与 move_base 一起使用的插件名称,请参阅 pluginlib 文档以获取有关插件的更多详细信息。此插件必须遵守 nav_core 包中指定的 nav_core::BaseLocalPlanner 接口。 (1.0 系列默认:”TrajectoryPlannerROS”)】

~recovery_behaviors (列表,默认值:[{name:conservative_reset,类型:clear_costmap_recovery/ClearCostmapRecovery},{name:rotate_recovery,类型:rotate_recovery/RotateRecovery},{name:aggressive_reset,类型:clear_costmap_recovery/ClearCostmapRecovery}] 对于 1.1+ 系列)

  • 与 move_base 一起使用的恢复行为插件列表,有关插件的更多详细信息,请参阅 pluginlib 文档。这些行为将在 move_base 未能按照指定的顺序找到有效计划时运行。在每个行为完成后,move_base 将尝试制定计划。如果规划成功,move_base 将继续正常运行。否则,将执行列表中的下一个恢复行为。这些插件必须遵守 nav_core 包中指定的 nav_core::RecoveryBehavior 接口。 (1.0 系列默认值:[{名称:conservative_reset,类型:ClearCostmapRecovery},{名称:rotate_recovery,类型:RotateRecovery},{名称:aggressive_reset,类型:ClearCostmapRecovery}])。注意:对于默认参数,aggressive_reset 行为将清除到 4 * ~/local_costmap/circumscribed_radius 的距离。】

~controller_frequency (double, default: 20.0)

  • 以 Hz 为单位运行控制回路并向基座发送速度命令的速率。

~planner_patience (double, default: 5.0)

  • 在执行空间清理操作之前,计划者将在几秒钟内等待多长时间以尝试找到有效计划。

~controller_patience (double, default: 15.0)

  • 在执行空间清理操作之前,控制器将等待多长时间(以秒为单位)而没有收到有效的控制。

~conservative_reset_dist (double, default: 3.0)

  • 尝试清除地图中的空间时,机器人与机器人之间的距离(以米为单位)。请注意,此参数仅在 move_base 使用默认恢复行为时使用。

~recovery_behavior_enabled (bool, default: true)

  • 是否启用 move_base 恢复行为以尝试清理空间。

~clearing_rotation_allowed (bool, default: true)

  • 确定机器人在尝试清理空间时是否会尝试就地旋转。注意:此参数仅在使用默认恢复行为时使用,这意味着用户尚未将 recovery_behaviors 参数设置为任何自定义。

~shutdown_costmaps (bool, default: false)

  • 确定当 move_base 处于非活动状态时是否关闭节点的成本图

~oscillation_timeout (double, default: 0.0)

  • 在执行恢复行为之前允许振荡的时间(以秒为单位)。值 0.0 对应于无限超时。导航 1.3.1 中的新功能 *

~oscillation_distance (double, default: 0.5)

  • 机器人必须移动多远才能被视为不摆动。移动到这里会重置计时器到 ~oscillation_timeout 导航 1.3.1 中的新功能 *

~planner_frequency (double, default: 0.0)

  • 以 Hz 为单位运行全局规划循环的速率。如果频率设置为 0.0,则全局规划器将仅在收到新目标或本地规划器报告其路径被阻塞时运行。导航 1.6.0 中的新功能 *

~max_planning_retries (int32_t, default: -1)

  • 在执行恢复行为之前允许计划重试多少次。值 -1.0 对应于无限重试。 】

后记:

本文借助于rosebase进行一次资料贯穿,其中很多值得消化的地方记录在下边,慢慢消化。

https://vimeo.com/142624091

https://en.wikipedia.org/wiki/Monte_Carlo_localization

REP 103 — Standard Units of Measure and Coordinate Conventions (ROS.org)

REP 105 — Coordinate Frames for Mobile Platforms (ROS.org)

Original: https://blog.csdn.net/gongdiwudu/article/details/124216489
Author: 无水先生
Title: ROS导航【01】: move_base包(导航和路径规划)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/717684/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球