案例四
需求介绍¶
已知有两个节点,其中一个节点是Publisher
,另外一个节点是Subscriber
。
Publisher
发布的消息是团队数据,包含了以下内容:
名称 | 类型 | 描述 |
---|---|---|
name | string |
团队名称 |
leader | Student |
团队领导 |
intro | std_msgs/String |
团队介绍 |
location | TODO | 位置 |
现在需要添加intro
团队介绍,类型为标准库std_msgs/String
类型。
现在需要添加location
位置信息,类型为三方库geometry_msgs/Twist
。
此处使用这种类型不一定复合实际业务,但是我们可以使用这种类型进行**教学演示**,来**体会这种使用策略**。
要求实现这个两个节点,并且模拟数据发布和订阅!
业务分析¶
在此处,我们希望location
的类型是geometry_msgs/Twist
,我们对Team.msg
实际编码为:
1 2 3 4 |
|
实现步骤¶
- 首先复杂类型的自定义消息
- 实现publisher
- 实现subscriber
- 模拟数据发布
消息定义流程¶
1. 修改Team.msg¶
1 2 3 4 |
|
3. 修改package.xml文件¶
添加依赖配置:
1 2 3 |
|
2. 修改过CMakeLists.txt¶
find_package配置¶
在find_package
中添加如下:
1 2 3 4 5 6 7 |
|
Tip
添加geometry_msgs
是方便编译器在查找包时,能找到这个库。
generate_messages配置¶
在generate_messages
中添加geometry_msgs
如下:
1 2 3 4 5 |
|
Tip
此处是为了生成定义好的头文件而去做配置
检验自定义消息¶
1. 编译项目¶
来到工作空间目录下,运行编译
1 |
|
2. 查看生成的消息文件¶
c++的头文件¶
来到devel
的include
目录下,如果生成了头文件说明,自定义消息创建成功。
python的py文件¶
来到devel
的lib/python2.7/dist-package
目录下,查看是否生成和package名称相同的目录,以及目录内是否生成对应的py
文件。
3. 通过rosmsg工具校验¶
1 |
|
查看运行结果,运行结果和自己定义的相一致,说明成功。