• 话题通讯自定义msg


    前言

     

    在ROS通信协议中,ROS中通过std_msgs封装了一些原生的数据类型,比如:String,Int32,Char,Bool,Int64,Empty

    但是这些数据一般只包含一个data字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如:激光雷达的信息,std_msgs由于描述性就会不理想,这种场景下可以使用自定义的消息类型。

    msgs只是简单的文本文件,每行具有字段类型和字段名称,可以使用的字段类型有:

    string

    float32 float64

    time duration

    int8 int16 int32 int64

    other msg files

    variable-length array[] and fixed-length array[C] (数组)

    ROS中还有一种特殊类型:Header,标头包含时间戳(消息被发出去的那一刻的时间值)和ROS中常用的坐标帧信息。会经常看到msg文件的第一行具有Header标头。

    流程简介:

    1、按照固定格式创建msg文件

    2、编辑配置文件

    3、编译生成可以被Python或C++调用的中间文件

    1、定义msg文件(类似结构体)

    功能包下新建msg目录,添加文件Person.msg

    1. string name
    2. uint16 age
    3. float height

    2、编辑配置文件

    package.xml 中添加编译依赖与执行依赖


    1. <build_depend>message_generationbuild_depend>
    2. <exec_depend>message_runtimeexec_depend>

    CmakeList.txt 编辑msg相关配置


    1. find_package(catkin REQUIRED COMPONENTS
    2. roscpp
    3. rospy
    4. std_msgs
    5. message_generation
    6. )
    7. #需要加入 message_generation,必须有 std_msgs

    ##配置msg源文件
     

    1. add_message_files(
    2. FILES
    3. Person.msg
    4. )

    ##生成消息时依赖于 std_msgs
     

    1. generate_messages(
    2. DEPENDENCIES
    3. std_msgs
    4. )

    ##执行时依赖
     

    1. catkin_package(
    2. # INCLUDE_DIRS include
    3. # LIBRARIES demo02_talker_listener
    4. CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
    5. # DEPENDS system_lib
    6. )

    演示

    1、在plumbing_pub_sub中新建文件夹msg

    2、在msg中间中新建Person.msg文件

    3、打开Person.msg文件

    在里面输入

    1. string name
    2. int32 age
    3. float32 height

     配置相关文件

    打开package.xml

    std_msgs后面添加

    message_generation

    std_msgs后面添加

    message_runtime

    打开CMakeLists.txt文件

    找到

    1. find_package(catkin REQUIRED COMPONENTS
    2. roscpp
    3. rospy
    4. std_msgs
    5. )

    将其替换成

    1. find_package(catkin REQUIRED COMPONENTS
    2. roscpp
    3. rospy
    4. std_msgs
    5. message_generation
    6. )

    找到

    1. # add_message_files(
    2. # FILES
    3. # Message1.msg
    4. # Message2.msg
    5. # )

    将其替换成

    1. add_message_files(
    2. FILES
    3. Person.msg
    4. )

    找到

    1. # generate_messages(
    2. # DEPENDENCIES
    3. # std_msgs
    4. # )

    将其注释去掉

    generate_messages(

    DEPENDENCIES

    std_msgs

    )

    找到

    1. catkin_package(
    2. # INCLUDE_DIRS include
    3. # LIBRARIES plumbing_pub_sub
    4. # CATKIN_DEPENDS roscpp rospy std_msgs
    5. # DEPENDS system_lib
    6. )

    将其替换成

    catkin_package(

    # INCLUDE_DIRS include

    # LIBRARIES plumbing_pub_sub

    CATKIN_DEPENDS roscpp rospy std_msgs message_runtime

    # DEPENDS system_lib

    )

    然后编译一下

    看到 项目名称/devel/include下面出现Person.h

    和 项目名称/devel/lib/python3/msg下面出现_Person.py

    则证明你的自定义消息类型已经实现了

    53. 54. 052话题通信_自定义msg_实现_Chapter2-ROS通信机制_哔哩哔哩_bilibili

  • 相关阅读:
    Leetcode 300.最长递增子序列
    spark sql 的join调优
    CAA开发,3DE服务mql、lic 、cnext等部分参考指令
    自动化平台切砖【Django】,持续推进。。。
    HT for Web (Hightopo) 使用心得(7)- 3D场景环境配置(阴影,灯光,环境光)
    【生物信息学】基因富集分析
    集成电路自动化测试的优势是什么?
    简单的一个两层的一维卷积网络
    新版TCGA的突变数据SNP下载和整理
    mysql---squid代理服务器
  • 原文地址:https://blog.csdn.net/qq_50942093/article/details/126198721