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. 【webpack4.0】---webpack的基本使用(一)

    一.初识webpack 1.什么是webpack? WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss ...

  2. Error:(3, 21) java: 程序包javax.servlet不存在的解决方法

    采用 https://blog.csdn.net/GK666_/article/details/106442929得到解决

  3. K8S 权限控制访问之 rbac

    RBAC API类型 RBAC API 所声明的四种顶级类型[Role.ClusterRole.RoleBinding 和 ClusterRoleBinding].用户可以像与其他 API 资源交互一 ...

  4. django之django-debug-toolbar调试工具配置与使用

    外部链接:https://blog.csdn.net/weixin_39198406/article/details/78821677 django-debug-toolbar的作用:进行性能调优,与 ...

  5. uni微信小程序优化,打包后的import vue路径是可删除的

    这次的优化我公司项目主包只减小了32kb,但是减小的不仅仅是主包,所有分包均在没有改动任何业务代码的情况下完成了压缩空间的优化. 主包分包压缩空间的优化都要视项目而定,32kb只是我公司的小程序项目. ...

  6. c#开方,平方,sin函数计算

    平方运算 private double m; private double n=Math.Pow(m,2.0); 开平方运算 System.Math.Sqrt(数字); double保留两位小数 Ma ...

  7. vivo 评论中台的流量及数据隔离实践

    一.背景 vivo评论中台通过提供评论发表.点赞.举报.自定义评论排序等通用能力,帮助前台业务快速搭建评论功能并提供评论运营能力,避免了前台业务的重复建设和数据孤岛问题.目前已有vivo短视频.viv ...

  8. Linux之shell入门

    一.编写规范 代码规范: #!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器] shell相关指令 文件命名规范: 文件名.sh .sh是linux下bash shell 的默 ...

  9. ubuntu 终端乱码

    转载请注明来源:https://www.cnblogs.com/hookjc/ 解决方法: 一. Ubuntu默认的中文字符编码 Ubuntu默认的中文字符编码为zh_CN.UTF-8, 这个可以在 ...

  10. nginx实现跨域访问并支持(GET, POST,PUT,DELETE, OPTIONS)

    最近有同事提出在使用客户端跨域访问的时候,发现服务器对option请求返回了403,后来查看了网络添加了一段配置,发现option服务返回204了,但是后续的put操作也直接返回了204导致无法使用图 ...