ROS与navigation教程-move_base
ROS与navigation教程-move_base
说明:
- 简单介绍move_base包的概念
概要
move_base包为一个ation提供了实现的途径(详情参见actionlib包)。假如在地图内给定一个目标,这个操作将尝试控制一个移动基座到达这个目标。
move_base节点将全局路径和局部路径规划程序链接在一起,以完成其全局导航任务。
它支持连接符合nav_core包中指定的nav_core::BaseGlobalPlanner接口的任一全局路径规划器和符合nav_core::BaseLocalPlanner接口的任一局部路径规划器。
move_base节点还维护两个costmaps,一个用于全局路径规划器,一个用于局部路径规划器(参见costmap_2d软件包),用于完成导航任务。
代码库
注意:move_base包允许您使用导航功能包集将机器人移动到所需的位置。 如果您只想在里程计坐标系中驱动PR2机器人,您可能对此教程感兴趣:pr2_controllers/Tutorials/Using the base controller with odometry and transform information
节点
该包提供了作为导航功能包集的主要组件的move_base ROS节点。 此节点及其配置选项的详细说明如下。
move_base框图
move_base节点提供了一个ROS接口,用于配置,运行和与机器人上的导航功能包集进行交互。
move_base节点的高级视图及其与其他组件的交互如上所示。蓝色部分基于机器人平台而变化,所有平台都能提供可选择的灰色部分和不可少的白色部分。
有关move_base节点和导航功能包集配置的更多信息,请参阅 navigation setup and configuration教程。
( 1 ) move_base节点进行流程
在机器人上正确运行move_base节点(详情请看 navigation stack documentation),来让机器人尝试到达在使用者允许的误差范围内目标位置。
在没有动态障碍的情况下,move_base节点最终运行结果要么是接近了规划的目标,要么是给用户返回失败信号。
当机器人认为它是卡住了,move_base节点可以选择执行修复操作。默认情况下,move_base节点采用如下所述行动来清理出的周围空间:
首先,用户指定区域以外的障碍物将从机器人的地图中清除。如果失败,机器人会更激进的将其可以就地旋转的矩形框外面的障碍物全部移除。
紧接着下一个就地旋转操作会被继续执行。如果所有这些操作都失效,机器人会认为目标设定不恰当并通知用户放弃操作。
这些修复操作可以通过recovery_behaviors参数来配置,也可以recovery_behavior_enabled参数disable。
( 2 ) move_base action API
move_base节点实现了SimpleActionServer(请参阅actionlib文档),接收带有geometry_msgs/PoseStamped消息的目标信息。
虽然可以使用ROS直接与move_base 节点通信,但推荐使用SimpleActionClient发送目标信息与其通信,这样可以追踪目标的执行状态。
( 3 ) Action Subscribed Topics
move_base/goal ([move_base_msgs/MoveBaseActionGoal][10])
- move_base的搜索目标
move_base/cancel ([actionlib_msgs/GoalID][11])
- 取消特定目标的请求
Action Published Topics
move_base/feedback ([move_base_msgs/MoveBaseActionFeedback][12])
- 反馈含有基座当前位置信息
move_base/status ([actionlib_msgs/GoalStatusArray][13])
- 提供有关发送到move_base操作的目标的状态信息。
move_base/result ([move_base_msgs/MoveBaseActionResult][14])
- move_base操作的结果为空。
( 4 ) Subscribed Topics
move_base_simple/goal ([geometry_msgs/PoseStamped][15])
- 对于不需要追踪目标的执行状态的用户,提供一个非action接口
( 5 ) Published Topics
cmd_vel ([geometry_msgs/Twist][16])
- 移动基座执行速度命令
( 6 ) Services
~make_plan (nav_msgs/GetPlan)
- 允许用户从move_base获取给定目标的路径规划,但不会执行该路径规划。
~clear_unknown_space ([std_srvs/Empty][18])
允许用户直接清除机器人周围的未知空间。非常适合于costmap停了很长时间后,在一个全新地方重新启动时候采用。
Available in versions from 1.1.0-groovy
~clear_costmaps ([std_srvs/Empty][19])
允许用户命令move_base节点清除costmap中的障碍。
这可能会导致机器人装上物体,因此请谨慎使用。
New in 1.3.1
( 7 ) 参数
~base_global_planner (string, default: "navfn/NavfnROS" For 1.1+ series)
指定用于move_base的全局路径规划器的插件名称,该插件必须继承自此插件nav_core包中指定的nav_core::BaseGlobalPlanner 接口。(1.0 series default: "NavfnROS")
有关插件的更多详细信息,请参阅pluginlib文档。
~base_local_planner (string, default: "base_local_planner/TrajectoryPlannerROS" For 1.1+ series)
- 指定用于move_base的局部路径规划器的插件名称,该插件必须继承自此插件nav_core包中指定的nav_core::BaseGlobalPlanner 接口。(1.0 series default: "TrajectoryPlannerROS")
~recovery_behaviors (list, default: [{name: conservative_reset, type: clear_costmap_recovery/ClearCostmapRecovery}, {name: rotate_recovery, type: rotate_recovery/RotateRecovery}, {name: aggressive_reset, type: clear_costmap_recovery/ClearCostmapRecovery}] For 1.1+ series)
指定用于move_base的修复操作插件列表,当move_base不能找到有效的计划的时候,将按照这里指定的顺序执行这些操作。每个操作执行完成后,move_base都会尝试生成有效的计划。如果该计划生成成功,move_base会继续正常运行。否则,下一个修复操作启动执行。
这些修复操作插件必须继承自 nav_core::RecoveryBehavior接口。(1.0 series default: [{name: conservative_reset, type: ClearCostmapRecovery}, {name: rotate_recovery, type: RotateRecovery}, {name: aggressive_reset, type: ClearCostmapRecovery}])
注意: 对于默认参数, aggressive_reset行动将清理出一个 4 * ~/local_costmap/circumscribed_radius的范围
~controller_frequency (double, default: 20.0)
- 以Hz为单位的速率运行控制循环并向基座发送速度命令。
~planner_patience (double, default: 5.0)
在空间清理操作执行前,路径规划器等待多长时间(秒)用来找出一个有效规划。
How long the planner will wait in seconds in an attempt to find a valid plan before space-clearing operations are performed.
~controller_patience (double, default: 15.0)
在空间清理操作执行前,控制器会等待多长时间(秒)用来找出一个有效控制。
How long the controller will wait in seconds without receiving a valid control before space-clearing operations are performed.
~conservative_reset_dist (double, default: 3.0)
当在地图中清理出空间时候,距离机器人几米远的障碍将会从costmap清除。
注意:该参数仅用于move_base使用了默认参数的情况。
~recovery_behavior_enabled (bool, default: true)
- 是否启用move_base修复机制来清理出空间
~clearing_rotation_allowed (bool, default: true)
决定做清理空间操作时候,机器人是否会采用原地旋转。
注意:该参数仅用于move_base使用了默认参数的情况,这意味着用户尚未将recovery_behaviors参数设置为任何自定义形式。
Determines whether or not the robot will attempt an in-place rotation when attempting to clear out space. Note: This parameter is only used when the default recovery behaviors are in use, meaning the user has not set the recovery_behaviors parameter to anything custom.
~shutdown_costmaps (bool, default: false)
- 当move_base进入inactive状态时候,决定是否停用节点的costmap
~oscillation_timeout (double, default: 0.0)
- 执行修复操作之前,允许的震荡时间是几秒。 值0意味着永不超时。New in navigation 1.3.1
~oscillation_distance (double, default: 0.5)
- 机器人需要移动多少距离才算作没有震荡。 移动完毕后重置定时器计入参数~oscillation_timeout。 New in navigation 1.3.1
~planner_frequency (double, default: 0.0)
- 全局路径规划器loop速率。如果设置这个为0.0, 当收到新目标点或者局部路径规划器报告路径不通时候全局路径规划器才启动。New in navigation 1.6.0
~max_planning_retries (int32_t, default: -1)
( 8 ) Component APIs
move_base 节点中使用的组件基本上自己都有对应ROS APIs。
基于参数~base_global_planner, ~base_local_planner, and ~recovery_behaviors的不同设置,使用的组件可能不同。
以下是move_base用到的默认组件的链接地址:
costmap_2d costmap_2d包
nav_core nav_core::BaseGlobalPlanner和nav_core::BaseLocalPlanner接口
base_local_planner 基座局部路径规划器
navfn 全局路径规划器
clear_costmap_recovery 用于清除costmap的修复操作
rotate_recovery 旋转修复操作
参考资料:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号