2021SC@SDUSC
1. 本周工作目标
这周继续阅读ros导航部分的代码,希望能大致理解导航部分ros包的架构。结合实际情况,本周的工作目标如下:
-
详细分析架构图
-
根据架构图,分析各部分对应的具体的代码包
2. 导航架构图分析
首先复习一下上一章在wiki里发现的的架构图:
我们详细分析一下这张图的各个部分:
包名 | 来源 | 功能 | 备注 |
---|---|---|---|
move_base | 官方提供 | 整合各种信息来源,用dijstra或者A*算法规划机器人运动路径 | |
map_server | 官方提供 | 为机器人提供地图信息 | 地图信息需要预先建立 |
amcl | 官方提供 | 在地图中对机器人进行定位 | 基于粒子算法 |
odometry sources | 机器人平台提供 | 提供机器人运动里程计信息 | |
sensor sources | 机器人平台提供 | 机器人的传感器信息(如激光雷达传感器、加速度传感器等) | |
base controller | 机器人平台提供 | 让导航包控制机器人运动的一组接口 |
通过编写上面这张表格,我们对总体的包结构获得了基础的认识。
3. 把架构图落实到代码结构
下面我们需要阅读代码,把上面具体的各个部分落实到具体的代码仓库上。
首先是以上代码的内容都在github仓库navigation中,如下图:
可以看见navigation这个仓库里面有不同的子文件夹,以move_base为例,点开子文件夹:
发现每个子文件夹都是一个ros_package!
打开src,发现move_base包主要是用C++语言写的,主要是定义并实现了一个类(ros节点)。这个文件很长,足足有1000多行,以下是代码片段:
翻看其他的文件夹,发现也是大致是这样的状况,每个包裹专注它自己的部分,有一定的代码量,但是代码结构还是相对清晰的。
语言方面,我们看到仓库的语言分布:
可见这个库比较基础和重要,对性能要求比较高,大多数包是用C++写的。
4. 总结
这就是ROS导航源码架构的初步分析,后续就可以把代码克隆到本地,通过vscode进行进一步的阅读、分析了。