创建ROS消息(msg)和服务(srv)
一、msg和srv介绍
msg(消息):msg文件就是文本文件,用于描述ROS消息的字段。它们用于为不同编程语言编写的消息生成源代码。
srv(服务):一个srv文件描述一个服务。它由两部分组成:请求(request)和响应(response)。
msg文件存放在软件包的msg目录下,srv文件则存放在srv目录下。
msg文件就是简单的文本文件,每行都有一个字段类型和字段名称。
可以使用的类型为:
- int8, int16, int32, int64 (以及 uint*)
- float32, float64
- string
- time, duration
- 其他msg文件
- variable-length array[] 和 fixed-length array[C]
ROS中还有一个特殊的数据类型:Header,它含有时间戳和ROS中广泛使用的坐标帧信息。在msg文件的第一行经常可以看到Header header。
下面是一个使用了Header、字符串原语和其他两个消息的示例: 下面是一个msg文件的样例,它使用了Header,string和其他另外两个消息的类型。
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
srv文件和msg文件一样,只是它们包含两个部分:请求和响应。这两部分用一条- - -线隔开。下面是一个srv文件的示例:
int64 A
int64 B
---
int64 Sum
在上面的例子中,A和B是请求, Sum是响应。
二、创建功能包
catkin_create_pkg msg_srv roscpp rospy std_msgs
我们看一下所有的文件:
这样我们就创建了一个叫做msg_srv的功能包,以及我们在其子目录下创建了msg、srv两个文件夹用来存放需要的文件。
三、使用msg
1.创建.msg文件
在msg文件夹下创建Person.msg,内容如下:
string name
uint8 sex
uint8 age
uint32 score
uint8 male = 1
uint8 female = 2
2.在package.xml中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
我们要确保msg文件能被转换为C++、Python和其他语言的源代码。
在构建时,其实只需要message_generation,而在运行时,我们只需要message_runtime。
3.在CMakeLists.txt添加编译选项
在CMakeLists.txt文件中,为已经存在里面的find_package调用添加message_generation依赖项,这样就能生成消息了。直接将message_generation添加到COMPONENTS列表中即可,如下所示:
有时即使没有使用全部依赖项调用find_package,项目也可以构建。这是因为catkin把你所有的项目整合在了一起,因此如果之前的项目调用了find_package,你的依赖关系也被配置成了一样的值。但是,忘记调用意味着你的项目在单独构建时很容易崩溃。
还要确保导出消息的运行时依赖关系:
找到如下代码块:
手动添加.msg文件后,我们要确保CMake知道何时需要重新配置项目。
现在必须确保generate_messages()函数被调用:
最终大概是这个样子:
3.编译以及source环境
4.测试
四、使用srv
在srv文件夹下创建Personn.srv(注意不能用和上面一样的Person.srv,因为编译之后它们在同一个文件夹生成的源文件一样)
string name
uint8 age
uint8 sexuint8 unknown = 0
uint8 male = 1
uint8 female = 2---
string result
CMakeLists.txt文件修改:
测试:
msg目录中的任何.msg文件都将生成所有支持语言的代码。
C++消息的头文件将生成在…/devel/include/msg_srv/。Python脚本将创在…/devel/lib/python2.7/dist-packages/msg_srv/msg。而Lisp文件则出现在…/devel/share/common-lisp/ros/msg_srv/msg/。
类似地,srv目录中的任何.srv文件都将生成支持语言的代码。对于C++,头文件将生成在消息的头文件的同一目录中(这就是你不能在同一功能包下定义Person.msg和Person.srv的原因)。对于Python和Lisp,会在msg目录旁边的srv目录中。
本文内容参考:
ROS官方wiki:http://wiki.ros.org
古月——ROS入门21讲
如有错误或者不足之处,欢迎大家留言指正!
创建ROS消息(msg)和服务(srv)相关推荐
- 【ROS实践入门(六)消息msg和服务srv文件创建与使用】
[ROS实践学习入门系列(六)消息msg和服务srv文件创建与使用] 本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流- 联系方式:ziyuanw#foxmail.com(#换成@) 一.创建 ...
- 创建ROS消息和服务---ROS学习第8篇
文章目录 1. msg和srv介绍 2. 使用msg 2.1 创建msg 2.2 使用rosmsg 3. 使用srv 3.1 创建srv 3.2 使用rossrv 4. msg和srv的一般步骤 5. ...
- ROSwiki更正 — 创建ROS消息和ROS服务
根据Wiki在package.xml里添加 <build_depend>message_generation</build_depend> <run_depend> ...
- 操作ROS 的 msg文件 和 srv文件
一.msg文件 1.1 msg文件就是一个简单的text文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (p ...
- ROS学习笔记八:创建ROS msg和srv
ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...
- ROS学习-创建一个ROS msg和一个srv
目录 ROS msg和srv的介绍 使用msg 创建一个msg 使用rosmsg命令 使用srv 创建一个srv 使用rossrv命令 msg和srv的通用步骤 使用Help 简要总结回顾 ROS m ...
- 11_创建ROS msg和srv文件
本教程介绍了如何创建msg和srv文件,以及rosmsg,rossrv,roscp等命令行工具.至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统.鉴于本人水平有限,如 ...
- ROS的学习(十一)ROS的msg和srv
msg是一个描述ROS中消息的域的简单的文本文件,它用来为消息产生不同语言的源代码. 一个srv文件描述一个服务,它由两部分组成,请求和服务. msg文件被存储在一个包的msg目录下,srv文件被存储 ...
- ROS通信机制(二) —— 服务(service)与srv文件
文章目录 简述 特点 相关常用命令 通信模型 核心元素 通信过程 代码示例(服务端和客户端) 服务端(server.cpp) 客户端(client.cpp) 配置 CMakeLists.txt 编译和 ...
最新文章
- MySQL innodb_flush_method 【转载】
- mac搭建php审计环境,[php审计实战篇]Simple-Log v1.6 安装逻辑问题
- 2018-2019 Exp2 后门原理与实践
- 【DirectX12龙书机翻整理】第8章 光照
- redhat linux加密卷
- 利用Excel进行成对(配对)T检验
- Springboot 整合 swagger
- HBase编程 API入门系列之create(管理端而言)(8)
- (02)Verilog HDL模块
- mysql错误1215hy000_无法添加外键约束-MySQL错误1215(HY000)
- 在ubantu16.04系统下安装ros操作系统
- 【在线仿真】Arduino WS2812b环形24颗霓虹灯动态效果显示
- 大数据毕设/课设 - 基于大数据的公司业务监控大数据平台设计与实现
- MFQE 2.0: A New Approach for Multi-FrameQuality Enhancement on Compressed Video
- LTE中SRB---无线资源承载
- SQL SERVER学习记录
- GEP基因表达式编程
- 如何在以太坊网络上发布自己的代币
- 能源实现物联网云平台方案
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法