节点
这个包提供了move_base ROS 节点,它是导航堆栈的主要组件。此节点及其配置选项的详细说明见下文。
移动基地
所述move_base节点提供用于配置,运行和与交互的ROS界面导航堆栈上的机器人。move_base 节点及其与其他组件的交互的高级视图如上所示。蓝色因机器人平台而异,灰色为可选但所有系统都提供,白色节点是必需的但也提供给所有系统。有关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 文档。
行动订阅主题
move_base/goal ( move_base_msgs/MoveBaseActionGoal )
- move_base在世界上追求的目标。
move_base/cancel ( actionlib_msgs/GoalID )
- 取消特定目标的请求。
行动已发表主题
move_base/feedback ( move_base_msgs/MoveBaseActionFeedback )
- 反馈包含基地在世界中的当前位置。
move_base/status ( actionlib_msgs/GoalStatusArray )
- 提供有关发送到move_base操作的目标的状态信息。
move_base/result ( move_base_msgs/MoveBaseActionResult )
- move_base操作的结果为空。
订阅的主题
move_base_simple/目标(geometry_msgs/PoseStamped)
- 为不关心跟踪其目标执行状态的用户提供了一个非动作接口 move_base。
发表的主题
cmd_vel ( geometry_msgs/Twist )
- 由移动基地执行的速度命令流。
服务
~make_plan ( nav_msgs/GetPlan )
- 允许外部用户从move_base请求给定姿势的计划,而不会导致move_base执行该计划。
~clear_unknown_space ( std_srvs/Empty )
- 允许外部用户告诉 move_base 清除机器人周围区域中的未知空间。当 move_base 的成本图停止很长时间,然后在环境中的新位置再次启动时,这很有用。-可用于 1.1.0-groovy 的版本
~clear_costmaps ( std_srvs/Empty )
- 允许外部用户告诉 move_base 清除 move_base 使用的成本图中的障碍。这可能会导致机器人撞到东西,应谨慎使用。- 1.3.1 中的新功能
参数
~base_global_planner ( string , default: "navfn/NavfnROS" For 1.1+ series )
- 全局规划器与move_base一起使用的插件的名称,有关插件的更多详细信息,请参阅pluginlib文档。这个插件必须遵守在nav_core包中指定的nav_core::BaseGlobalPlanner接口。( 1.0 系列默认: "NavfnROS" )
~base_local_planner ( string , default: "base_local_planner/TrajectoryPlannerROS" 对于 1.1+ 系列)
- 本地规划器与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}]系列)
- 与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 , 默认值: 20.0)
- 运行控制回路并向基座发送速度命令的频率(以 Hz 为单位)。
~planner_patience ( double , 默认值: 5.0)
- 在执行空间清理操作之前,计划程序将等待多长时间(以秒为单位)以尝试找到有效计划。
~controller_patience ( double , 默认值: 15.0)
- 在执行空间清理操作之前,控制器将等待多长时间(以秒为单位)而没有收到有效的控制。
~conservative_reset_dist ( double , 默认值: 3.0)
~recovery_behavior_enabled ( bool , 默认: true )
- 是否启用move_base恢复行为以尝试清除空间。
~clearing_rotation_allowed ( bool , 默认值: true )
- 确定机器人在尝试清理空间时是否会尝试原地旋转。注意:此参数仅在使用默认恢复行为时使用,这意味着用户尚未将recovery_behaviors参数设置为任何自定义。
~shutdown_costmaps ( bool , 默认: false )
- 决定当move_base处于非活动状态时是否关闭节点的costmaps
~oscillation_timeout ( double , 默认值: 0.0)
- 在执行恢复行为之前允许振荡多长时间(以秒为单位)。值 0.0 对应于无限超时。导航 1.3.1 中的新功能
~oscillation_distance ( double , 默认值: 0.5)
- 机器人必须移动多远才能被视为不振荡。移动到这里会将计时器重置到~oscillation_timeout 导航 1.3.1 中的新功能
~planner_frequency ( double , 默认值: 0.0)
- 运行全局规划循环的速率(以 Hz 为单位)。如果频率设置为 0.0,则全局规划器仅在收到新目标或本地规划器报告其路径被阻塞时才会运行。导航 1.6.0 中的新功能
~max_planning_retries ( int32_t,默认值:-1)
- 在执行恢复行为之前允许计划重试的次数。-1.0 的值对应于无限重试。