【ROS】集成功能包到工作空间
前言
本文讲解如何将别的工作空间或者已经实现的功能包复制移植到我们的工作空间中,与git clone不同,是复制的过程
理解 ROS 工作空间和功能包的集成过程
在 ROS 中,工作空间(Workspace)是你组织、构建和运行功能包的地方。每个功能包(Package)都是一个包含特定功能的模块
功能包内包含的 CMakeLists.txt 文件和 package.xml 文件是非常重要的,它们分别指定了构建规则和依赖项。理解这些文件的作用,能帮助你在工作空间中正确集成功能包。
工作空间中的 CMakeLists.txt 文件
工作空间中的 CMakeLists.txt 文件是用来告诉 ROS 如何构建位于 src
目录下的所有功能包的。它本质上是一个 “说明书”,指明了如何识别与构建所有功能包
- CMakeLists.txt :告诉 ROS 如何找到 src 目录下的功能包,根据功能包的 package.xml 文件检查依赖项,并根据功能包中的 CMakeLists.txt 自动化构建该功能包。
你通常 不需要修改 工作空间根目录下的 CMakeLists.txt 文件
因为它由 ROS 自动生成,并根据功能包中的 CMakeLists.txt 和 package.xml 文件来构建功能包。即使添加了新的功能包,ROS 也能自动识别并处理它们。
功能包中的 CMakeLists.txt 与 package.xml 文件
功能包中的 package.xml 和 CMakeLists.txt 文件用于描述和构建功能包,它们各自承担着不同的角色。
-
package.xml:用于描述功能包的元数据和依赖项,是功能包的“说明书”。它列出了功能包所依赖的其他包,帮助 ROS 确认所需的依赖。
-
CMakeLists.txt:用于指示 CMake 如何构建该功能包。它基于
package.xml
中声明的依赖项,告诉 CMake 如何找到并使用这些依赖项的头文件和库。
在复制功能包到新的工作空间时,你通常 不需要修改 功能包下的package.xml
和 CMakeLists.txt
文件
只要功能包的依赖项已满足,ROS 会根据 CMakeLists.txt
和 package.xml
自动处理构建过程。
功能包的集成过程
在之前的部分,我们已经讲解了工作空间中的 CMakeLists.txt 文件以及功能包中的 CMakeLists.txt 和 package.xml 文件。接下来,我们将讨论如何将功能包复制到工作空间中。
大致流程如下:
-
复制功能包到工作空间:将功能包直接复制到工作空间中。在这个过程中,工作空间中的 CMakeLists.txt 文件不需要修改,因为 ROS 会自动识别各个功能包中的 CMakeLists.txt 和 package.xml 文件,并进行构建。
-
无需修改功能包文件:功能包中的 CMakeLists.txt 文件负责构建该功能包,而 package.xml 文件声明了功能包的依赖项。复制到工作空间后,这些构建规则和依赖关系不会改变,因此不需要修改。
-
依赖项检查:复制功能包后,工作空间不一定满足所有依赖项。我们无需逐一检查
package.xml
中列出的依赖项,而是通过运行catkin_make
来自动检测。如果编译过程中出现缺少依赖项的错误,我们只需根据提示安装相应的依赖。如果没有报错,那么功能包就已经成功集成。
实际步骤如下
- 复制功能包到工作空间。
- 无需修改工作空间的 CMakeLists.txt 文件以及功能包中的 CMakeLists.txt 和 package.xml 文件。
- 直接运行
catkin_make
编译。如果没有报错,说明所有依赖项都已满足;如果报错缺少依赖项,则根据提示安装缺失的依赖。