一、创建msg文件(相当于一个结构体)

  • 在catkin_ws/src: mkdir msg
  • catkin_ws/src/msg: touch xxx.msg chmod 777 xxxx.msg
  • 编辑msg文件(定义数组):
    **float32[] X
    float32[] Y
    float32[] Z**
  • 打开package.xml文件,确保里面存在这两行且去掉它们的注释:
    message_generation
    message_runtime
  • 打开包src目录下的CMakeLists.txt文件,然后打开包目录下的CMakeLists.txt
    文件,在find_message调用中添加message_generation依赖,让你可以生成ROS信息。
    如下所示,括号里添加一项message_generation即可
    ***find_package(catkin REQUIRED COMPONENTS
    roscpp
    rospy
    std_msgs
    message_generation
    )

  • 确保你加入了message_runtime 依赖,如图所示:

  • 接着在add_message_files 里面去掉注释,改为:
    add_message_files(
    FILES
    Num.msg //编辑的msg文件名
    )
  • 保证generate_messages()函数被调用:去掉注释,修改为:
    generate_messages(
    DEPENDENCIES
    std_msgs
    )
  • catkin_make编译会自动生成xxxx.h头文件(路径:devel/include/xxxx.h)

总结:

  • 在msg目录下使用msg文件语法定义一个msg
  • 修改CmakeLists.txt,在find_package调用中,添加message_generation依赖
  • 修改CmakeLists.txt,在catkin_message下添加message_runtime依赖
  • 修改CmakeLists.txt,去掉add_message_files注释,添加我们自己定义的msg文件
  • 修改CmakeLists.txt,去掉generate_messages()的注释

二、使用msg文件

  • catkin_make编译完之后,rosmsg show beginner_tutorials/xxx会得到:
    float32[] X
    float32[] Y
    float32[] Z
  • 在需要用到msg文件中自定义的类型的文件中加入编译该文件时自动生成的xxx.h头文件,如:#include “ControlRobot/RobotControl.h”,其中ControlRobot 是该msg文件所处的包的名称。

*注意:msg文件自定义数据类型其实就是一个结构体类型,所以使用的时候就是相当于定义一个结构体成员变量
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
}stu1,stu2;*
三、自定义发布消息的类型
这里举一个例子:
RobotControl.msg:(相当于定义了一个含有三个一维数组作为成员的结构体类型)
float32[] X
float32[] Y
float32[] Z

TestPublish.cpp:

#include "ControlRobot/RobotControl.h"
nt main(int argc, char **argv){ros::init(argc, argv,"TestPublish");ros::NodeHandle n;ros::Publisher cordinate_pub = n.advertise<ControlRobot::RobotControl>("RobotCordinate",1000);    //发布的主题名称 (定义了消息发布类型:ControlRobot::RobotControl )ros::Rate loop_rate(10);while(ros::ok()){ControlRobot::RobotControl RobotCordinate; //相当于定义了一个结构体变量RobotCordinate.X.resize(6);                       //一定要定义数组大小,否则会出现段错误RobotCordinate.Y.resize(6);RobotCordinate.Z.resize(6);for(int i = 0; i<6; i++){RobotCordinate.X[i] = i;                       //把Kinect获取的骨骼坐标赋值后发布出去(在此处赋值)RobotCordinate.Y[i] = i;RobotCordinate.Z[i]=  i;}cordinate_pub.publish(RobotCordinate);ros::spinOnce();loop_rate.sleep();}
return 0;
}

ROS之msg文件定义以及自定义发布主题消息类型相关推荐

  1. ROS中7自由度机械臂自定义发布订阅节点

    本篇用来记录一次作业的学习例程,错误之处敬请谅解,后续修改 作业要求: 写两个ROS节点,一个节点发布连续变化(可以按sin曲线变化)的7自由度的关节角信息:另一个节点订阅第一个节点发布的关节角信息, ...

  2. ros接入IMU数据,打包发布topic

    1 串口读入IMU数据 1.1 serial工具 IMU接入ros系统可以使用I2C,串口或者其他方式实现,这里考虑使用usb转TTL解决. 参考博客ROS使用官方包进行串口通信 几点说明: 在cat ...

  3. ROS:定制自己的消息类型msg

    在实际应用中,我们可能想发布自己的消息类型,就像众所周知的Twist类型或者航向信息Odometry一样,那么到底如何定制自己想要的消息类型?本文楼主以自己调试过程中监控机器人左右轮速度来进行演示. ...

  4. ros操作命令与实操-话题发布

    在 ROS 同提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下: rosnode : 操作节点 rostopic : 操作话题 rosservice : 操作服务 rosms ...

  5. ros学习笔记12——python实现发布和接收ros topic

    ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...

  6. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

    ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...

  7. ros 单向通讯 talker,listener 发布订阅模型

    原文链接: ros 单向通讯 talker,listener 发布订阅模型 上一篇: VirtualBox 端口转发(端口映射) 主机和虚拟机相互访问 下一篇: python 串口编程 发布订阅模型 ...

  8. 【ROS】实操_话题发布

    需求描述:编码实现乌龟运动控制,让小乌龟做圆周运动. 结果演示: 实现分析: 乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模 ...

  9. MQTT订阅发布主题

    MQTT订阅发布主题 前言: 因为tcp协议正常会出现丢包.卡死等现象,所以最近需要在项目中添加mqtt协议,mqtt协议的qos机制保证在网络条件比较差的情况下也能保持良好通信,反正它的各种好处网上 ...

最新文章

  1. 【MATLAB】矩阵分析之向量和矩阵的范数运算
  2. 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术
  3. Oracle 10g RAC OCR 和 VotingDisk 的备份与恢复
  4. 恢复qsecofr密码
  5. SCU 4438 Censor
  6. Amcharts 柱状图和线形图
  7. 行驶在傍山的道路上_进藏线上那些唯美弯道,行驶中却充满风险,自驾游要注意几个事项...
  8. visual studio开启多核编译方法
  9. [转载] Python中的switch语句的替代品
  10. C/C++ 安全编码 —— 不安全的函数
  11. 91卫图助手下载器永久免费啦
  12. nali——linux显示IP来源的工具
  13. JS截取视频靓丽的帧作为封面
  14. xlsx表格怎么筛选重复数据_怎样在excel2010中筛选出重复数据呢?
  15. 云上PDF怎么删除页眉页脚_Word文档如何删除页眉页脚横线?如何取消文档页眉横线?...
  16. Java实现矩阵运算——矩阵乘法、矩阵转置、自动填充矩阵行
  17. [源码分析] Facebook如何训练超大模型 --- (3)
  18. 海外社交媒体SNS运营之社交媒体概览
  19. 【JAVA】MANIFEST.MF / CERT.SF 中 文件SHA1-Digest计算方法
  20. ssh中dao自定义的模板类

热门文章

  1. mysql strip_strip 命令的用法
  2. SwiftUI 语音合成与语言识别教程之 03 实现录音文件转文字(含完整项目源码)SFSpeechURLRecognitionRequest
  3. 从赛马游戏看CyclicBarrier,从斗地主看CountDownLatch
  4. 架构:安全架构——信息过滤与反垃圾、风险控制。
  5. TensorFlow1.14或TensorFlow2内部获取mfcc原理探索(matlab复现或python复现)
  6. teamviewer13安装个人免费版
  7. H3C防火墙升级系统版本报错:No sufficient storage space on the device
  8. 常见的数值积分方法_欧拉积分/中值积分/龙格-库塔积分
  9. 108页《SpringBoot 学习笔记完整教程》PDF附下载
  10. mybatis(错误二) 项目启动时报“Result Maps collection already contains value forxxx”的解决方案