ROS学习(四):消息格式

     消息(message)是用于节点之间的数据交换的一种数据形式。前述的话题、服务 和动作都使用消息。消息可以是简单的数据结构,如整数(integer)、浮点(floating point)和布尔值(boolean),或者是像“geometry_msgs/PoseStamped”31一样消 息包含消息的简单的数据结构,或者也可以是像 “float32[ ] ranges”或“Point32[10] points”之类的消息数组结构。另外,ROS中常用的头(header、std_msgs/Header) 也可以作为消息来使用。这些消息由两种类型组成:字段类型(fieldtype)和字段名称 (fieldname)。

    字段类型应填入ROS数据类型,如下表所示。字段名称要填入指示数据的名称。例 如,您可以按照下面两行填入。这只是最简单的消息形式,如果要添加更多的消息,则可 以将字段类型作为如下表所示的数组,并且常常使用消息包含消息的形式。

 

前面讲到ROS中常用的头(header、std_msgs/Header)可以作为消息来使用。更 具体来说,正如std_msgs32的Header.msg文件中描述,会记录序列号、时间戳和框架 ID,利用它们在消息中记录消息的计数以及时间的计算。

消息在程序中的实际用法如下。ROS操作测试中执行的turtlesim功能包 的teleop_turtle_key节点的例子中,根据方向键(←、→、↑、↓)将turtlesim节点 的转速(meter/sec)和旋转速度(radian/sec)用消息发送给turtlesim_node节点。 乌龟机器人使用接收到的速度值在屏幕上移动。此时使用的消息是geometry_msgs中的 Twist33消息,是如下形式。

 它以Vector3消息的形式声明了linear和angular。它是消息包含消息的形式,其中, Vector3消息是geometry_msgs34之一。这个Vector335具有以下形式。

换句话说,从teleop_turtle_key节点发布的话题是linear.x、linear.y、linear.z、 angular.x、angular.y和angular.z。所有这些都是float64格式,这是上面描述的ROS基本类型之一。利用它,键盘的箭头以平移速度(meter/sec)和旋转速度(radian/sec) 消息传送,从而驱动TurtleBot。

     前一篇博文中描述的基于消息的话题、服务和动作都使用消息,这些消息在形式和概念上 都是相似的,但根据其用法分为三类。这将在接下更详细地讨论。

1.msg文件

msg文件是用于话题的消息文件,扩展名为*.msg。例如,上述geometry_msgs中的 Twist36消息是有代表性的。这种msg文件只包含一个字段类型和一个字段名称。

2.srv文件

     srv文件是服务使用的消息文件,扩展名为*.srv。例如,sensor_msgs的SetCamera Info37消息是典型的srv文件。与msg文件的主要区别在于三个连字符(---)作为分隔 符,上层消息是服务请求消息,下层消息是服务响应消息。

 3.action文件

     action消息38文件是动作39中使用的消息文件,它使用*.action扩展名。与msg和srv 不同,它不是一个比较常见的消息文件,所以没有典型的官方消息文件,但是可以像下面 的例子一样使用它。与msg和srv文件的主要区别在于,三个连字符(---)在两个地方用 作分隔符,第一部分是goal消息,第二部分是result消息,第三部分是feedback消息。 最大的区别是来自action文件的feedback信息。action文件的goal消息和result消息与 上述srv文件的请求消息和响应消息角色相同,但action文件的feedback消息用于传输指 定进程执行过程中的中途值。在下面的例子中,当机器人的出发点start_pose和目标点 goal_pose的位置和姿态作为请求值被传送时,机器人移动到预定的目标位置并且将发送 最终到达的result_pose的位置和姿态。另外,用percent_complete消息,周期性地发 送到达目标地点进程的百分比。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章