官方英文文档:Creating a package — ROS 2 Documentation: Humble documentation
中文参考:古月ROS2 功能包讲解 - 图书资源
省流,就学习一个命令
ros2 pkg create --build-type <build-type> <package_name>
ROS2的重要概念
工作空间(Workspace):【ROS2 】工作空间(workspace)——ROS2核心概念1
功能包(Package):解耦的功能代码,一个workspace可有不同的编译代码(python、C++)
节点(Node):机器人的“工作细胞”,最小执行单元,负责单一功能(如传感器驱动)。
话题(Topic):节点间异步传递数据的“桥梁”,基于发布/订阅模型(如传感器数据流)。
服务(Service):同步的“你问我答”机制,适用于需即时响应的短任务(如开关控制)。
动作(Action):复杂行为的“流程管理”,支持长时间任务、反馈与取消(如导航到目标点)。
通信接口(Interface):数据传递的“标准结构”,定义消息(.msg)、服务(.srv)、动作(.action)格式。
参数(Parameter):机器人系统的“全局字典”,动态键值对配置(如超时时间、IP地址)。
分布式通信(Distributed Communication):跨多计算平台的“任务分配”,支持机器人集群协同工作。
DDS(Data Distribution Service):ROS2底层的“神经网络”,实现实时、可靠的通信中间件
功能包与workspace的关系
在源码下,有多个子代码,不同的编译方式
workspace_folder/src/cpp_package_1/CMakeLists.txtinclude/cpp_package_1/package.xmlsrc/py_package_1/package.xmlresource/py_package_1setup.cfgsetup.pypy_package_1/...cpp_package_n/CMakeLists.txtinclude/cpp_package_n/package.xmlsrc/
功能包的创建
创建命令
ros2 pkg create --build-type <build-type> <package_name>
ros2 pkg create --build-type --help
-
pkg:表示功能包相关的功能;
-
create:表示创建功能包;
-
package_name:新建功能包的名字
-
build-type:说明
-
可选值 {cmake, ament_cmake,ament_python} 表示新创建的功能包是C++还是Python的,
-
ament_cmake:使用C++或者C,那这里就跟,如果
-
ament_python:使用Python,;
-
cmake:开发非ROS2的C/C++库 →
CMake
(避免ROS2生态干扰)
-
扩展阅读: ament
ament
原意为植物的「柔荑花序」(如柳絮),其特点是多个小单元紧密连接成链状结构,隐喻ROS2构建系统将多个独立功能包串联成完整应用的过程。- 这一命名延续了ROS生态的「自然隐喻」风格(如ROS1的
catkin
意为「柳絮」
Q1: 能否在ament_cmake
包中混合Python代码?
- ✅ 可以,但需手动配置安装规则(如
ament_python
自动处理更便捷)。
Q2: 为什么ament_python
不需要CMakeLists.txt
?
- 因为它使用
setup.py
替代了CMake的角色,通过setuptools
管理构建流程。
。
案例:分别创建c++ 和python版本的功能包
cd ~/dev_ws/src # 自定义机器人工程的src库
ros2 pkg create --build-type ament_cmake learning_pkg_c # C++
ros2 pkg create --build-type ament_python learning_pkg_python # Python
c++ 创建后文件
python 创建后文件
编译功能包
在创建好的功能包中,我们可以继续完成代码的编写,之后需要编译和配置环境变量,才能正常运行:
cd ~/dev_ws
colcon build # 编译工作空间所有功能包
source install/local_setup.bash