ROS2-009-通信机制补完:元功能包 MetaPackage
简介
在 ROS2 中编写一个大的模块时,一般需要依照不同的功能分成多个子包。例如对于一个机器人导航模块,该模块可能被分为定位、路径规划、离线地图等多个子包进行分别编写。那么当我们需要安装该模块时,需要一个个安装这些子包才可以应用全部功能吗?
元功能包(MetaPackage)
在 ROS2 中,其提供了一种可以将多个不同的功能子包打包成一个大的功能包的方式,当我们需要安装某个功能模块时,只需要直接调用安装这个大的功能包即可。该包又被称为 元功能包 ,即 MetaPackage。
MetaPackage 本质上是 Linux 的一种文件管理系统的概念。作为一个 ROS2 当中的一个没有实质性内容的“虚包”,其可以被认为是一个装订书的“目录索引”。他依赖了其它的软件包,因此通过它就可以将其他的包组合起来。而安装 MetaPackage 时,它就会告诉引用该安装的人或设备这个集合中有哪些子包,以及应该去哪里下载。
它用来做什么?
方便用户安装。inclusive☝🤓
如何实现?
以以下目录为例,希望将下述所有功能包装订为一个元功能包:
首先移动到希望创建元功能包的工作空间,在src目录下新增一个功能包:
ros2 pkg create tutor_ls_plumbing
执行上述命令后,记得“cd”回到工作空间.
在新创建的 “tutor_ls_plumbing” 包下,仅需修改 package.xml 即可,无需修改 “CMakeLists.txt”
在 package.xml 中,添加 <exec_depend></exec_depend>,并在其中添加你想要放进索引的功能包:
<exec_depend>base_interfaces_demo</exec_depend>
......
执行完毕后 编译:
colcon build --packages-select tutor_ls_plumbing
最后应该类似于这样:
后记
你也可以在 GitHub 上面寻找其他人的项目,来看看它们所设计的 metapackage。
例如navigation2/navigation2 at main · ros-navigation/navigation2