自定义Msg消息
自定义消息流程¶
在Ros中,如果没有现成的消息类型来描述要去传递的消息时,我们会自定义消息。
通常我们会新建一个Package来去自定义消息,这个Package一般不去写任何的业务逻辑,只是用来声明自定义的消息类型,可以只定义一种消息类型,也可以定义多种消息类型,根据业务需求来定。
所以,首先我们单独的创建一个package,我们取名为demo_msgs
,一定要要添加roscpp
,rospy
,rosmsg
的依赖。
Tip
这个包名取名也是有讲究的,业务名_msgs
。大家可以看看std_msgs
,geometry_msgs
,都是遵循这个规则。
1 . 创建msg目录¶
在pakage目录下新建msg
目录
2. 新建msg
文件¶
创建的这个Student.msg
文件就是自定义消息文件,需要去描述消息的格式。
我们可以编辑代码如下
1 2 |
|
这个自定义的消息包含两个数据形式,name
和age
,name的类型 是string
,age的类型是int64
。
这个msg文件其实遵循一定规范的,每一行表示一种数据。前面是类型,后面是名称。
ros不只是提供了int64
和string
两种基本类型供我们描述,其实还有很多,具体可以参考附录的内容
3. 配置package.xml文件¶
在package.xml种添加如下配置:
1 2 |
|
Note
message_generation
是消息生成工具,在打包编译时会用到
message_runtime
运行时消息处理工具
4. 配置CMakeLists.txt¶
find_package配置¶
在find_package
添加message_generation
,结果如下:
1 2 3 4 5 6 |
|
add_message_file配置¶
添加add_message_file
,结果如下:
1 2 3 4 |
|
Tip
这里的Student.msg
要和你创建的msg文件名称一致,且必须时在msg目录下,否则编译会出现问题
generation_msg配置¶
添加generation_msg
,结果如下:
1 2 3 4 |
|
Tip
这个配置的作用是添加生成消息的依赖,默认的时候要添加std_msgs
catkin_package配置¶
修改catkin_package
,结果如下:
1 2 3 4 5 6 |
|
Tip
为catkin编译提供了依赖message_runtime
检验自定义消息¶
1. 编译项目¶
来到工作空间目录下,运行编译
1 |
|
2. 查看生成的消息文件¶
c++的头文件¶
来到devel
的include
目录下,如果生成了头文件说明,自定义消息创建成功。
python的py文件¶
来到devel
的lib/python2.7/dist-package
目录下,查看是否生成和package名称相同的目录,以及目录内是否生成对应的py
文件。
3. 通过rosmsg工具校验¶
1 |
|
查看运行结果,运行结果和自己定义的相一致,说明成功。