大家好,今天主題一樣圍繞著 ROS 的基礎核心架構,昨天介紹完了 Topic 和 node 的關係,今天就要介紹將整個系統串聯起來的重要人物 - Messages
昨天我們透過 rostopic list -v
來檢視 Topics 的詳細資料,這邊先幫大家複習一下,請看到下圖:
那當時就有提到了,中間那欄是這個 Topics 傳遞 Message 的格式,也就是資訊的名稱,注意這裡不是單純的123,而是有分類被命名過後的資料。我們也可以透過 rostopic type [topic_name]
來看某個特定 Topic 的 Message 格式,只是相比之下筆者認為 rostopic list -v
快速許多,我們藉由下面的兩張圖片可以看到他們的差別,其中紅框為一樣的訊息格式,但顯示的方式不同而已,依當時需要的情況去做呼叫。
以下為 rostopic type [topic_name]
與 [ros]
:
現在我們了解每個 Topics 有其對應的 Message 格式,接著我們可以透過 rosmsg show [message_name]
來了解所謂的格式長什麼樣子:
這裡我們用 [geometry_msgs/Twist]
來做一個簡單的說明,這項 Message 裡主要分為 [Vector3 linear]
和[Vector3 angular]
,這兩項就是隸屬於 geometry_msg (幾何資訊)裡 Twist 分類下的變數,分別控制3軸向的前進速度和旋轉,之後進入自走車的環節時,這項資料也有助於你設定自走車的行程,可多查看不同的訊息,了解他們分別的作用,也有利於加深印象。
其中 [Vector3 linear]
和 [Vector3 angular]
又各自包含 float64 x
, float64 y
, float64 z
,代表說這個格式下可以同時攜帶6個64位元不同的浮點數在 Nodes 之間做交換。
至於不同的 Message 格式可以攜帶的參數型別也可以不同,以 Python 為例, int
, str
, bool
等型別也是相當常見的,這裡只跟大家做一個基本的聊解,其他相關的參數格式設定和有關 Message 格式更詳細的資訊可以參考ROS官方網站。
Message 的格式相當多元,可以根據自己的需求選擇訊息結構。而除了 Message 結構之外,在 ROS 專案中對於 Message 的命名也是相當重要的,一個有邏輯的命名規則能讓日後在執行、維護時更加順利。