【ros2】ROS2 Python服务端与客户端开发指南
文章目录
- ROS2 Python服务端与客户端开发指南
-
- 一、核心概念:服务通信的特点与适用场景
- 二、基于书中第4章的Python服务开发核心步骤
-
- 1. 前置准备:创建功能包与依赖配置
-
- (1)创建服务功能包
- (2)配置`package.xml`
- 2. 服务端开发步骤(以书中人脸检测为例)
-
- (1)导入依赖
- (2)定义服务端节点类
- (3)实现请求处理回调函数
- (4)主函数:初始化节点并运行
- 3. 客户端开发步骤(以书中人脸检测请求为例)
-
- (1)导入依赖
- (2)定义客户端节点类
- (3)发送请求并处理响应
- (4)主函数:创建客户端并发送请求
- 4. 编译与运行
-
- (1)编译功能包
- (2)运行服务端与客户端
- 三、书外拓展知识:服务通信高级用法与最佳实践
-
- 1. 服务调用的同步与异步方式
- 2. 服务的命名与命名空间
- 3. 服务的安全性配置(ROS2高级特性)
- 4. 服务通信的调试工具
- 5. 常见问题与解决方案
- 四、总结
ROS2 Python服务端与客户端开发指南
(基于《ROS2机器人开发:从入门到实践》第4章及拓展知识)
一、核心概念:服务通信的特点与适用场景
服务(Service)是ROS2中双向通信机制,基于“请求-响应”模式,适用于需要明确反馈结果的场景(如任务执行确认、数据查询、算法处理等)。与话题(Topic)的“单向持续传输”不同,服务具有以下特点:
- 通信流程:客户端发送请求 → 服务端处理并返回响应。
- 触发方式:按需调用,而非持续传输,适合低频率、有明确交互逻辑的场景(如人脸检测、目标点移动)。
- 接口定义:使用
.srv文件定义请求(Request)和响应(Response)数据结构,用---分隔两部分。
二、基于书中第4章的Python服务开发核心步骤
1. 前置准备:创建功能包与依赖配置
(1)创建服务功能包
服务端和客户端需依赖接口功能包(如chapt4_interfaces),因此先创建包含接口和业务逻辑的功能包:
# 创建Python功能包,依赖ROS2基础库和自定义接口
ros2 pkg create demo_python_service --build-type ament_python \
--dependencies rclpy chapt4_interfaces cv_bridge opencv-python face_recognition
- 依赖说明:
rclpy:ROS2 Python客户端库。chapt4_interfaces:自定义服务接口包(含.srv文件)。cv_bridge/opencv-python:图像格式转换(如书中人脸检测示例)。
(2)配置package.xml
需声明对接口包的依赖,确保编译和运行时能找到接口:
<?xml version="1.0"?>
<package format="3"><name>demo_python_service</name><version>0.0.0</version><description>ROS2 Python服务示例</description><!-- 依赖声明 --><buildtool_depend>ament_python</buildtool_depend><exec_depend>rclpy</exec_depend><exec_depend>chapt4_interfaces</exec_depend> <!-- 依赖自定义接口包 --><exec_depend>cv_bridge</exec_depend><exec_depend>opencv-python</exec_depend><!-- 入口点配置(关键:让ROS2识别节点) --><entry_points><console_scripts><node name="face_detection_server" pkg="demo_python_service" exec="face_detection_server.py"/><node name="face_detection_client" pkg="demo_python_service" exec="face_detection_client.py"/></console_scripts></entry_points>
</package>
2. 服务端开发步骤(以书中人脸检测为例)
服务端的核心逻辑是:创建服务对象 → 定义请求处理回调函数 → 处理请求并返回响应。
