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

1228
0
2020年7月22日 12时06分

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的核心,它包含了很多的插件, 这些插件用于负责一些更细微的任务:全局规划、局部规划、全局地图、局部地图、恢复行为,他们之间的关系如下图所示

 

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

 

move_base在运行过程中调用这些插件,从而实现特定的功能。

 

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

Move_base主要由两部分组成:

 

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

 

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

 

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

 

系统默认插件及实现功能如下:

 

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

 

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

 

集中答疑区

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

博主也会持续搜集有代表性的问题,在此更新处为大家统一解答

 

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

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

 

rospack find move_base

 

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

 

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

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

 

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

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

 

本文转载自CSDN,原文链接:https://blog.csdn.net/qq_33742147/article/details/105505950

发表评论

后才能评论