学习视频:

15.服务数据的定义与使用_哔哩哔哩_bilibili

 三个横线上方为request数据,横线下方为response数据;

第一步先在功能包中创建一个srv文件夹放置数据定义文档;

在srv内部自定义一个数据srv文档

 将数据的结构定义写入,数据的结构定义如下

string name
uint8 age
uint8 sex

uint8 unknown = 0
uint8 male = 1
uint8 female = 2

---
string result

 定义完成后在package.xml内部添加功能包依赖:

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

 再在CMakeList内部添加编译选项

首先在find_package里面添加message_generation添加功能包要寻找的依赖

 再添加如下指令:使得编译器知道根据哪个srv产生你的头文件

add_service_files(
FILES                                                      #自动收缩srv文件夹内文件
Person.srv
)

generate_messages(
DEPENDENCIES                      #根据Person.srv的定义以及DEPENDENCIES下方的依赖产生头文件
std_msgs                                    
)

 再在CMakeList里面的catkin_package里面添加一个message_runtime依赖放入;

至此配置就完成了进入编译生成相关头文件;

 对于服务数据定义编译完成会出现三个头文件,第一个是包含后续两个是一个总体的头文件,第二个是在服务中的请求,是数据的结构定义时三个横线上方的头文件,第三个则是三个横线下方的。编译完还是要记得设置变量环境的好习惯

 下一步放置源码在功能包src内部;

 放置完源码还是一样在CMakeList内部放置编译规则:

add_executable(person_server src/person_server.cpp)                           #将src中person_server.cpp编译成对应可执行文件person_server
target_link_libraries(person_server ${catkin_LIBRARIES})                      #将person_server与person_client做一个链接
add_dependencies(person_server ${PROJECT_NAME}_gencpp)            #将动态生成的头文件做一个依赖

 #下面同上方一个意思

add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)

 添加完后就可以执行编译了

 编译后,要记得设置变量环境好习惯。

 可以在devel文件夹下找到编译的可执行文件

 最后就是测试了;

 可以看见运行有应答,测试就完成了。