ROS Navigation-----move_base简介

本文详细介绍了move_base包的工作原理,包括其如何通过全局规划器和局部规划器实现机器人的路径规划和避障,以及如何通过修复行为处理无法前进的情况。文中还讲解了move_base的ROS接口及参数配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    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.
<think>嗯,用户遇到了ROS Melodic安装时无法定位ros-melodic-move-base-msgs的问题。首先,我需要回忆一下常见的解决方法。根据引用[1]到[5],都是关于类似错误的解决方案,可能括更新软件源、检查名是否正确、添加ROS仓库等步骤。 首先,用户可能没有正确配置软件源。ROS通常不在Ubuntu默认的仓库里,所以需要添加packages.ros.org的源。记得用户需要先运行sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list',然后添加密钥。如果这一步没做,就会出现找不到的错误。 其次,用户可能没有更新apt缓存。即使添加了源,如果不执行sudo apt update,系统还是不知道有新可用。所以需要提醒用户更新。 然后,确认名是否正确。move-base-msgs可能在某个特定的元里,比如ros-melodic-navigation或者ros-melodic-move-base。需要检查是否存在这个,或者是否需要安装其他含它的元。 另外,ROS的仓库是否有问题?有时候镜像源可能有问题,可以尝试切换不同的镜像源,比如清华或中科大的镜像,这样下载速度更快,也可能解决找不到的问题。 还有,用户是否安装了完整的ROS桌面版?如果没有安装ros-melodic-desktop-full,可能缺少一些依赖。安装完整版可能会含所需的。 如果以上步骤都试过还是不行,可能需要手动安装依赖,或者检查是否有拼写错误。有时候的名字可能有细微的差别,容易打错。 最后,如果所有方法都无效,可能需要查看ROS的官方文档或社区支持,看看是否有其他人遇到同样的问题,或者是否有已知的解决方案。</think>### 分步解决方案:无法定位`ros-melodic-move-base-msgs`的错误 #### 1. 验证ROS软件源配置 确保已正确添加ROS官方软件源到系统: ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' ``` 添加密钥并更新缓存: ```bash sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update # 必须执行此操作更新软件列表[^4] ``` #### 2. 检查名称和依赖 - **确认名正确性**:`move-base-msgs`可能属于导航相关,尝试安装完整导航栈: ```bash sudo apt install ros-melodic-navigation # move-base相关依赖[^2] ``` - 若仍报错,尝试直接安装基础桌面版: ```bash sudo apt install ros-melodic-desktop-full # ROS核心功能 ``` #### 3. 使用镜像源加速 若因网络问题导致无法定位,可替换国内镜像源(如清华或中科大镜像): ```bash sudo sed -i 's/packages.ros.org/mirrors.tuna.tsinghua.edu.cn\/ros\/ubuntu/g' /etc/apt/sources.list.d/ros-latest.list sudo apt update ``` #### 4. 手动构建(备用方案) 若仍无法找到,从源码构建: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/ros-planning/navigation_msgs.git # move-base-msgs定义 cd .. catkin_make source devel/setup.bash ``` #### 5. 验证系统版本兼容性 确保系统为Ubuntu 18.04,且ROS版本为Melodic: ```bash lsb_release -a # 检查系统版本 rosversion -d # 确认ROS版本 ``` --- ### 相关问题 1. **ROS Melodic安装时如何修复`E: Unable to locate package`的通用方法?** 2. **如何为ROS添加第三方软件源或自定义?** 3. **ROS导航栈(navigation stack)含哪些核心组件?** [^1]: ROS安装程序出现错误的通用解决方法 [^2]: 桌面完整版安装的重要性 [^4]: 软件源配置与更新的必要性 [^5]: 特定缺失时的替代方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值