文章目录

  • 消息描述规范
    • 字段
      • 字段类型
      • 字段名
    • 常量
  • 编译消息文件
  • 关于std_msgs

参考:http://wiki.ros.org/msg

ros使用一套简化的消息描述语言来描述ros节点所发布的数据。ros工具可以根据消息描述为消息类型生成不同目标语言的消息代码,消息描述保存在.msg结尾的文件,放在ros包的msg子目录。

rosmsg命令行工具打印消息定义信息,查找使用该消息的源文件

消息描述规范

.msg文件包含字段常量两部分。

一个字段由字段类型和字段名组成,

字段

fieldtype1 fieldname1
fieldtype2 fieldname2
fieldtype3 fieldname3

如:

int32 x
int32 y

字段类型

类型可以是

  • 内置类型,如float32,string,

  • 也可以是自定义类型,geometry_msgs/PoseStamped。

  • 还可以是上面类型的固定或者可变长度的数组/列表。

“float32[] ranges” or “Point32[10] points”

  • 头文件类型

实际上自定义数据类型是由内置类型组成。

内置类型:

Primitive Type Serialization C++ Python2 Python3
bool (1) unsigned 8-bit int uint8_t (2) bool
int8 signed 8-bit int int8_t int
uint8 unsigned 8-bit int uint8_t int (3)
int16 signed 16-bit int int16_t int
uint16 unsigned 16-bit int uint16_t int
int32 signed 32-bit int int32_t int
uint32 unsigned 32-bit int uint32_t int
int64 signed 64-bit int int64_t long int
uint64 unsigned 64-bit int uint64_t long int
float32 32-bit IEEE float float float
float64 64-bit IEEE float double float
string ascii string (4) std::string str bytes
time secs/nsecs unsigned 32-bit ints ros::Time rospy.Time
duration secs/nsecs signed 32-bit ints ros::Duration rospy.Duration

数组类型的原型

Array Type Serialization C++ Python2 Python3
fixed-length no extra serialization 0.11+: boost::array<T, length>, otherwise: std::vector<T> tuple (1)
variable-length uint32 length prefix std::vector<T> tuple (1)
uint8[] see above as above str bytes (2)
bool[] see above std::vector<uint8_t> list of bool

上表的意思是说,可变长度的类型,比如T,那么其数组类型,在C++里的底层实现是std::vector<T>,即类型为T的vector,其他类似。

字段名

字段名会变成目标语言访问消息数据的名字。例如后面学习的std_msgs下的各种内置类型,它的字段名就是data,所以我们在访问该类型的数据时,假如该消息对象叫obj,那么就是obj,data。

只能是字母数字下划线。

常量

constanttype1 CONSTANTNAME1=constantvalue1
constanttype2 CONSTANTNAME2=constantvalue2

例如:

int32 X=123
int32 Y=-123
string FOO=foo
string EXAMPLE="#comments" are ignored, and leading and trailing whitespace removed

整型数赋值只能是10进制。

string类型常量所有空格都会被自动移除。

编译消息文件

package.xml加上以下两句:

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

一个是构建依赖,一个是运行依赖。

导出消息运行依赖:

catkin_package(...CATKIN_DEPENDS message_runtime ......)

添加你自己的消息文件:

add_message_files(FILESMessage1.msgMessage2.msg
)

添加你的消息所依赖的消息:

 generate_messages(DEPENDENCIESstd_msgs
)

关于std_msgs

ros利用ros内置类型定义了一系列消息类型,这就是std_msgs,它们的字段名都叫data,这在链接可以查找。

消息文件:
https://github.com/ros/std_msgs

ROS 消息描述格式、消息编译、内置消息介绍相关推荐

  1. eslint内置规则介绍

    内置规则 eslint 内置规则介绍 eslint 推荐配置 eslint 内置规则介绍 modules.exports = {// 所有规则页面(https://eslint.org/docs/ru ...

  2. ASP.NET的内置对象介绍

    ASP.NET的内置对象介绍 1.Response 2.Request 3.Server 4.Application 5.Session 6.Cooki Request对象主要是让服务器取得客户端浏览 ...

  3. Hive学习之路(四):Hive内置函数介绍与实现WordCount

    内容简介 一.Hive内置函数介绍 二.Hive常用内置函数介绍 1.数值计算函数 2.字符串操作函数 3.日期函数 4.聚合函数 5.表生成函数 三.使用Hive函数完成WordCount 1.创建 ...

  4. 深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇...

    笨笨长期以来一直使用Origin软件画图和处理数据,但Origin软件没有编程语言的接口.笨笨开发CChart的一个潜在的目标.是想实现Origin软件的功能.当然这是一个不可能达到的目标.Origi ...

  5. Windows2003内置用户组介绍

    内置普通组: Administrators 属于该administators本地组内的用户,都具备系统管理员的权限,它们拥有对这台计算机最大的控制权限,可以执行整台计算机的管理任务.内置的系统管理员帐 ...

  6. python提供的内置函数有哪些_python内置函数介绍

    内置函数,一般都是因为使用频率比较频繁,所以通过内置函数的形式提供出来.对内置函数通过分类分析,基本的数据操作有数学运算.逻辑操作.集合操作.字符串操作等. 说起我正式了解内置函数之前,接触到的是la ...

  7. PromQL 中内置函数介绍

    Prometheus 提供了其它大量的内置函数,可以对时序数据进行丰富的处理. 某些函数有默认的参数,例如:year(v=vector(time()) instant-vector).其中参数 v 是 ...

  8. 骁龙820A:内置芯片介绍

    高通骁龙820A内置了Hexagon 680 DSP芯片,如下图所示,可见Hexagon 680在其中占据了很重要的位置. DSP中存在专门处理JPEG图像压缩的部分,这部分内容专门只针对JPEG图像 ...

  9. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015             本文主要对从安卓系统 ...

最新文章

  1. Windows客户端C/C++编程规范“建议”——函数
  2. undefined reference to 'typeinfo for android::Thread'
  3. Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
  4. 定时任务 - 定时任务弊端与优化方案
  5. 【算法系列之十四】最大子序和
  6. Jenkins自动编译库并上传服务器
  7. property属性[Python]
  8. C++Primer第四版 阅读笔记 第二部分 “容器和算法”
  9. petshop 数据库
  10. 多线程同步执行,CountDownLatch使用
  11. Python中常见的字符串小笔试题
  12. 中国移动java开发笔试_中国移动苏州研发中心面试经验
  13. Qt+STK项目配置
  14. 你了解实时3D渲染吗?实时渲染软件和应用场景科普来了
  15. 实施整体变更控制-管理过程
  16. flea-db使用之JPA封装介绍
  17. java-net-php-python-jsp学生社团信息演示录像2019计算机毕业设计程序
  18. Lacking counting POJ.NO 2386
  19. 2自由度悬架LQR控制
  20. 网站搭建教程(详细步骤)

热门文章

  1. JVM 堆(heap)详解
  2. 【Python基础】面向对象封装 案例(一)
  3. CPU使用率高,如何快速定位
  4. Java获取首字母拼音码和五笔码
  5. 5G相关知识梳理:MEC UPF MEP
  6. SelectKey returned more than one value
  7. html页面如何渗透,渗透技术再升级:如何利用HTML注入泄漏用户数据
  8. 使用@supports完美兼容CSS属性
  9. 欧拉图——Euler Graph
  10. 李代数求导与扰动模型