1. ROS 2服务通信机制深度解析
在机器人系统开发中,服务(Service)通信是实现节点间同步交互的核心机制。与话题(Topic)的发布/订阅模式不同,服务采用请求-响应模型,特别适合需要确认执行结果的场景,如机械臂控制指令、导航目标设置等。
服务通信的本质是远程过程调用(RPC),客户端发送请求后同步等待服务端响应。这种模式虽然实时性不如话题,但能确保操作的可控性和结果确定性。在ROS 2中,服务接口通过.srv文件定义,包含请求和响应两部分数据结构。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ament_cmake构建系统精要
2.1 构建系统架构设计
ament_cmake是ROS 2的元构建系统,基于CMake扩展而来。其核心优势在于:
- 提供标准化的包依赖管理
- 自动生成环境变量配置
- 支持交叉编译
- 与colcon构建工具深度集成
典型项目结构如下:
code复制my_package/
├── CMakeLists.txt
├── package.xml
├── include/
│ └── my_package/
├── src/
└── srv/
2.2 服务接口定义规范
创建自定义服务需要三个关键步骤:
- 在
srv目录下创建.srv文件,例如AddTwoInts.srv:
text复制int64 a
int64 b
---
int64 sum
- 在
package.xml中添加构建依赖:
xml复制<depend>rosidl_default_generators</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
- 在
CMakeLists.txt中配置接口生成:
cmake复制find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"srv/AddTwoInts.srv"
)
