navigation包目前常用的主要有kinetic-devel和melodic-devel两种分支; 在本次讨论中主要针对kinetic-devel版本进行解读.
对navigation的两种分支做一个简单的对比:
1. melodic在kinetic的基础上淘汰了tf的使用,替换成了tf2;
2. melodic在某些Velocity参数设置做了一些相应的修改,参数名等方面;
3. costmap2D上增加了某些细节;
4. 在核心算法上好像并没有做出太大改进;
5. 如果后续发现新的不同,将在此补充, 若大家有新的发现也欢迎留言告诉我.
1. 软件包按功能分类
先请大家看一张navigation库中各个软件包的调用关系图:
然后再给出navigation库中所包含软件的树状图(仅目录)如下:
"注意: 在后续的阐述中全部采用序号来代替相对应的软件包名称"
├── 1. amcl
├── 2. base_local_planner
├── 3. carrot_planner
├── 4. clear_costmap_recovery
├── 5. costmap_2d
├── 6. dwa_local_planner
├── 7. fake_localization
├── 8. global_planner
├── 9. map_server
├── 10. move_base
├── 11. move_slow_and_clear
├── 12. nav_core
├── 13. navfn
├── 14. navigation
├── README.md
├── 15. robot_pose_ekf
├── 16. rotate_recovery
└── 17. voxel_grid
从上可以看出一共有17个软件包, 其中:
(1、7、15)为提高机器人定位辅助包 ;
(9)为加载和保存地图辅助包 ;
(4、11、16)为导航修复辅助包(ps: 当机器人出现意外无法到达指定位置时所采取的修复行为),(17)为体素定义辅助包。
除了上述辅助包之外, 剩下的都是核心软件包, 主要包括以下几种:
核心控制枢纽软件包: 10 (move_base)
中间中转站(数据交换接口): 5(costmap2d)、 12(nav_vore)
全局路径规划器: 3 、8、 13
局部路径规划器: 2、 6
从上面两种图形展示中可以看出, navigation包的核心就是10(move_base), 它通过两个核心数据传输接口5、12来维护整个导航框架的运行.
2. 软件包的安装和测试
省略,该步骤比较简单,我已经移植了多个版本平台(arm64/32, AMD64)都没有什么问题,所以在这里就不啰嗦了,大家如果安装有什么问题可以留言告诉我.
3. 源码深入解析前奏
深入剖析navigation库,这个库用起来简单,但学习下来用到了好多c++的高级知识点和ROS的一些消息传递方式,真不是那么容易就能完全掌握的…
在深入剖析代码前,最好能够理解基础语言(C++/ROS)的一些语法
- ROS语法
1. ROS-Topic的订阅和发布
2. ROS-msg的高级创建和使用 (专栏后续单独介绍)
3. ROS-srv的高级创建和使用 (专栏后续单独介绍)
4. actionlib (专栏后续单独介绍)
5. pluginlib (专栏后续单独介绍)
6. tf库 (专栏后续单独介绍)
7. ROS的消息打印种类 (专栏后续单独介绍)
- C++语法
1. 共享指针
2. 线程锁
3. 多线程并行
4. 虚函数
5. enum 枚举
4. 结果对比及展示
- 2D-栅格地图
- 局部代价和全局代价地图


具体代码的详细解析,和分层次介绍函数的调用关系,修改核心函数参数,提高算法执行效率请期待后续文章。