今天終於到了週五,想必大家也想好好過個週末時光吧!今天就先做一件簡單的事,實際看看機器人眼中的世界。
昨天透過 ros2 topic list 找到了 /camera/image_raw,也確認這個 Topic 有 Publisher 正在發布資料。不過到目前為止,我只是知道這裡有相機資料,還沒有真正看到機器人相機所看到的畫面。
所以今天的目標很單純:把相機畫面打開來看看。
開發環境沿用昨天的 Ubuntu 22.04、ROS2 Humble、TurtleBot3 Waffle 與 Gazebo Classic。
先依照 Day 3 的方式啟動模擬環境,並且保留執行 Gazebo 的終端機繼續運作。
接著開啟另一個終端機,載入 ROS2 環境:
source /opt/ros/humble/setup.bash
如果有使用自己編譯的工作空間,也需要接著載入該工作空間的 install/setup.bash,路徑依自己的安裝位置而定。以下一樣以 /camera/image_raw 為例。如果昨天找到的相機 Topic 名稱不同,記得換成自己實際使用的名稱。
我們在昨天的 ros2 topic info 已經看過訊息型別,今天也可用下面這個指令,單獨查看這一項:
ros2 topic type /camera/image_raw
以這個影像 Topic 為例,會看到:
sensor_msgs/msg/Image
這裡也讓我重新整理了一次 Topic 和 Message Type 的差別:
| 項目 | 本例名稱 | 說明 |
|---|---|---|
| Topic | /camera/image_raw |
資料傳遞的頻道名稱 |
| Message Type | sensor_msgs/msg/Image |
這個頻道傳送資料時使用的訊息格式 |
如果沿用前面的「聊天室」比喻,Topic 就像聊天室的名稱,而 Message Type 則規定訊息要用什麼格式傳。
接著使用 rqt_image_view 查看 ROS2 中的影像 Topic。這是一個可以顯示 ROS 影像的圖形工具。
相關介紹可以參考 ROS Index 的套件說明。
在剛剛載入環境的終端機輸入:
ros2 run rqt_image_view rqt_image_view
開啟後在下拉選單中選擇 /camera/image_raw,就可以看到 TurtleBot3 模擬相機目前看到的畫面。如果選單裡沒有這個名稱,可以回頭用 ros2 topic list 確認實際的相機 Topic,並檢查模擬環境是否仍在執行。
在 Gazebo 視窗裡,我們可以從外部觀察機器人與場景;這裡顯示的畫面,則來自機器人相機本身的位置與朝向,也就是機器人看到的視角。這也接回前面的概念:相機的發布端負責送出影像,rqt_image_view 則訂閱對應的 Topic,接收並顯示畫面。
這一步雖然看起來很簡單,但對我的專題來說很重要。因為後面不管是 OpenCV、目標辨識還是視覺追蹤,最前面的資料來源都是從這裡開始。
ros2 topic type 查看 Topic 的訊息型別。rqt_image_view,選擇相機對應的 Topic,查看機器人的相機視角。到目前為止,已經從前一天的找到相機 Topic,進一步確認它傳送的是影像資料,也實際看到機器人的相機視角。不過,目前只是讓我們看見影像,還沒有加入辨識或追蹤的程式。
接下來會嘗試用 Python 接收 ROS2 的影像,再交給 OpenCV 處理,慢慢接到後續的視覺追蹤。