文章目录
- ROS(Robot Operating System)功能包
- 功能包名在 CMakeLists.txt 和 package.xml 中一定要完全相同
ROS(Robot Operating System)功能包
ROS(Robot Operating System)功能包是用于组织、构建和管理 ROS 软件项目的基本单元。功能包是 ROS 中最基本的软件组织单元,它可以包含节点、消息、服务、动作、参数配置文件、启动文件以及其他 ROS 资源。
以下是 ROS 功能包的一些基本原理:
-
组织结构:
- ROS 功能包通常包含一个名为
src/
的目录,其中存放着源代码。 - 可以包含
include/
目录,其中存放头文件。 - 包含
launch/
目录,其中存放启动文件。 - 包含
msg/
、srv/
、action/
等目录,用于存放消息、服务、动作定义文件。 - 可以包含
config/
目录,其中存放参数配置文件。
- ROS 功能包通常包含一个名为
-
依赖管理:
- 功能包可以指定其他 ROS 软件包作为依赖项,以确保所需的功能和资源可用。
- 依赖关系在
package.xml
文件中定义。
-
编译系统:
- ROS 使用 CMake 作为构建系统。每个功能包都有一个
CMakeLists.txt
文件,其中定义了构建过程的规则和依赖关系。 - 使用
catkin_make
或catkin build
等工具来构建 ROS 功能包。
- ROS 使用 CMake 作为构建系统。每个功能包都有一个
-
运行节点:
- ROS 节点是 ROS 程序的执行单元,可以通过 ROS Master 进行通信。
- 使用
rosrun
命令可以运行指定功能包中的节点。
-
发布和订阅消息:
- ROS 节点通过发布和订阅消息进行通信。
- 使用
rostopic
命令查看和发布主题消息。
-
提供和调用服务:
- ROS 服务允许节点提供和调用一次性请求-响应服务。
- 使用
rosservice
命令查看和调用服务。
-
参数服务器:
- ROS 参数服务器是一个分布式参数存储系统,允许节点动态地设置和检索参数。
- 使用
rosparam
命令可以管理参数服务器中的参数。
-
启动文件:
- 启动文件允许同时启动多个节点,并设置它们之间的连接关系。
- 使用
roslaunch
命令运行启动文件。
功能包名在 CMakeLists.txt 和 package.xml 中一定要完全相同
如果它们不匹配,就会导遇到错误:package name 'transform_listener' in '/path/to/package.xml' does not match current PROJECT_NAME。
在 CMakeLists.txt
和 package.xml
中,有一些内容是需要相互对应和保持一致的,以确保功能包的正确构建和依赖关系管理。下面是一些需要相同的内容:
-
功能包名称(Name):在
CMakeLists.txt
中通过project()
命令指定,而在package.xml
中通过<name>
标签指定。 -
版本号(Version):在
CMakeLists.txt
中通过project()
命令的VERSION
参数指定,而在package.xml
中通过<version>
标签指定。 -
作者和维护者信息(Maintainer):在
CMakeLists.txt
中通常不直接指定,而在package.xml
中通过<maintainer>
标签指定。 -
许可证信息(License):在
CMakeLists.txt
中通常不直接指定,而在package.xml
中通过<license>
标签指定。 -
构建依赖项(Build Dependencies):在
CMakeLists.txt
中通过find_package()
或catkin_package()
指令指定,而在package.xml
中通过<build_depend>
标签指定。 -
运行时依赖项(Run Dependencies):在
CMakeLists.txt
中通过catkin_package()
指令指定,而在package.xml
中通过<exec_depend>
标签指定。 -
导出的构建依赖项(Exported Build Dependencies):在
CMakeLists.txt
中通过catkin_package()
指令指定,而在package.xml
中通过<build_export_depend>
标签指定。 -
导出的运行时依赖项(Exported Run Dependencies):在
CMakeLists.txt
中通过catkin_package()
指令指定,而在package.xml
中通过<exec_depend>
标签指定。
确保这些内容在 CMakeLists.txt
和 package.xml
中保持一致,可以确保功能包的正确构建和依赖关系管理。
在 ROS 中,CMakeLists.txt
和 package.xml
是功能包(package)的两个关键文件,它们分别用于构建和描述功能包。
-
CMakeLists.txt:
- 作用:
CMakeLists.txt
是用 CMake 语言编写的脚本文件,用于指导 ROS 编译系统构建你的功能包。它定义了构建过程中所需的依赖项、编译选项、安装规则以及生成的可执行文件、库或节点等信息。 - 工作原理:当你运行
catkin_make
或catkin build
等构建命令时,ROS 编译系统会查找每个功能包中的CMakeLists.txt
文件,并根据其中的指令来进行编译。通常,这些指令包括定义项目名称、查找依赖项、配置编译选项、设置安装规则等。
- 作用:
-
package.xml:
- 作用:
package.xml
是一个 XML 格式的文件,用于描述功能包的元数据信息,包括名称、版本、作者、依赖关系等。它还可以用于声明其他功能包需要的系统依赖项、资源文件等。 - 工作原理:ROS 工具链(如
rosdep
、rospack
等)使用package.xml
文件来管理和解析功能包的元数据信息。当你运行catkin_make
或rosdep install
等命令时,ROS 工具链会根据package.xml
文件中的信息来安装依赖项、解析功能包之间的依赖关系等。
- 作用: