学习视频:
三个横线上方为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文件夹下找到编译的可执行文件
最后就是测试了;
可以看见运行有应答,测试就完成了。