ROS Navigation-----move_base简介

    move_base包采用action机制接受导航goal,然后移动机器人底座到达指定的goal。 这个过程中move_base node将同时利用局部规划器和全局规划器来完成导航任务,支持任何一种继承了nav_core包中nav_core::BaseGlobalPlanner接口的全局规划器和nav_core包中nav_core::BaseLocalPlanner接口的局部规划器。此外,该node还维护者2个代价地图,一个是用于全局规划器的全局代价地图,另一个是用于局部规划器的局部代价地图。

1 move_base框图

    move_base node提供了ROS级接口用以实现对导航功能包集的配置和运行,以及与导航功能包集的交互操作。 图中蓝色部分与特定机器人平台有关,灰色部分是可选的但已经实现了,白色部分是必须的也已经实现。


2 move_base状态机

    如果我们运行正确配置了导航功能的move_base node,机器人将会尽最大努力向用户指定的目标靠拢。在环境中没有运动障碍情况下,move_base node最终运行结果要么是接近了规划的目标,要么是给用户返回失效信号。 在向目标移动过程move_base node视是否自己进入stuck的情况决定是否指定修复行动,缺省情况下,将采用如下所述行动来清理出的周围空间:
    首选,用户指定区域外的障碍将会从地图中清除; 其次,如果可能的话机器人会执行就地旋转来清理出空间;如果失败,机器人会更激进的将其可以就地旋转的矩形框外面的障碍物全部移除。 紧接着下一个就地旋转操作会被继续执行。如果所有这些操作都失效,机器人会认为目标设定不恰当并通知用户放弃操作。 这些修复行动可以通过recovery_behaviors参数来配置,也可以recovery_behavior_enabled参数disable。

 



3 move_base action API

    move_base node实现了SimpleActionServer, 可以接收使用geometry_msgs/PoseStamped消息的goal。 虽然我们可以使用ROS可以直接与move_base node通信,但是还是推荐使用SimpleActionClient发送goal来与其通信,这样可以track goal的执行状态。

3.1 Action Subscribed Topics

move_base/goal (move_base_msgs/MoveBaseActionGoal)

  • move_base的搜索目标
move_base/cancel (actionlib_msgs/GoalID)
  • 取消特定目标的请求
3.2 Action Published Topics

move_base/feedback (move_base_msgs/MoveBaseActionFeedback)

  • Feedback含有基座当前位置信息
move_base/status (actionlib_msgs/GoalStatusArray)
  • 携带目标执行的状态信息
move_base/result (move_base_msgs/MoveBaseActionResult)

            对于move_base action的result为空

4 Subscribed Topics

move_base_simple/goal (geometry_msgs/PoseStamped)

  • 对于不需要知道goal执行状态的需求,提供的非action接口
5 Published Topics
cmd_vel (geometry_msgs/Twist)
  • 要移动底座执行的速度命令流
6 Services
~make_plan (nav_msgs/GetPlan)
  • 允许用户指定goal且在不用真正执行该goal时候,提前获知move_base给出的规划
~clear_unknown_space (std_srvs/Empty)
  • 允许用户直接清除机器人周围的unknown space。非常适合于costmap停了很长时间后,在一个全新地方重新启动时候采用。
~clear_costmaps (std_srvs/Empty)
  • 允许用户告知move_base清除costmap中的障碍。这可能会导致机器人装上物体,因此请谨慎使用。 
7 Parameters
~base_global_planner ( string, default: "navfn/NavfnROS" For 1.1+ series)
  • 指定用于move_base的全局规划器的插件名称,该插件必须继承自nav_core::BaseGlobalPlanner 接口 (1.0 series default: "NavfnROS")
~base_local_planner ( string, default: "base_local_planner/TrajectoryPlannerROS" For 1.1+ series)
  • 指定用于move_base的局部规划器的名称,该插件必须继承自nav_core::BaseLocalPlanner接口(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不能找到有效的plan时候,将按照这里指定的顺序执行这些行动。每个行动执行完成后,move_base都会尝试生成有效的plan。如果plan成功了,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)
  • 在空间清理操作执行前,留给规划器几秒时间来找出一个有效规划
~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)
  • 决定做清理空间操作时候,机器人是否会采用原地旋转。注意: Note: 该参数仅用于move_base使用了缺省参数的情况,这意味着永不不能设置自定义修复行为
~shutdown_costmaps ( bool, default: false)
  • 当move_base进入inactive状态时候,决定是否停用node的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

8 Component APIs

    move_base node中使用的组件基本上自己都有对应ROS APIs。 基于参数~base_global_planner, ~base_local_planner, and ~recovery_behaviors的不同设置,使用的组件可能不同。 以下是move_base用到的缺省组件的链接地址:

  • costmap_2d - 2D代价地图生成

  • nav_core - nav_core::BaseGlobalPlannernav_core::BaseLocalPlanner接口被 move_base使用

  • base_local_planner - 基座局部规划器

  • navfn - navfn目标规划器

  • clear_costmap_recovery - 用于清除代价地图的修复行为

  • rotate_recovery - 旋转修复行为

Class Diagram (partially & not strictly drawn) is available here.
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 介绍如何为机器人整合导航,实现有效控制和自主导航等功能 目录:  ROSnavigation 教程-目录  ROSnavigation 教程-设置机器人使用 TF  ROSnavigation 教程-基本导航调试指南  ROSnavigation 教程-安装和配置导航ROSnavigation 教程-结合 RVIZ 与导航ROSnavigation 教程-发布里程计消息  ROSnavigation 教程-发布传感器数据  ROSnavigation 教程-编写自定义全局路径规划  ROSnavigation 教程-stage 仿真  ROSnavigation 教程-示例-激光发布(C++)  ROSnavigation 教程-示例-里程发布(C++)  ROSnavigation 教程-示例-点云发布(C++)  ROSnavigation 教程-示例-机器人 TF 设置(C++)  ROSnavigation 教程-示例-导航目标设置(C++)  ROSnavigation 教程-turtlebot-整合导航简明指南  ROSnavigation 教程-turtlebot-SLAM 地图构建  ROSnavigation 教程-turtlebot-现有地图的自主导航  ROSnavigation 教程-map_server 介绍  ROSnavigation 教程-move_base 介绍  ROSnavigation 教程-move_base_msgs 介绍  ROSnavigation 教程-fake_localization 介绍  ROSnavigation 教程-voel_grid 介绍  ROSnavigation 教程-global_planner 介绍  ROSnavigation 教程-base_local_planner 介绍2  ROSnavigation 教程-carrot_planner 介绍  ROSnavigation 教程-teb_local_planner 介绍  ROSnavigation 教程-dwa_local_planner(DWA)介绍  ROSnavigation 教程-nav_core 介绍  ROSnavigation 教程-robot_pose_ekf 介绍  ROSnavigation 教程-amcl 介绍  ROSnavigation 教程-move_slow_and_clear 介绍  ROSnavigation 教程-clear_costmap_recovery 介绍  ROSnavigation 教程-rotate_recovery 介绍  ROSnavigation 教程-costmap_2d 介绍  ROSnavigation 教程-costmap_2d-range_sensor_layer 介绍  ROSnavigation 教程-costmap_2d-social_navigation_layers 介绍  ROSnavigation 教程-costmap_2d-staticmap 介绍  ROSnavigation 教程-costmap_2d-inflation 介绍  ROSnavigation 教程-obstacle 层介绍  ROSnavigation 教程-Configuring Layered Costmaps

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值