案例五

需求介绍

已知有两个节点,其中一个节点是Publisher,另外一个节点是Subscriber

Publisher发布的消息是团队数据,包含了以下内容:

名称 类型 描述
name string 团队名称
leader Student 团队领导
intro std_msgs/String 团队介绍
location geometry_msgs/Twist 位置
members TODO 团队成员

现在需要添加members团队成员,类型为标准库Student类型的数组。

要求实现这个两个节点,并且模拟数据发布和订阅!

业务分析

在此处,我们希望members的类型是Student的数组集合类型,我们对Team.msg实际编码为:

1
2
3
4
5
string name
Student leader
std_msgs/String intro
geometry_msgs/Twist location
Student[] members

我们采用[]表示数组,对应中C++中的Vector类型,对应Python中的列表list

实现步骤

  1. 首先复杂类型的自定义消息
  2. 实现publisher
  3. 实现subscriber
  4. 模拟数据发布

消息定义

修改Team.msg:

1
2
3
4
5
string name
Student leader
std_msgs/String intro
geometry_msgs/Twist location
Student[] members

检验自定义消息

1. 编译项目

来到工作空间目录下,运行编译

1
catkin_make

2. 查看生成的消息文件

c++的头文件

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

python的py文件

来到devellib/python2.7/dist-package目录下,查看是否生成和package名称相同的目录,以及目录内是否生成对应的py文件。

3. 通过rosmsg工具校验

1
rosmsg show demo_msgs/Student

查看运行结果,运行结果和自己定义的相一致,说明成功。