1、msg和srv究竟有什么区别??

msg只是单向的发送和接受。

srv包含两个部分:请求和响应。

2、msg和srv简介

  • msg:msg文件是描述ROS消息字段的简单文本文件。它们用于为不同语言(c++或者python等)的消息生成源代码。
  • srv:srv文件用来描述服务。它由两部分组成:请求(request)和响应(response)。

msg文件存储在包的msg目录中,而srv文件存储在srv目录中。

msg和srv文件的定义格式:

msg只是简单的文本文件,每行有一个字段类型和字段名称。您可以使用的字段类型有(如同c++定义变量int x 中的int):

1 int8,int16,int32,int64(plus uint *)
2 float32,float64
3 string
4 time,duration
5 其他msg文件
6 可变长度数组array[]和固定长度数组array[C]

srv文件和msg文件相似,除了它包含两个部分:请求和响应。这两部分用“---”线分隔。下面是一个srv文件的示例:

1 int64 A
2 int64 B
3 ---
4 int64 Sum

在上面的例子中,A和B是请求,Sum是响应。

在ROS中还有一种特殊类型:Header,它包含在ROS中常用的时间戳和坐标系信息。你会经常看到一个msg文件中的第一行有Header header。
下面是一个使用Header,字符串基元和另外两个msg的msg示例:

1 Header header
2 string child_frame_id
3 geometry_msgs/PoseWithCovariance pose
4 geometry_msgs/TwistWithCovariance twist

3、使用msg

  • 定义一个新的msg。
  • 打开package.xml,并确保这两行都在其中并取消注释:
1 <build_depend> message_generation </ build_depend>
2 <run_depend> message_runtime </ run_depend>

注意,在构建时,我们需要“message_generation”,而在运行时,我们只需要“message_runtime”。

  • CMakeLists.txt中添加message_generation依赖于find_package中,这样就可以生成消息,使得它看起来是这样的:
1 find_package(catkin REQUIRED COMPONENTS
2 roscpp
3 rospy
4 std_msgs
5 message_generation
6 )
  • 还要确保导出消息运行时依赖关系。
1 catkin_package(
2 ...
3 CATKIN_DEPENDS message_runtime ...
4 ...)
  • 找到以下代码块:
1 # add_message_files(
2 # FILES
3 # Message1.msg
4 # Message2.msg
5 # )
  • 通过删除取消它#符号,替换为你的消息文件,使得它看起来是这样的:
1 add_message_files(
2 FILES
3 Num.msg
4 )
  • 对于ROS Hydro及更高版本(也就是从 Ubuntu 12.04 LTS 之后都需要),您需要取消注释以下行:
1 # generate_messages(
2 # DEPENDENCIES
3 # std_msgs
4 # )
  • 所以它看起来像:
1 generate_messages(
2 DEPENDENCIES
3 std_msgs
4 )

4、使用rosmsg

用法:
$ rosmsg show [message type]
例如:
$ rosmsg show beginner_tutorials/Num
如果你不记得msg所在的包,你可以省略包名。尝试:
$ rosmsg show Num

5、使用srv

在使用srv之前我们介绍一个命令:roscp,roscp是一个有用的命令行工具,用于将文件从一个包复制到另一个。
用法:
$ roscp [package_name] [file_to_copy_path] [copy_path]

  • 现在我们可以从rospy_tutorials包复制一个服务:

    • $ roscp rospy_tutorials AddTwoInts.srv srv / AddTwoInts.srv
    • //roscp [包名] [复制的服务名字] [复制的地址]
  • 还有一步。我们需要确保srv文件转换为C ++,Python和其他语言的源代码。

    • 打开package.xml,并确保这两行在其中并取消注释:
1 <build_depend> message_generation </ build_depend>
2 <run_depend> message_runtime </ run_depend>
  • 添加message_generation依赖关系以在CMakeLists.txt中生成消息:
1 find_package(catkin REQUIRED COMPONENTS
2 roscpp
3 rospy
4 std_msgs
5 message_generation
6 )

  (尽管它这样的名字,但是message_generation适用于msg和srv。)

  • 此外,您需要对消息的服务的package.xml进行相同的更改,因此请查看上面所需的其他依赖项。

    • 替换您的服务文件的占位符Service * .srv文件:
1 add_service_files(
2 FILES
3 AddTwoInts.srv
4 )

6、使用rossrv

用法:
$ rossrv show <service type>
例:
$ rossrv show beginner_tutorials / AddTwoInts
类似于rosmsg,你可以找到像这样的服务文件,而不指定包名:
$ rossrv show AddTwoInts

7、总结

1. 创建消息(一共5步):

  • 包中建立msg文件夹,在文件夹中创建*.msg
  • 编辑.msg,定义类型和域名
  • package.xml中添加
1 <build_depend>message_generation</build_depend>
2 <run_depend>message_runtime</run_depend>
  • CMakeLists.txt中添加
 1 find_package(catkin REQUIRED COMPONENTS
2 roscpp
3 rospy
4 std_msgs
5 message_generation
6 )
7 //---------------------------------------
8 add_message_files(
9 FILES
10 Num.msg
11 )
  • 编译

2. 创建服务(一共5步):

  • 创建srv文件夹,创建.srv文件
  • 编辑.srv文件
  • .xml文件
1 <build_depend>message_generation</build_depend>
2 <run_depend>message_runtime</run_depend>
  • CMakeLists.txt中添加
 1 find_package(catkin REQUIRED COMPONENTS
2 roscpp
3 rospy
4 std_msgs
5 message_generation
6 )
7 //---------------------------------------
8 add_service_files(
9 FILES
10 AddTwoInts.srv
11 )
  • 编译

ROS中msg和srv文件的区别的更多相关文章

  1. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!  http://blog.163.com/jiaoruijun07@126/blog/static/68943278201042064246409/        ...

  2. 读书笔记-详解C程序开发中 .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  3. C C语言中 *.c和*.h文件的区别!

    一个简单的问题:.c和.h文件的区别学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼:子程序不要定义在 ...

  4. Linux中环境变量相关文件的区别

    Linux下各种不同环境变量相关文件的作用: 1. /etc/environment  设置整个系统的环境,系统启动时,该文件被执行. 2. /etc/profile     设置所有用户的环境,当用 ...

  5. python中.py和.pyw文件的区别

    :本文为博主原创文章,未经博主允许不得转载. 以下是摘录自百度问题的答案: 严格来说,它们之间的不同就只有一个:视窗运行它们的时候调用不同的执行档案. 视窗用 python.exe 运行 .py ,用 ...

  6. Ros中创建msg和srv遇到的问题

    在创建msg和srv文件之后,使用srv和msg文件时候需要对xml文件进行修改,如下: <build_depend>message_generation</build_depend ...

  7. 建立一个ROS msg and srv

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

  8. 7、创建ROS msg和srv

    一.msg和srv介绍 msg: msg文件使用简单的文本格式声明一个ROS message的各个域. 仅须要创建一个msg文件,就能够使用它来生成不同语言的message定义代码. srv:srv文 ...

  9. Creating a ROS msg and srv

    msg: msg files are simple text files that describe the fields of a ROS message. They are used to gen ...

随机推荐

  1. python类和函数

    #/usr/bin/python #coding=utf-8 class Car(): def __init__(self,name,year): self.name = name self.year ...

  2. How to check in Windows if you are using UEFI

    You might be wondering if Windows is using UEFI or the legacy BIOS, it's easy to check. Just fire up ...

  3. linux 权限命令行 xshell 切换用户

    一. 权限命令行 两种方式. 1.1 chown -R 指定的用户名, 权限的文件/文件夹 赋予这个用户的权限读写. /*1.0 权限命令行 1. chown -R 指定的用户名 权限的文件/文件夹 ...

  4. Linux shell脚本之 if条件判断 (转)

    IF条件判断 1.基本语法: if [ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if [ command ];then 符合该条件执行的语句 elif [ comm ...

  5. linux中vim编辑器三种模式及常用命令的使用

    Linux命令经常使用才会烂熟于心 命令行模式: 移动光标: 向下左右箭头可以移动光标: 将光标移动到行尾:$; 将光标移动到行头:^: 将光标移动到页尾:shift+g; 将光标移动到页头:1+sh ...

  6. LeetCode随缘刷题之转化成小写字母

    这道题应该是最简单的一道题了把,简直在侮辱我. package leetcode.day_12_12; /** * 709. 转换成小写字母 * 给你一个字符串 s ,将该字符串中的大写字母转换成相同 ...

  7. 基于PXIe接口的CoaXpress高速相机图像采集、回放

    PXIe简介 PCI eXtensions for Instrumentation or PXI is a computer-based hardware and software platform ...

  8. 7、架构--location、LNMP架构、uwsgi部署、BBS项目部署

    笔记 1.晨考 1.Nginx中常用的模块 autoindex stub_status allow 和 deny basic limit_conn limit_req 2.配置步骤 1.创建连接池 2 ...

  9. Solution -「Gym 102759C」Economic One-way Roads

    \(\mathcal{Description}\)   Link.   给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,每条边的两种定向方法各有权值,求使得图强连通且定向权值和最小的方法. ...

  10. Dubbo源码剖析一之整体架构设计

    Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中进行Dubbo职能上的简单介绍,下面就其内部进行详细探究: 1.Dubbo调用关系 这个图是不是很熟 ...