ROS : Navigation - move_base 功能包源码分析

本文深入剖析了ROS中的move_base功能包,详细介绍了其整体框架、输入输出机制及各核心函数的作用。move_base作为2D移动机器人导航的核心,通过全局路径规划、局部路径规划和恢复机制实现自主导航。

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

move_base 的整体框架

move_base 是一个开源 2D 移动机器人导航包,实现机器人自主导航到给定目标点的功能。 move_base 提供配置、运行以及跟导航栈交互的接口,基本框架如下图所示,其核心包含了 3 大功能模块,并以插件的形式加载到 move_base 中:

move_base 框架

用户可以自定义任意的全局路径规划器、局部路径规划器,只需要将其跟 nav_core::BaseGlobalPlannernav_core::BaseLocalPlanner 接口对接上即可。这两个接口的实现在 nav_core 包

move_base 的输入输出

move_base 的 输入是一个 goal (geometry_msgs/PoseStamped)输出是一系列 command (geometry_msgs/Twist) 。详细一点来说,就是在已知环境地图和机器人在地图中位置的情况下,利用地图和传感器数据处理得到的 global costmap 和 local costmap ,调用全局路径规划器得到一条全局路径,调用局部路径规划器使机器人在移动过程中能在大致沿着路径前进并动态规避障碍物,整个行进过程中还要处理一部分异常情况即 recovery_behaviors 。

move_base 功能包中的话题和服务

move_base 通过订阅 /move_base_simple/goal 或者 /move_base/goal 话题消息接收目标点。发布一个目标点的两种方式示例如下:

root@eln-pc:~/catkin_ws# rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped "
header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: "map"
pose:
  position:
    x: 2.0
    y: -1.0
    z: 0.0
  orientation:
    x: 0.0
    y: 0.0
    z: 0.471599513115
    w: 0.881812848188
"
root@eln-pc:~/catkin_ws# rostopic pub /move_base/goal move_base_msgs/MoveBaseActionGoal "
header:
  seq: 0
  stamp:
    secs: 0
    nsecs: 0
  frame_id: ''
goal_id:
  stamp:
    secs: 0
    nsecs: 0
  id: ''
goal:
  target_pose:
    header:
      seq: 0
      stamp:
        secs: 0
        nsecs: 0
      frame_id: "map"
    pose:
      position:
        x: 2.0
        y: -1.0
        z: 0.0
      orientation:
        x: 0.0
        y: 0.0
        z: 0.474801462745
        w: 0.880092933147
"

move_base 中各函数的主要作用

  • MoveBase :构造函数
  • goalCB :将 goal 转换为 move_base_msgs::MoveBaseActionGoal 类型
  • clearCostmapWindows :清空机器人周围的正方形空间
  • clearCostmapsService :将 costmap 重置为 unknow
  • planService :服务 make_plan 的回调函数。接受 Service 的消息后,开始路径规划,得到 global_plan 的路径,跟 as_ 得到的 action 一样,都会 make_plan ,但是不做局部路径规划(只是提供了个全局路径规划的接口)
  • ~MoveBase :析构函数
  • makePlan :获取机器人的位姿作为起点,然后调用全局规划器的 makePlan 返回规划路径,存储在 planner_plan_
  • publishZeroVelocity :发布速度为 0 的 cmd_vel
  • isQuaternionValid :验证是否是四元数
  • goalToGlobalFrame :将 goal 转化为 geometry_msgs::PoseStamped 格式的 goal_pose_msg
  • wakePlanner :通过 boost thread 的条件变量 planner_cond_ 唤醒线程 planThread
  • planThread :是全局路径规划的线程,调用全局路径规划获取路径,同时保证规划的周期性以及规划超时清除 goal
  • executeCb :是 move_base 接收到新目标时调用的函数,执行局部路径规划和导航
  • distance :计算 p1 和 p2 两个点之间的距离
  • executeCycle :是局部路径规划的核心函数
  • loadRecoveryBehaviors :加载 Recovery 的行为
  • loadDefaultRecoveryBehaviors :加载默认的 Behaviors
  • resetState

move_base 中各函数

<think>好的,我现在需要帮助用户下载和安装ROS中的move_base功能。首先,我得确认用户使用的是ROS1还是ROS2,因为move_baseROS2中被nav2替代了。用户之前的问题是关于导航避障路径规划的功能,之前我介绍了navigationnavigation2的区别,但这次他们明确提到move_base,这可能意味着他们使用的是ROS1。 接下来,我应该检查用户提供的系统信息,但用户没有提到具体版本。需要提示用户确认他们的ROS发行版,比如Noetic、Melodic等,或者ROS2的版本。不过根据常见的用例,假设用户可能在使用ROS1,比如Noetic。 然后,安装move_base通常通过apt-get安装ros-<distro>-navigation,因为move_basenavigation的一部分。需要给出具体的安装命令,例如对于Noetic是sudo apt-get install ros-noetic-navigation。同时,可能需要安装依赖项,比如teb_local_planner或其他规划器,但用户可能只需要基础安装步骤。 另外,用户可能需要源码安装的情况,比如需要修改或调试功能。这时候需要指导如何从GitHub克隆仓库并编译。例如,导航到工作空间的src目录,克隆navigation和teb_local_planner的仓库,然后catkin_make。 还要考虑安装后的测试,比如运行turtlebot3的示例启动文件,并提醒用户可能需要安装相关模拟,比如turtlebot3_navigation。同时,注意事项如硬件兼容性、传感器驱动安装和参数配置也是需要提及的,但用户当前的问题主要是下载,所以可能放在后面作为补充。 最后,需要确认用户是否遇到常见问题,比如依赖缺失,这时候rosdep的使用就很重要。总结步骤,确保用户能一步步完成安装,并验证是否成功。</think>--- ### **`move_base` 功能安装指南** --- #### **一、确认ROS版本** `move_base` 是 **ROS1** 的核心导航功能ROS2 中由 `nav2` 替代)。 - 常见ROS1发行版: - **Noetic** (Ubuntu 20.04) - **Melodic** (Ubuntu 18.04) - **Kinetic** (Ubuntu 16.04) --- #### **二、安装步骤** ##### **1. 通过APT安装(推荐)** ```bash # 根据ROS版本替换<distro>,例如noetic、melodic sudo apt-get install ros-<distro>-navigation ``` - 此命令会自动安装 `move_base` 及其依赖(括`costmap_2d`, `global_planner`等)。 ##### **2. 源码安装(自定义修改时使用)** ```bash # 进入ROS工作空间 cd ~/catkin_ws/src # 克隆navigation源码(move_base) git clone https://github.com/ros-planning/navigation.git # 返回工作空间根目录并编译 cd ~/catkin_ws catkin_make ``` --- #### **三、验证安装** 1. **检查功能是否存在**: ```bash rospack find move_base ``` - 若输出路径(如`/opt/ros/noetic/share/move_base`),则安装成功。 2. **运行示例测试**: ```bash # 需提前安装TurtleBot3模拟 sudo apt-get install ros-<distro>-turtlebot3-navigation # 启动Gazebo仿真环境 roslaunch turtlebot3_gazebo turtlebot3_world.launch # 启动move_base导航 roslaunch turtlebot3_navigation turtlebot3_navigation.launch ``` --- #### **四、关键配置文件** `move_base` 需要以下参数文件(通常存放在 `config` 目录): 1. **`costmap_common_params.yaml`**:定义障碍物层、膨胀层等通用参数。 2. **`global_costmap_params.yaml`**:全局代价地图配置。 3. **`local_costmap_params.yaml`**:局部代价地图配置。 4. **`base_local_planner_params.yaml`**:局部规划器参数(如TEB或DWA)。 --- #### **五、常见问题** 1. **依赖缺失**: ```bash # 使用rosdep自动安装依赖 rosdep install --from-paths src --ignore-src -r -y ``` 2. **传感器数据未连接**: - 确保激光雷达(`/scan` 话题)或深度相机(`/depth/image`)数据已正确发布。 3. **规划失败**: - 检查代价地图是否被障碍物完全覆盖(可通过Rviz查看)。 - 调整 `planner_frequency` 或降低机器人最大速度。 --- #### **六、扩展功能** - **自定义规划器**: - 替换 `base_local_planner` 为 `teb_local_planner`: ```bash sudo apt-get install ros-<distro>-teb-local-planner ``` - **多机器人协同**: - 使用 `namespace` 隔离不同机器人的 `move_base` 节点。 --- 若需进一步调试代码,建议参考官方文档:[http://wiki.ros.org/move_base](http://wiki.ros.org/move_base)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值