Movebase使用小结

ROS进阶教程(四)Movebase使用小结

  • Movebase的源码安装
  • Movebase结构
  • 插件文件的参数配置及修改
  • 集中答疑区

Movebase的源码安装

Movebase源码位于Navigation包中,大家可在Git官方代码包中进行安装

cd ~/catkin/src
git clone https://github.com/ros-planning/navigation.git

亦可直接

sudo apt-get install ros-kinetic-navigation

Movebase结构

ROS 提供的 move_base 包在已建立好的地图中指定目标位置和方向后, move_base 根据机器人的传感器信息控制机器人到达目标位置。它主要功能包括:结合机器人的里程计信息和定位信息,作出路径规划,输出前进速度和转向速度。目前在机器人SLAM及导航的使用中不可避免地需要使用movebase提供的安全可靠的机制。
move_base 是导航包Navigation的核心,它包含了很多的插件, 这些插件用于负责一些更细微的任务:全局规划、局部规划、全局地图、局部地图、恢复行为,他们之间的关系如下图所示
Movebase使用小结_第1张图片
move_base在运行过程中调用这些插件,从而实现特定的功能。

插件文件的参数配置及修改

Move_base主要由两部分组成:

  1. 规划器:全局规划、局部规划与行为恢复
  2. 代价地图:全局代价地图和局部代价地图

下图给出了默认的局部规划器与全局规划器等插件,为了实现更个性化的功能,推荐自己原创的或改进的规划器来替代相应的部分,甚至可以去掉不需要的插件,如代价地图、恢复机制等。
Movebase使用小结_第2张图片
系统默认插件及实现功能如下:

插件文件 实现功能
base_local_planner 实现了 Trajectory Rollout 和 DWA 两种局部规划算法
dwa_local_planner 实现了DWA局部规划算法
global_planner 实现局部规划算法,可在参数中进行选择,默认存在parrot_planner, navfn, global_planner三种规划算法可以选择
local_costmap 局部代价地图,与局部规划器配合使用
global_costmap 全局代价地图

注意:插件的参数是在yaml文件中进行配置,yaml文件位于你所运行的驱动文件包中,但插件的调用是在move_base.cpp源码中调用的,意味着yaml文件并不是必需的,你可以自己来编写自己的全局和局部规划算法,在生成节点名字后修改move_base_params.yaml文件的base_local_plannerbase_global_planner对应的参数即可生效。关于movebase的其他参数大家需要根据规划器进行修改。

博主会在之后的专题中给出我目前使用的所改进的和原创的全局规划和局部规划算法,请大家持续关注,同时大家可在该资源中获取源码包https://download.csdn.net/download/qq_33742147/12326533

集中答疑区

由于关于Movebase原理的介绍已经非常多,故博主不在此赘述。但是相信大家即使明白了Movebase的运行机制,依然会有非常多的使用问题,因此本贴在此开设集中答疑区,欢迎大家留言咨询问
博主也会持续搜集有代表性的问题,在此更新处为大家统一解答

  1. 为什么我的move_base找不到可以修改代码的地方?

答:首先确认move_base是源码安装,可使用指令

rospack find move_base

查找其对应的位置,如果发现找到的结果在如/opt/share/ros/kinetic...这样的路径说明是二进制安装,需要更改环境使其默认指向源码安装包。

  1. 为什么我下载的navigation里面找不到这个.yaml文件,它到底在哪个路径下面啊?

答:.yaml参数文件并不是在navigation文件中,而是在你所安装的驱动包里,如博主的参数配置文件在/turtlebot/src/turtlebot_apps/turtlebot_navigation/param中,如果运行turtlebot3,其对应的驱动则在/turtlebot3/turtlebot3_navigation/param中。

  1. 为何运行导航时经常出现如Rotate recovery behavior started这种字样?

答:这是movebase的旋转恢复机制,旋转恢复的产生会有三种判断机制,具体的判断和实施方法在move_base.cpp的主循环状态控制函数MoveBase::executeCycle中,此处不赘述。值得一提的是如果大家对自己的全局规划和局部规划算法有信心的话,即能确定机器人不会意外的运动情况,那么可以在move_base.cpp函数中去掉旋转恢复,如果对全局规划和局部规划都还没有深入研究的话就先遵守movebase的默认机制吧。当然大家可以通过对源码研究对该机制进行优化。

博主有两年多ROS的使用经验,目前仍在不停研究中。本系列ROS及SLAM进阶教程将涵盖ROS的进阶功能使用、机器人SLAM及导航的设计及研究等领域,持续不断更新中。如果大家有相关问题或发现作者漏洞欢迎私戳,同时欢迎关注收藏。
同时欢迎关注博主Git:
https://github.com/redglassli

你可能感兴趣的:(ROS及SLAM进阶)