第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
的分組,照該分組預先設定好的構建規則、依賴處理方式等來對這個功能包進行相應的構建操作