目录
一、服务通信原理
服务通信原理图,在好多细节上与话题通信不同,需要注意。
区别:ROS机器人开发实践P20
话题 | 服务 | |
同步性 | 异步 | 同步 |
通信类型 | 发布者/订阅者 | 客户端/服务端 |
反馈 | 无 | 有 |
缓冲区 | 有 | 无 |
实时性 | 弱 | 强 |
节点关系 | 多对多 | 一对多 |
适用场景 | 数据传输 | 逻辑处理 |
其中更多的细节还需在编写代码中观察。
二、自定义服务数据类型
1.创建功能包
名字
依赖
2.自定义服务数据
1.自定义服务数据类型保存在srv文件中,故创建srv文件夹和srv文件。
int32 num1
int32 num2
---
int32 sum
区别:可以观察到,数据类型与话题消息数据类型没有区别,但是需要在请求和应答描述的数据类型之间需要用“---”符号进行分割。
3.编辑配置文件
在package.xml文件添加依赖配置,这与话题通信无异:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
在CMakeList.txt文件添加配置,注意有区别:(ctrl+f查找功能)
添加编译时依赖。
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
注意与话题通信区别(话题通信是add_message_files),同时注释也说明了为什么要建立srv文件夹,因为是从srv目录下去寻找srv文件。
## Generate services in the 'srv' folder
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
add_service_files(
FILES
AddInts.srv
)
添加srv文件中的数据类型依赖,因为srv文件中的数据类型是基于std_msgs的,与话题通信无异。
generate_messages(
DEPENDENCIES
std_msgs
)
添加运行时依赖,与话题通信无异。(官网没有配置这个)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES server_client
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
4.catkin_make编译
生成一些c++和python的中间文件,之后能在头文件中调用,看看有没有异常,没异常配置成功。
5.查看生成的中间文件
c++
python