ROS源码分析-week10

本文详细记录了对ROS中navigation仓库的nav_core包进行源码阅读的过程,包括工作目标、仓库分析、包结构观察、接口定义等内容,通过接口的UML图和表格总结了nav_core包的核心功能。

2021SC@SDUSC

1. 本周工作目标

这周使用VSCode,来阅读一下navigation仓库里许多功能包的代码。结合实际情况,本周的工作目标如下:

  • 下载仓库,清点重点的包

  • 阅读nav_core功能包

2. 下载仓库,分析重点的包

首先git clone下载仓库,然后用vscode打开,发现里面有很多包:

然后用一个静态代码分析工具understand初步分析这个文件夹里包裹的依赖情况,生成依赖图如下:

可以看见,最核心的包是costmap_2dnav_core,相对独立的包是map_serveramclnavigation等。看代码时就优先从这些包开始看起。

3. nav_core包阅读

于是我选择了nav_core包进行阅读。

先观察包结构:

发现这个代码包里面主要是.h文件,没有cpp文件。猜测主要是由接口构成的包。

然后观察CMakelist.txt:

发现这个包需要传入传出的信息有geometry_msgs和tf2_ros等,也和本包“导航”的功能有关。

然后我们打开.h文件,阅读代码:

发现果然如我们所猜测的一样,这个包里面主要是接口。所有的接口都定义在namespace nav_core下,利用C++的名称空间机制隔离了重名的类,然后定义了类的纯虚函数,相当于定义了几个导航接口,规范、隔离实现和调用。

那么,具体这个包里定义了多少接口呢?每个接口的作用又是什么呢?我再次利用understand工具,画出UML图辅助分析:

 

 

整理得到以下表格:

文件名接口类名标志成员作用
base_global_planner.hnav_core::BaseGlobalPlannerinitialize makePlan全局路径规划。各个全局规划器都需要实现这个接口。
base_local_planner.hnav_core::BaseLocalPlannerinitialize computeVelocityCommands isGoalReached setPlan局部路径规划。如果机器人没有到达设定的目标,那么就要对局部路径进行规划。
parameter_magic.h无类名loadParameterWithDeprecation warnRenamedParameter检查参数名称,对过时参数进行警告。
recovery_behavior.hnav_core::RecoveryBehaviorinitialize runBehavior机器人恢复行为定义。如果路径被堵塞了,那么机器人将执行恢复行为尝试修正。

这就是这个包里大部分的内容。

4. 总结

本周对navigation仓库进行了一个大致分析,并对nav_core包进行了源码的阅读。nav_core包里主要是一些接口的定义,相对来说代码量不大,容易阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值