ROS中msg和srv文件的区别

摘要:
msg只是单向的发送和接受。srv包含两个部分:请求和响应。我们需要确保srv文件转换为C++,Python和其他语言的源代码。打开package.xml,并确保这两行在其中并取消注释:1message_generation2message_runtime添加message_generation依赖关系以在CMakeLists.txt中生成消息:1find_package(尽管它这样的名字,但是message_generation适用于msg和srv。
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文件的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue项目中 —— rem布局适配方案【转】ubuntu 12.04网络设置,自定义IP地址下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决python3.5无法导入cv2.so的问题

问题描述: 在python3.5环境中导入cv2报错,在python2.7中正常。注:命令行的前缀RL_2018HW是python3.5的环境。 (RL_2018HW) gordon@gordon-5577:$ python Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609...

ROS系统玩转自主移动机器人(5)-- ROS系统建模

注:本篇博文全部源码下载地址为:Git Repo传送门。 1. 下载到本地后解压到当前文件夹然后运行:catkin_make 编译。 2. 源码是在 Ubuntu14.04 + Indigo 环境下编写。   前面博文已经介绍了机器人平台的机械结构设计、嵌入式硬件平台的搭建等内容,从本片开始介绍本开源机器人平台ROS系统的相关程序,主要有: ROS系统建...

Robot Operating System (ROS)学习笔记3---键盘控制

搭建环境:XMWare Ubuntu14.04 ROS(indigo) 转载自古月居 转载连接:http://www.guyuehome.com/253 一、创建控制包1 catkin_create-pkg smartcar_teleop rospy geometry_msgs std_msgs roscpp 2 catkin_make 建包,参考:h...

MoveIt 仿真 Gazebe 教程学习(五)

MoveIt 仿真 Gazebe 教程学习(五)  【古月居】 ROS探索总结(五)——创建简单的机器人模型smartcar,网址如下: https://www.guyuehome.com/243 还有相关的一系列文章都可以看看。 前提: 源码地址:https://github.com/huchunxu/ros_exploring 需要把里面的 ROS2...

ROS之pcl_ros

1 概要:PCL(Point Cloud Library)ROS接口堆,PCL_ROS是在ROS中涉及n维点云和3D几何处理的3D应用的首选桥梁。这个包提供运行ROS和PCL的接口和工具,包括nodelets、nodes和c++接口 2 源码地址: git  https://github.com/ros-perception/perception_pcl....

适合初学者的ROS机器人教程(2): Ubuntu下ROS使用Gazebo和Rviz对UR5机器人建模

作者:知乎@Ai酱 本文的前提是:默认你已安装ROS和Gazebo和Rviz,并且使用Ubuntu。Gazebo显示不出东西?检查下/home/用户名/.gazebo/models下面常见的模型有木有拷贝进去有数以百计的基本模型。 安装UR5的包 $ sudo apt-get install ros-kinetic-ur-gazebo ros-...