前言
尽管ROS中提供了全面的基本数据类型消息,但在很多场合,我们希望根据自己的需要定义数据类型,一个典型的例子是can总线数据帧的传递,数据包中包括id号,数据长度以及数据部分,我们希望每个部分都有一个变量名称来表示,通常我们在这种场合会使用一个结构体封装数据,在ROS中,可以用自定义msg完成用户数据封装的功能。
参考示例
以can数据帧的封装为例,来学习一下自定义msg的使用方法。
1.定义用户数据
这一步比较简单,在程序包文件夹下新建一个msg文件夹,在文件夹下新建一个can_data.msg文件,并在文件中写入以下内容
这样就定义好了一个自定义消息,msg文件的名称就是消息的类型。
2.添加编译支持
为了让自定义的数据类型能够使用,需要将它编译成ROS中的消息。在使用std_msgs时,我们知道,要使用某个数据类型的消息,需要包含对应的头文件。因此需要将.msg文件编译生成.h文件,并在使用自定义消息的场合包含改头文件。我们需要做以下几处更改。
package.xml
package.xml需要添加编译依赖项和运行依赖项
|
|
CmakeList.txt
find_package()中添加message_generation
add_message_files()中添加can_data.msg
generate_messages()去掉注释
catkin_package()添加message_runtime
在程序中要使用can_data数据类型时,要包含头文件#include “custom_msgs_demo/can_data.h”,头文件是ROS编译自动生成的,这样,就能在程序中定义和使用can_data类型对象
|
|
参考代码
完整工程参考
https://github.com/wenglihong/wlh_ros_demo/tree/master/msg_demo/custom_msgs_demo