一、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)相关推荐

  1. 【ROS实践入门(六)消息msg和服务srv文件创建与使用】

    [ROS实践学习入门系列(六)消息msg和服务srv文件创建与使用] 本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流- 联系方式:ziyuanw#foxmail.com(#换成@) 一.创建 ...

  2. 创建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. ...

  3. ROSwiki更正 — 创建ROS消息和ROS服务

    根据Wiki在package.xml里添加 <build_depend>message_generation</build_depend> <run_depend> ...

  4. 操作ROS 的 msg文件 和 srv文件

    一.msg文件 1.1 msg文件就是一个简单的text文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (p ...

  5. ROS学习笔记八:创建ROS msg和srv

    ROS学习笔记八:创建ROS msg和srv 本节主要讲述了如何创建和建立ROS msg和srv,同时使用命令行工具rosmsg.rossrv和roscp. msg和srv简介 msg:描述ROS m ...

  6. ROS学习-创建一个ROS msg和一个srv

    目录 ROS msg和srv的介绍 使用msg 创建一个msg 使用rosmsg命令 使用srv 创建一个srv 使用rossrv命令 msg和srv的通用步骤 使用Help 简要总结回顾 ROS m ...

  7. 11_创建ROS msg和srv文件

    本教程介绍了如何创建msg和srv文件,以及rosmsg,rossrv,roscp等命令行工具.至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统.鉴于本人水平有限,如 ...

  8. ROS的学习(十一)ROS的msg和srv

    msg是一个描述ROS中消息的域的简单的文本文件,它用来为消息产生不同语言的源代码. 一个srv文件描述一个服务,它由两部分组成,请求和服务. msg文件被存储在一个包的msg目录下,srv文件被存储 ...

  9. ROS通信机制(二) —— 服务(service)与srv文件

    文章目录 简述 特点 相关常用命令 通信模型 核心元素 通信过程 代码示例(服务端和客户端) 服务端(server.cpp) 客户端(client.cpp) 配置 CMakeLists.txt 编译和 ...

最新文章

  1. MySQL innodb_flush_method 【转载】
  2. mac搭建php审计环境,[php审计实战篇]Simple-Log v1.6 安装逻辑问题
  3. 2018-2019 Exp2 后门原理与实践
  4. 【DirectX12龙书机翻整理】第8章 光照
  5. redhat linux加密卷
  6. 利用Excel进行成对(配对)T检验
  7. Springboot 整合 swagger
  8. HBase编程 API入门系列之create(管理端而言)(8)
  9. (02)Verilog HDL模块
  10. mysql错误1215hy000_无法添加外键约束-MySQL错误1215(HY000)
  11. 在ubantu16.04系统下安装ros操作系统
  12. 【在线仿真】Arduino WS2812b环形24颗霓虹灯动态效果显示
  13. 大数据毕设/课设 - 基于大数据的公司业务监控大数据平台设计与实现
  14. MFQE 2.0: A New Approach for Multi-FrameQuality Enhancement on Compressed Video
  15. LTE中SRB---无线资源承载
  16. SQL SERVER学习记录
  17. GEP基因表达式编程
  18. 如何在以太坊网络上发布自己的代币
  19. 能源实现物联网云平台方案
  20. 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法

热门文章

  1. ifc文件转换成obj和mtl文件
  2. linux strip作用,linux gcc strip命令简介
  3. github 国内替代产品_2020年7种最佳Github替代品
  4. 信号完整性分析5——信号上升时间
  5. mbedtls 连接 阿里云物联网
  6. HTML中的表格及样式的设置
  7. 转自Avan_Lau
  8. 高等代数 二次型与矩阵的合同(第6章)2 正定二次型与正定矩阵
  9. java号码分身_电话号码分身
  10. 浏览器访问一个页面的步骤详解