ROS2系列 (19) : C++服务通信实例——自定义巡逻服务接口(接口创建篇)
·
ROS2系列 (19) : C++服务通信实例——自定义巡逻服务接口(接口创建篇)
在前文中,我们基于Python实现了人脸检测的服务通信。本文将聚焦C++服务通信的自定义接口创建,通过“巡逻海龟”案例,详解如何在已有功能包中添加自定义服务接口,为后续服务端和客户端开发奠定基础。
一、自定义服务接口的创建流程
1.1 功能包与目录结构
我们复用已有工作空间chapt4_ws中的chapt4_interfaces功能包,添加巡逻服务接口。最终目录结构如下:
chapt4_interfaces/
├── srv/
│ ├── FaceDetector.srv # 原有人脸检测接口
│ └── Patrol.srv # 新增巡逻服务接口
├── CMakeLists.txt
├── package.xml
└── ...
1.2 编写Patrol.srv接口
在chapt4_interfaces/srv/目录下创建Patrol.srv文件,定义巡逻服务的请求和响应结构:
float32 target_x # 目标点x坐标
float32 target_y # 目标点y坐标
---
int8 SUCCESS=1 # 定义成功常量(值为1)
int8 FAIL=0 # 定义失败常量(值为0)
int8 result # 执行结果(取值为SUCCESS或FAIL)
- 请求部分:包含两个浮点型字段
target_x和target_y,用于指定海龟的巡逻目标点。 - 响应部分:通过
---分隔,包含两个常量(SUCCESS和FAIL)和一个结果字段result,用于反馈巡逻任务的执行状态。
1.3 配置package.xml
确保chapt4_interfaces/package.xml包含服务接口所需的依赖声明:
<?xml version="1.0"?>
<package format="3">
<name>chapt4_interfaces</name>
<version>0.0.0</version>
<description>自定义服务接口包,包含人脸检测和巡逻服务</description>
<maintainer email="your@email.com">your_name</maintainer>
<license>Apache-2.0</license>
<!-- 构建工具依赖 -->
<buildtool_depend>ament_cmake</buildtool_depend>
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<!-- 运行时依赖 -->
<depend>geometry_msgs</depend>
<depend>rosidl_default_runtime</depend>
<!-- 声明为接口包,供ROS2工具链识别 -->
<member_of_group>rosidl_interface_packages</member_of_group>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
1.4 配置CMakeLists.txt
更新chapt4_interfaces/CMakeLists.txt,添加巡逻服务接口的构建规则:
cmake_minimum_required(VERSION 3.8)
project(chapt4_interfaces)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# 查找依赖包
find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(geometry_msgs REQUIRED)
# 声明所有服务接口文件
set(srv_files
"srv/FaceDetector.srv" # 原有人脸检测接口
"srv/Patrol.srv" # 新增巡逻服务接口
)
# 生成多语言接口代码(C++/Python)
rosidl_generate_interfaces(${PROJECT_NAME}
${srv_files}
DEPENDENCIES geometry_msgs # 依赖geometry_msgs以确保类型兼容性
)
ament_package()
二、构建并验证自定义接口
2.1 构建功能包
在工作空间根目录执行构建:
cd ~/chapt4/chapt4_ws
colcon build --packages-select chapt4_interfaces
source install/setup.bash
2.2 验证接口生成
通过ros2 interface show命令查看生成的巡逻服务接口:
ros2 interface show chapt4_interfaces/srv/Patrol
输出应与Patrol.srv定义完全一致:
float32 target_x
float32 target_y
---
int8 SUCCESS=1
int8 FAIL=0
int8 result
三、总结
本文完成了“巡逻海龟”服务的自定义接口创建,核心流程包括:
- 接口定义:通过
Patrol.srv声明目标点请求和结果响应; - 配置文件:在
package.xml和CMakeLists.txt中声明依赖和构建规则; - 构建验证:通过
colcon build生成多语言接口代码,并通过ros2 interface show验证。
该接口为后续C++服务端和客户端的开发提供了基础,下一篇将基于此接口实现完整的“巡逻海龟”服务通信流程。
更多推荐
所有评论(0)