ROS學習(四) 訊息格式

2021-09-11 22:08:12 字數 2541 閱讀 6973

訊息(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。

前一篇博文中描述的基於訊息的話題、服務和動作都使用訊息,這些訊息在形式和概念上 都是相似的,但根據其用法分為三類。這將在接下更詳細地討論。

msg檔案是用於話題的訊息檔案,擴充套件名為*.msg。例如,上述geometry_msgs中的 twist36訊息是有代表性的。這種msg檔案只包含乙個字段型別和乙個欄位名稱。

srv檔案是服務使用的訊息檔案,擴充套件名為*.srv。例如,sensor_msgs的setcamera info37訊息是典型的srv檔案。與msg檔案的主要區別在於三個連字元(---)作為分隔 符,上層訊息是服務請求訊息,下層訊息是服務響應訊息。

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

Ros學習筆記(四)建立Ros訊息

學習如何使用.msg檔案建立使用者自定義的訊息,並且在節點中使用這些自定義訊息,這包含乙個關於要傳輸的資料型別的標準。首先在chapter2 turtleial包中建立乙個msg資料夾,在資料夾中建立乙個chapter2 msg.msg檔案,並新增以下命令列 int32 a int32 b int3...

ROS學習之 cpp訊息

parameters rosdistro jade rosversion 1.11.16 和所有ros客戶端庫相同,roscpp使用msg檔案來生成c 模式如下 package name msg foo.msg package name foo 相同地,srv檔案也生成c 模式如下 package ...

ROS學習之日誌訊息

ros學習之日誌訊息 ros日誌系統的核心思想,就是使程式生成一些簡短的文字字元流,這些字元流便是日誌訊息。0.1嚴重級別 ros中,日誌訊息分為五個不同的嚴重級別,也可簡稱為嚴重性或者級別。按照嚴重性程度遞增,這些級別有 debug info warn error fatal 0.2生成日誌訊息 ...