《ROS2 机器人开发 从入门道实践》 鱼香ROS2——第4章内容
第4章 服务和参数——深入ROS2通信
4.2 用Python服务通信实现人脸检测
4.2.1 自定义服务接口
1. 创建接口功能包
终端中输入
ros2 pkg create chapt4_interfaces --dependencies sensor_msgs rosidl_default_generators --license Apache-2.0
ros2 pkg create
功能包名称 --dependencies 依赖
ROS2提供的用于创建功能包的命令行工具
sensor_msgs
ROS2中的消息定义功能包,定义了各种各样传感器数据的消息类型,比如,LaserScan
消息类型用于表示激光雷达扫描得到的数据,包含了扫描角度范围、距离信息等关键数据;Image
消息类型可以用来传递摄像头拍摄到的图像相关信息,像图像的宽度、高度、编码格式以及像素数据等。rosidl_default_generators
用于生成ROS接口相关的代码,当你定义了自定义的消息类型(.msg
文件)、服务类型(.srv
文件)或者动作类型(.action
文件)后,需要通过代码生成工具将这些接口定义转换为不同编程语言(如C++、Python等)可用的代码形式,rosidl_default_generators
就是承担这样的角色,它能根据你的接口定义自动生成相应的代码,方便在不同语言环境下进行接口的实现和调用。
2. 创建srv消息文件FaceDetector.srv
sensor_msgs/Image image # 人脸图像
---
int16 number
float32 use_time
int32[] top
int32[] right
int32[] bottom
int32[] left
3. 修改CMakeLists.txt
rosidl_generate_interfaces(${PROJECT_NAME}
"srv/FaceDetector.srv"
DEPENDENCIES sensor_msgs
)
4. 修改package.xml
<member_of_group>rosidl_interface_packages</member_of_group>
<member_of_group>
标签所包裹的内容(即 rosidl_interface_packages
)表示当前所涉及的元素(比如某个功能包)隶属于名为 rosidl_interface_packages
的分组,照该分组预先设定好的构建规则、依赖处理方式等来对这个功能包进行相应的构建操作