ROS SLAM代码框架概述
来源:互联网 发布:网络监控机安装说明书 编辑:程序博客网 时间:2024/05/17 04:52
参考:
- http://blog.csdn.net/heyijia0327/article/details/45030929
- http://blog.csdn.net/heyijia0327/article/details/45841317
gmapping
摘自《ROS : 修改ROS源代码(overlaying package)》 http://blog.csdn.net/heyijia0327/article/details/45841317
gmapping算法实现的正宗源代码是来自开源项目openslam,ROS的开发者提供了gmapping包和openslam_gmapping包,他们作用各不相同。
- openslam_gmapping是gmapping创始者Grisetti开发的对外开放的gmapping库,里面有各种函数和接口供使用者调用。
- ROS中的gmapping包是ROS开发者调用openslam_gmapping 中的函数而完成gmapping的所有功能(包括读取数据(scan,odom),处理数据(粒子滤波,scan match 等),发布数据(map,tf关系等) ),openslam_gmapping包可以理解为opencv,gmapping包可以理解为用opencv中函数实现的一个机器视觉工程。
因此要修改真正的gmapping算法,应该去修改openslam_gmapping中的东西。当然也许你也只是想改改gmapping包而不去修改SLAM原算法,譬如将gmapping得到的最优粒子的轨迹记录到txt中等。
项目地址
- openslam_gmapping:https://github.com/rosperception/openslam_gmapping
- gmapping: https://github.com/ros-perception/slam_gmapping
navigation
http://wiki.ros.org/navigation/Tutorials
- base_global_planner 和 base_local_planner
从move_base/cfg/MoveBase.cfg可知,
base_global_planner 默认使用 navfn/NavfnROS
base_local_planner 默认使用base_local_planner/TrajectoryPlannerROS - navfn包和global_planner关系
摘自《ROS: global_planner 整体解析》http://blog.csdn.net/heyijia0327/article/details/45030929
可以将navfn包和global_planner包理解成一个并列关系,因为他们两个都是用来做全局规划的,两个包里面也都实现了A*,Dijkstra算法。
navfn的源代码里可以看到这个包默认是使用Dijkstra做全局路径规划,虽然有A*的代码,但有bug.
直到13年David Lu 才完成了这部分工作,重新发布了global_planner包,修改好的代码封装性更强,更清晰明了。因此,也可以认为global_planner是navfn的替代者
为了和以前兼容。因此可以看到源代码中两个包都在,并且move_base的那个全局变量参数默认的是navfn,也就是说没用global_planner。
那么如何使用global_planner包而不是navfn包呢?
<nodepkg="move_base" type="move_base" respawn="false"name="move_base" output="screen">
<param name="base_global_planner"value="global_planner/GlobalPlanner"/>
可是实际使用的时候(14年1月以前),却提示this planner is not registered,意思是这个包没有注册。幸好有人发现这个是bgp_plugin.xml里的bug,后来安装的ROS版本应该修复了这个问题。如果有这个错误,请按照github上的修复(https://github.com/RainCT/navigation/commit/f4a046db553f4127c50cebba9740ed3676f8cd7f)修改cmakelist.txt和bgp_plugin.xml就可以了。
如何使用自己的路径规划?
参考:http://wiki.ros.org/navigation/Tutorials/Writing%20A%20Global%20Path%20Planner%20As%20Plugin%20in%20ROS
思路是使用ROS的插件机制。在自己写的global或者local planner算法里开头加上一句特定的程序(PLUGINLIB_EXPORT_CLASS(…..))就能注册插件机制,然后在xx_plugin.xml等文件里描述下这个插件,在package.xml显式的表明这个插件用来通知ROS我们将使用它,具体过程见官方wiki(ROS的插件机制)。弄完插件机制以后,我们就可以像上面一样将其用参数的形式直接传过去了。之前的bgp_plugin.xml有bug,因此就出现了那个问题。
3. dwa_planner vs. base_local_planner
参考:http://answers.ros.org/question/10718/dwa_planner-vs-base_local_planner/
- ROS SLAM代码框架概述
- SLAM 框架概述
- SLAM代码(SVO ros )
- ros移动机器人之SLAM (2)slam概述和一些杂七杂八的东西
- ORB-SLAM代码详解之代码框架
- ROS和SLAM 【gmapping】
- ROS hector slam
- ROS -by- Example slam
- ROS AMCL+ move_base SLAM 仿真
- SLAM代码(SLAM简介)
- slam的框架
- 经典视觉SLAM框架
- SLAM: Ubuntu14.04_Kylin安装ROS-Indigo
- SLAM: Ubuntu16.04安装ROS-kinetic
- ROS slam gmapping不能画地图
- ROS slam gmapping不能画地图
- 【SLAM】之ROS安装,配置与初试
- 在ROS中使用Cartographer进行SLAM
- 117. Populating Next Right Pointers in Each Node II
- 写给自己的一封信(http://www.cnblogs.com/yejiurui/)
- 【转载】大型互联网网站架构演变
- hdu5464 Clarke and problem (dp)
- ACM心得
- ROS SLAM代码框架概述
- 120. Triangle
- android调用高版本api函数的兼容性问题
- 彻底弄清楚session是什么?
- 用eclipse画棋盘
- kaggle 入门 rossmann xgboost
- API
- PAT乙级—1025. 反转链表 (25)-native
- PCA的数学原理(非常值得阅读)!!!!