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进行进一步的阅读、分析了。
本周工作聚焦于ROS导航部分的代码分析,详细解读导航架构图并将其映射到实际的代码结构。通过研究github上的navigation仓库,了解到每个子文件夹对应一个ROS包,主要使用C++编写。总结了代码结构和语言分布,为后续深入阅读和分析奠定了基础。

793

被折叠的 条评论
为什么被折叠?



