ROS 消息描述格式、消息编译、内置消息介绍
文章目录
- 消息描述规范
- 字段
- 字段类型
- 字段名
- 常量
- 编译消息文件
- 关于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 消息描述格式、消息编译、内置消息介绍相关推荐
- eslint内置规则介绍
内置规则 eslint 内置规则介绍 eslint 推荐配置 eslint 内置规则介绍 modules.exports = {// 所有规则页面(https://eslint.org/docs/ru ...
- ASP.NET的内置对象介绍
ASP.NET的内置对象介绍 1.Response 2.Request 3.Server 4.Application 5.Session 6.Cooki Request对象主要是让服务器取得客户端浏览 ...
- Hive学习之路(四):Hive内置函数介绍与实现WordCount
内容简介 一.Hive内置函数介绍 二.Hive常用内置函数介绍 1.数值计算函数 2.字符串操作函数 3.日期函数 4.聚合函数 5.表生成函数 三.使用Hive函数完成WordCount 1.创建 ...
- 深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇...
笨笨长期以来一直使用Origin软件画图和处理数据,但Origin软件没有编程语言的接口.笨笨开发CChart的一个潜在的目标.是想实现Origin软件的功能.当然这是一个不可能达到的目标.Origi ...
- Windows2003内置用户组介绍
内置普通组: Administrators 属于该administators本地组内的用户,都具备系统管理员的权限,它们拥有对这台计算机最大的控制权限,可以执行整台计算机的管理任务.内置的系统管理员帐 ...
- python提供的内置函数有哪些_python内置函数介绍
内置函数,一般都是因为使用频率比较频繁,所以通过内置函数的形式提供出来.对内置函数通过分类分析,基本的数据操作有数学运算.逻辑操作.集合操作.字符串操作等. 说起我正式了解内置函数之前,接触到的是la ...
- PromQL 中内置函数介绍
Prometheus 提供了其它大量的内置函数,可以对时序数据进行丰富的处理. 某些函数有默认的参数,例如:year(v=vector(time()) instant-vector).其中参数 v 是 ...
- 骁龙820A:内置芯片介绍
高通骁龙820A内置了Hexagon 680 DSP芯片,如下图所示,可见Hexagon 680在其中占据了很重要的位置. DSP中存在专门处理JPEG图像压缩的部分,这部分内容专门只针对JPEG图像 ...
- 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
原文 http://blog.csdn.net/zhaoxy_thu/article/details/18883015 本文主要对从安卓系统 ...
最新文章
- 2021-04-06 neo4j Service stop failed - service ‘neo4j’ not found 请问怎么解决?
- Web.config文件使用
- SAP保存操作记录CDHDR和CDPOS表,通过修改屏幕字段,查找SAP字段表和字段
- android进程调试(ro.debuggable=1或android:debuggable=true)----JDWP线程
- C#调用API弹出打印机属性对话框
- 配置tomcat_Tomcat 配置必备的 10 个小技巧,让你轻松玩转Tomcat
- python 知识点怎么办_python中的小知识点
- 瑞典禁止在5G网络中用华为和中兴设备 同时也将移除老设备
- 计算机网络—SR选择重传协议
- 【安卓学习积累】Android连续点击事件的实现
- 该内存不能read written常见原因
- 参加了iDOF2016会议,发表演讲“油田SOA与云平台的系统思考与实践”
- 电脑复制粘贴不了怎么办?
- 转载:WVGA,QVGA,VGA,HVGA,WQVGA是什么意思?如何区别?
- 人间哪知星空遥:荣耀30系列的巡天计划
- Flink on Yarn报错:Container released on a *lost* node
- 爱了爱了,这样的文字动画让你爱不释手
- 先正达将在科创板上会:拟募资650亿元,预计全年收入超2100亿元
- 【RAID恢复案例】南京财政局磁盘阵列柜数据恢复成功
- Python format方法详解|字符串格式化|format
热门文章
- java 正则 小数_java用正则表达式判断是否是小数的方法
- apache定时自动启动脚本程序代码-apache-Php教程
- linux系统制作裸设备,在unix下和linux下创建裸设备总结
- Struts2——开始学习
- MD5加密算法解释——Java简单应用(java.security.MessageDigest)
- 支持5G LAN的UPF转发模型
- MySQL查询本年数据
- 闪客工具:微信本地调试工具
- 爬虫利器Scrapy之Crawl Spider 模板的使用
- error: RC2135 : file not found: