一、前言
ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty.... 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如: 激光雷达的信息(距离,角度,信号强度等各种数据类型的强度复合)... std_msgs 由于描述性较差而显得力不从心,这种场景下可以使用自定义的消息类型。
msgs只是简单的文本文件,每行具有字段类型和字段名称,可以使用的字段类型有:
-
int8, int16, int32, int64 (或者无符号类型: uint*)
-
float32, float64
-
string
-
time, duration
-
other msg files
-
variable-length array[] and fixed-length array[C]
ROS中还有一种特殊类型:Header
,标头包含时间戳和ROS中常用的坐标帧信息。会经常看到msg文件的第一行具有Header标头
二、需求及流程
创建自定义消息,该消息包含人的信息:姓名、身高、年龄等。
流程:
- 按照固定格式创建 msg 文件
- 编辑配置文件
- 编译生成可以被 Python 或 C++ 调用的中间文件
三、实现
新建文件夹msg,并创建文件Person.msg,注意文件的后缀为.msg
在msg中写入内容:
string name
int32 age
float32 height
在package.xml和CMakeList.txt中配置:
在package.xml中:
在cmakelist.txt中:
编译功能包
VSCode中 Ctrl+Shift+B
编译之后,生成头文件至此:
小提示:
当你点开Person.h发现报错,那是没问题的。若要解决这个误报,可以参考
https://blog.csdn.net/txr152111/article/details/119780657中的
0.先配置VSCode(为了代码提示和误抛异常)
加个路径即可。