【ros2】ROS2功能包(Package)完全指南
文章目录
- ROS2功能包(Package)完全指南
-
- 一、`ros2 pkg create`:功能包创建命令详解
-
- 1. 基本语法
- 2. 核心参数说明
- 3. 常用示例
-
- (1)创建C++功能包(最常用)
- (2)创建Python功能包(最常用)
- (3)创建接口功能包(定义.msg/.srv/.action)
- (4)创建带描述和维护者信息的包
- 二、功能包的目录结构
-
- 1. `ament_cmake`(C++)功能包结构
- 2. `ament_python`(Python)功能包结构
- 三、功能包核心文件解析
-
- 1. `package.xml`:包元信息清单
- 2. `CMakeLists.txt`(`ament_cmake`包):编译配置
- 3. `setup.py`与`setup.cfg`(`ament_python`包):安装配置
- 四、功能包管理核心命令
-
- 1. 查看功能包信息
- 2. 编译功能包
- 3. 运行功能包中的节点
- 五、功能包命名与规范
- 六、功能包依赖管理
-
- 1. 依赖类型
- 2. 添加依赖的步骤
- 七、常见问题与解决方案
- 八、总结
ROS2功能包(Package)完全指南
功能包(Package)是ROS2软件的基本组织单位,用于封装节点、接口、配置文件等资源。掌握功能包的创建与管理是ROS2开发的基础,本文将详细介绍ros2 pkg create命令及功能包相关核心知识。
一、ros2 pkg create:功能包创建命令详解
1. 基本语法
ros2 pkg create <包名> --build-type <构建类型> [--dependencies <依赖包>] [其他选项]
2. 核心参数说明
| 参数 | 作用 | 可选值 | 必要性 |
|---|---|---|---|
<包名> | 功能包名称,需符合ROS2命名规范(小写字母+下划线) | - | 必选 |
--build-type | 指定构建系统类型 | ament_cmake(C++)、ament_python(Python)、cmake(传统CMake) | 必选(Python包可省略,默认ament_python) |
--dependencies | 声明依赖的ROS2包(空格分隔多个依赖) | 如rclcpp、rclpy、std_msgs等 | 可选(建议必选,自动配置依赖) |
--license | 指定开源许可证 | Apache-2.0、MIT、BSD等 | 可选(默认无许可证) |
--description | 功能包描述信息 | 字符串 | 可选 |
--maintainer-email | 维护者邮箱 | 邮箱地址 | 可选 |
--maintainer-name | 维护者姓名 | 字符串 | 可选 |
3. 常用示例
(1)创建C++功能包(最常用)
# 创建C++包,依赖rclcpp(ROS2 C++核心库)和std_msgs(标准消息)
ros2 pkg create cpp_demo --build-type ament_cmake --dependencies rclcpp std_msgs --license Apache-2.0
(2)创建Python功能包(最常用)
# 创建Python包,依赖rclpy(ROS2 Python核心库)和sensor_msgs(传感器消息)
ros2 pkg create py_demo --build-type ament_python --dependencies rclpy sensor_msgs
(3)创建接口功能包(定义.msg/.srv/.action)
# 接口包需用ament_cmake,依赖rosidl_default_generators(接口生成工具)
ros2 pkg create my_interfaces --build-type ament_cmake --dependencies rosidl_default_generators std_msgs
(4)创建带描述和维护者信息的包
ros2 pkg create robot_control \--build-type ament_cmake \--dependencies rclcpp geometry_msgs \--description "机器人底盘控制功能包" \--maintainer-name "张三" \--maintainer-email "zhangsan@example.com" \--license MIT
二、功能包的目录结构
不同构建类型的功能包结构有所差异,以下为两种核心类型的标准结构:
1. ament_cmake(C++)功能包结构
cpp_demo/
├── CMakeLists.txt # 编译配置文件(核心)
├── include/ # 头文件目录(C++专用)
│ └── cpp_demo/ # 头文件命名空间(与包名一致)
│ └── my_node.hpp # 示例头文件
├── package.xml # 包元信息(依赖、许可证等)
├── src/ # 源文件目录
│ └── my_node.cpp # 示例源文件
└── resource/ # 资源文件(如图标、配置模板)└── cpp_demo
2. ament_python(Python)功能包结构
py_demo/
├── package.xml # 包元信息
├── py_demo/ # Python模块目录(与包名一致)
│ ├── __init__.py # 模块初始化文件
│ └── my_node.py # 示例节点脚本
├── setup.cfg # 安装配置(指定脚本入口)
├── setup.py # 安装脚本(定义包信息和依赖)
└── resource/ # 资源文件└──