ROS中msg和srv文件的区别

您所在的位置:网站首页 woosh是什么意思 ROS中msg和srv文件的区别

ROS中msg和srv文件的区别

2024-07-13 23:41| 来源: 网络整理| 查看: 265

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 message_generation 2 message_runtime

注意,在构建时,我们需要“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 message_generation 2 message_runtime 添加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 例:$ rossrv show beginner_tutorials / AddTwoInts类似于rosmsg,你可以找到像这样的服务文件,而不指定包名:$ rossrv show AddTwoInts

7、总结  1. 创建消息(一共5步): 包中建立msg文件夹,在文件夹中创建*.msg 编辑.msg,定义类型和域名 package.xml中添加 1 message_generation 2 message_runtime 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 message_generation 2 message_runtime 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 ) 编译


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3