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消息,週期性地發 送到達目標地點進程的百分比。

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