在catkin_ws/src/learning_service
目录下新建一个文件夹srv
,然后在该文件夹内新建文件Person.srv
:
string name
uint8 age
uint8 sex
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
---
string result
在catkin_ws/src/learning_service/package.xml
中添加功能包依赖:
<build_depend>message_generation</build_depend>
<exec_depend>message runtime</exec_depend>
在catkin_ws/src/learning_service/CMakeLists.txt
中添加编译选项:
find_package(catkin REQUIRED COMPONENTS
geometry_msgs
roscpp
rospy
std_msgs
turtlesim
message_generation # 这是新加的
)
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES learning_service
CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
# DEPENDS system_lib
)
最后编程生成语言相关文件:
$ cd ~/catkin_ws
$ catkin_make
于是会在catkin_ws/devel/include/learning_service
目录下生成PersonRequest.h
和PersonResponse.h
。
在catkin_ws/src/learning_service/src
下新建文件person_server.cpp
:
/* 该例程将执行“/show_person”服务,服务数据类型“learning_service::Person” */
#include <ros/ros.h>
#include "learning_service/Person.h"
/* service回调函数,输入参数req,输出参数res */
bool personCallback ( learning_service::Person::Request &req,
learning_service::Person::Response &res ) {
/* 显示请求数据 */
ROS_INFO ( "Person: name:%s age:%d sex:%d", req.name.c_str(