Message按照定义解释就是topic内容的数据类型, 也称之为topic的格式标准。

1、结构与类型

基本的msg包括bool、 int8、 int16、 int32、 int64(以及uint)、 float、 float64、 string、 time、
duration、 header、 可变长数组array[]、 固定长度数组array[C]。

2、操作命令

3、常见message

常见的message类型, 包括std_msgs, sensor_msgs, nav_msgs,geometry_msgs等 。

使用 msg

创建一个 msg

  • 增加Num.msg文件

$ roscd your_packagename
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
  • 上面是最简单的例子——在.msg文件中只有一行数据。
  • 当然,你可以仿造上面的形式多增加几行以得到更为复杂的消息:
string first_name
string last_name
uint8 age
uint32 score

  • 接下来,还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码:
  • 查看package.xml, 确保它包含一下两条语句,没有被注释掉,如果被注释了就取消注释:

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

或者

<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>

出错请看;https://blog.csdn.net/fancyop/article/details/79149402

如果有其他依赖也要添加
  • 如果没有,添加进去。

  • 注意:在构建的时候,我们只需要"message_generation"。

  • 然而,在运行的时候,我们只需要"message_runtime"。

  • 在CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。

  • 你可以直接在COMPONENTS的列表里增加message_generation,就像这样:

find_package(catkin REQUIRED COMPONENTS 
roscpp
rospy
std_msgs
message_generation)
  • 找到如下代码块:# add_message_files(
#   FILES
# Message1.msg
# Message2.msg
# ) # generate_messages(
#   DEPENDENCIES
#   std_msgs
# )
  • 在catkin_package函数中去掉#加入message_runtime依赖
  • catkin_package(
  • ...
  • CATKIN_DEPENDS message_runtime
  • ... ...)
  • 去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样:
add_message_files(
FILES
Num.msg
)
去掉注释符号#
generate_messages(
   DEPENDENCIES
   std_msgs
 )

使用以下命令进行编译:
$ cd ~/catkin_ws/
$ catkin_make

使用 rosmsg验证是否编译成功

  • 以上就是你创建消息的所有步骤。

  • 下面通过rosmsg show命令,检查ROS是否能够识消息。

  • 使用方法:

$ rosmsg show [message type]
  • 样例:
$ rosmsg show beginner_tutorials/Num
  • 你将会看到:
int64 num
  • 在上边的样例中,消息类型包含两部分: beginner_tutorials

    • 消息所在的package Num
    • 消息名Num.
  • 如果你忘记了消息所在的package,你也可以省略掉package名。

  • 输入:

$ rosmsg show Num
  • 你将会看到:
[beginner_tutorials/Num]:
int64 num

使用Message的更多相关文章

  1. Eclipse 4.2 failed to start after TEE is installed

    ---------------  VM Arguments---------------  jvm_args: -Dosgi.requiredJavaVersion=1.6 -Dhelp.lucene ...

  2. ABP文档 - Javascript Api - Message

    本节内容: 显示信息 确认 Message API给用户显示一个信息,或从用户那里获取一个确认信息. Message API默认使用sweetalert实现,为使sweetalert正常工作,你应该包 ...

  3. 代码的坏味道(20)——过度耦合的消息链(Message Chains)

    坏味道--过度耦合的消息链(Message Chains) 特征 消息链的形式类似于:obj.getA().getB().getC(). 问题原因 如果你看到用户向一个对象请求另一个对象,然后再向后者 ...

  4. java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE

    Android发出HTTP请求时出现了这个错误: java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INST ...

  5. POJ2774 Long Long Message [后缀数组]

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 29277   Accepted: 11 ...

  6. Android消息处理机制(Handler、Looper、MessageQueue与Message)

    Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...

  7. Logstash时区、时间转换,message重组

    适用场景 获取日志本身时间 日志时间转Unix时间 重组message 示例日志: hellow@,@world@,@2011-11-01 18:46:43 logstash 配置文件: input{ ...

  8. Kafka消息时间戳(kafka message timestamp)

    最近碰到了消息时间戳的问题,于是花了一些功夫研究了一下,特此记录一下.   Kafka消息的时间戳 在消息中增加了一个时间戳字段和时间戳类型.目前支持的时间戳类型有两种: CreateTime 和 L ...

  9. infopath发布的提示“无法解析SOAP消息”(The SOAP message cannot be parsed)问题解决方案

    最近发现一个列表数据过大,每次发布infopath表单提示如下错误: 后来发现一个infopath表单通过list.asmx and Formsservice.asmx来进行发布的. This err ...

  10. 阶段一:用Handler和Message实现计时效果及其中一些疑问

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 本来是打算继续做天气预报的优化的,但因为某些原因,我要先把之前做的小应用优化一下.所以今天就插播一下用Handle ...

随机推荐

  1. 设计模式学习——抽象工厂模式(Abstract Factory Pattern)

    现有一批装备(产品),分为不同的部位(上装.下装)与不同的等级(lv1.lv2).又有不同lv的工厂,只生产对应lv的全套装备. 代码实现上...本次写得比较偷懒,函数实现都写在头文件了.... 有些 ...

  2. 对MVC模式与MVVM模式的认识

    MVC模式与MVVM模式目的一样,主要是分离模型(model)和视图(view),具体介绍如下. 名词介绍 MVC模式:指的是模型(Model)-- 视图(View)-- 控制器(Controller ...

  3. 【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)

    今天编写类的程序的时候不小心把类后的分号忘写了,就出现上面的错误提示. 顺便复习下类的正确格式: class 类名 { public: //习惯上将公有类型放在前面,便于阅读 ……(外部接口) pro ...

  4. MySQL无法启动、服务没有报告任何错误&初次登陆错误的解决

    先以管理员身份运行cmd(右键单击左下角win菜单) 输入mysqld -install,net start mysql,下图是返回结果.报错情况以及修正之后的全过程 启动失败之后输入mysqld - ...

  5. The Go scheduler

    转载自:http://morsmachine.dk/go-scheduler Introduction One of the big features for Go 1.1 is the new sc ...

  6. java笔记--线程休眠sleep()的运用

    线程休眠sleep()方法的运用 在多线程编程中,有时需要让某个线程优先执行.除了可以设置这个线程的优先级为最高外,更加理想的方法是休眠其他线程,若有线程中断了正在休眠的线程,则抛出Interrupt ...

  7. 配置consul为windows服务

    安装consul并配置为系统服务下载地址https://www.consul.io/downloads.html 配置系统服务1.拷贝consul.exe的目录 如:E:\Consul\consule ...

  8. CentOS针对磁盘IO[jdb2进程]的优化

    CentOS的jdb2进程总是沾满io,查了一些资料后才知道,这个问题源自系统bug,在此记录一下解决办法: 将高IO的磁盘,用以下参数remount即可 mount -t ext4 -o remou ...

  9. 解决Failed to load the JNI shared library xxx/xxx/jvm.dll 错误

    原因:jdk发生变化(新装了32位jdk),eclipse在启动时使用了 系统环境变量中的jdk路径(32位). 解决:只要把旧的64位的jre路径指定给eclipse启动文件即可. 在eclipse ...

  10. Hadoop HBase概念学习系列之HBase里的时间戳(二十六)

    HBase集群要求每个节点的时间必须同步.HBase对于节点的时间扭曲(time skew)容忍度很低(这和HDFS是不一样的). 这主要是因为HBase需要使用系统时间来产生时间戳.如果系统时间不同 ...