当前位置 博文首页 > txr152111的博客:10th ROS中话题通信自定义msg

    txr152111的博客:10th ROS中话题通信自定义msg

    作者:[db:作者] 时间:2021-09-01 22:14

    一、前言

    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标头

    二、需求及流程

    创建自定义消息,该消息包含人的信息:姓名、身高、年龄等。

    流程:

    1. 按照固定格式创建 msg 文件
    2. 编辑配置文件
    3. 编译生成可以被 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(为了代码提示和误抛异常)

    加个路径即可。

    cs