自定义复杂响应消息

消息自定义流程

根据总结归纳,大致上我们的消息如下:

service数据 名称 类型 描述
Request student Student 学生对象
Response team Team 查询出的Team

1. 新建srv文件

现在我们制定一个.srv文件,用来描述一项服务:发送学生信息到服务端,让服务端返回生成的学生Id。

新建FindTeam.srv文件,内容如下:

1
2
3
Student student
---
Team team

2. 依赖添加

这里的request中,包含的是一个复杂数据类型Student,这种类型来源于前面demo_msgs包中定义的Student.msg。那么我们该如何正确构建这个srv?

首先,在package.xml中去添加demo_msgs包的依赖:

1
2
3
<build_depend>demo_msgs</build_depend>
<build_export_depend>demo_msgs</build_export_depend>
<exec_depend>demo_msgs</exec_depend>

接着,在CMakeLists.txt中添加需要查找的包demo_msgs:

1
2
3
4
5
6
7
8
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rosmsg
  rospy
  message_generation
  demo_msgs
  geometry_msgs
)

然后,在generate_messages中添加demo_msgs如下:

1
2
3
4
5
6
generate_messages(
        DEPENDENCIES
        std_msgs
        demo_msgs
        geometry_msgs
)

最后,在add_service_fils中,添加此文件:

1
2
3
4
5
6
add_service_files(
        FILES
        NumOption.srv
        GenStudentId.srv
        FindTeam.srv
)

3. 校验自定义消息

首先,我们先通过catkin_make进行编译:

1
catkin_make

接着,查看生成的头文件,来到develinclude目录下,如果生成了头文件说明,自定义消息创建成功。

还可以通过rossrv工具校验:

1
rossrv show demo_srvs/FindTeam.srv

C++使用复杂消息

Python使用复杂消息