Movebase使用小结
2020-06-09 05:10
148 查看
ROS进阶教程(四)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的核心,它包含了很多的插件, 这些插件用于负责一些更细微的任务:全局规划、局部规划、全局地图、局部地图、恢复行为,他们之间的关系如下图所示
move_base在运行过程中调用这些插件,从而实现特定的功能。
插件文件的参数配置及修改
Move_base主要由两部分组成:
- 规划器:全局规划、局部规划与行为恢复
- 代价地图:全局代价地图和局部代价地图
下图给出了默认的局部规划器与全局规划器等插件,为了实现更个性化的功能,推荐自己原创的或改进的规划器来替代相应的部分,甚至可以去掉不需要的插件,如代价地图、恢复机制等。
系统默认插件及实现功能如下:
插件文件 | 实现功能 |
---|---|
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_planner和
base_global_planner对应的参数即可生效。关于movebase的其他参数大家需要根据规划器进行修改。
博主会在之后的专题中给出我目前使用的所改进的和原创的全局规划和局部规划算法,请大家持续关注,同时大家可在该资源中获取源码包https://download.csdn.net/download/qq_33742147/12326533
集中答疑区
由于关于Movebase原理的介绍已经非常多,故博主不在此赘述。但是相信大家即使明白了Movebase的运行机制,依然会有非常多的使用问题,因此本贴在此开设集中答疑区,欢迎大家留言咨询问
博主也会持续搜集有代表性的问题,在此更新处为大家统一解答
- 为什么我的move_base找不到可以修改代码的地方?
答:首先确认
move_base是源码安装,可使用指令
rospack find move_base
查找其对应的位置,如果发现找到的结果在如
/opt/share/ros/kinetic...这样的路径说明是二进制安装,需要更改环境使其默认指向源码安装包。
- 为什么我下载的navigation里面找不到这个.yaml文件,它到底在哪个路径下面啊?
答:.yaml参数文件并不是在navigation文件中,而是在你所安装的驱动包里,如博主的参数配置文件在
/turtlebot/src/turtlebot_apps/turtlebot_navigation/param中,如果运行turtlebot3,其对应的驱动则在
/turtlebot3/turtlebot3_navigation/param中。
- 为何运行导航时经常出现如
Rotate recovery behavior started
这种字样?
答:这是movebase的旋转恢复机制,旋转恢复的产生会有三种判断机制,具体的判断和实施方法在
move_base.cpp的主循环状态控制函数
MoveBase::executeCycle中,此处不赘述。值得一提的是如果大家对自己的全局规划和局部规划算法有信心的话,即能确定机器人不会意外的运动情况,那么可以在
move_base.cpp函数中去掉旋转恢复,如果对全局规划和局部规划都还没有深入研究的话就先遵守movebase的默认机制吧。当然大家可以通过对源码研究对该机制进行优化。
博主有两年多ROS的使用经验,目前仍在不停研究中。本系列ROS及SLAM进阶教程将涵盖ROS的进阶功能使用、机器人SLAM及导航的设计及研究等领域,持续不断更新中。如果大家有相关问题或发现作者漏洞欢迎私戳,同时欢迎关注收藏。
同时欢迎关注博主Git:
https://github.com/redglassli
相关文章推荐
- 使用move_base导航 ---13
- 使用move_base进行路径规划
- GridControl控件使用小结
- move命令格式及使用
- SQL CONVERT转化函数使用方法小结
- WebView使用小结
- BaseAdapter的使用指南
- Golang线程安全Map:sync.Map使用小结
- NSSet使用小结
- 使用自定义的BaseAdapter实现LIstView的展示
- TTButton的使用小结
- 关于android中图片裁剪以及PorterDuffXfermode的使用经验小结
- JS数组的高级使用方法示例小结
- pyinstaller使用小结
- .NET Remoting Security使用小结 – TcpChannel
- LayoutInflater.inflate及View.inflate一点小结----(当使用listview,recycleView时发现也有些不同)
- Vagrant使用小结
- Spring-boot中thymeleaf模板使用小结
- move_base配置参数
- Android adapter设计模式二:使用base-adapter-helper