簡介
本文是AMR ROS2光達搬運機器人的延伸應用分享,文章內容共有兩段。
首先是搬運機器人在遞送物品場景的改進,結合之前提及的導航點插件,可以加速運送的流程。
再來是在搬運機器人上使用新安裝的StereoLabs ZED 2i深度影像攝影機,透過ROS2傳送影像訊息,讓遠端能夠查看機器人的即時畫面,也能提供後續有關影像的應用使用。
如果還沒有閱讀過之前部落格中AMR ROS2搬運機器人文章的讀者,可以先往回閱讀之前的文章,會更容易了解文章中的內容:
AMR ROS2光達搬運機器人-使用NVIDIA Orin Nano系列文章清單-連結點這裡
攝影/撰寫 | 楊子賢 | 材料表 | RK-AMR ROS2 光達搬運機器人
場地圍牆 筆電電腦 (連入 ROS2 搬運機器人 編寫程式)
|
時間 | 1小時 | ||
難度 | 3(滿分5) |
軟硬體背景
NVIDIA Jetson Orin Nano
StereoLabs ZED 2i
Jetpack 5.1.1
L4T 35.3.1
Ubuntu 20.04 LTS
遞送物品場景改進實作
原先的設定中,抵達導航點後會停留一個固定的時間,如下圖左側紅色區塊的流程,這樣在運送少量物品時會花費過多時間等待,運送的物品較多時也會讓使用者來不及取下或放上貨物。
在之前的導航系統設定的文章中,有提到一個在導航點接收訊息的插件,配合程式處理按鈕輸入並轉換為ROS2訊息,使用者在操作完畢後按下按鈕,就能讓機器人直接前往下一個導航點,如果忘記按鈕的話,也會在一定時間後繼續下一段導航。
如果想要知道其他有關導航設定的詳細內容,可以參考部落格文章:
[AMR ROS2光達搬運機器人-導航系統與路徑規劃設定-使用NVIDIA Orin Nano]
下圖是改進前後的流程差異,多了一個使用者輸入的功能:
首先要修改導航系統的插件設定,將原本的在導航點等待時間(WaitAtWaypoint)改為等待輸入(InputAtWaypoint),並設定等待超時的時間與之後要接收的ROS2訊息主題名稱
接著要建立一個套件處理按鈕的功能,這邊使用Jetson.GPIO來讀取GPIO的數值,當按鈕被按下後,就會發送一個名為button_pushed的ROS2訊息,通知導航系統繼續前進到下一個導航點
然後要在車上安裝輸入裝置,這邊使用麵包板配置臨時的線路,連接到Orin Nano上的40PIN GPIO針腳,當按鈕按下時,訊號輸入的電位會改變,就能夠在程式中進行判斷並發送訊息給導航系統
最後開啟導航系統與按鈕套件,執行一次導航點導航,測試設定是否正確
這個功能也可以結合影像辨識等AI模型,取代按鈕輸入方式,例如偵測到使用者離開,機器人就繼續開往下一個導航點之類的功能。
在ROS2上使用ZED深度影像攝影機傳送影像
這次使用的攝影機是StereoLabs的ZED 2i深度影像攝影機,StereoLabs有為ZED系列深度影像攝影機建立ROS2專用的套件程式,另外ZED的軟體開發套件(SDK, Software Development Kit)對於NVIDIA Jetson Orin系列以及最近推出的Jetpack 6都有提供完整的支援。
ZED軟體開發套件:https://www.stereolabs.com/developers/release
ZED ROS2套件 – zed-ros2-wrapper:https://github.com/stereolabs/zed-ros2-wrapper
這裡選擇利用套件中提供的ZED攝影機專用Docker容器,容器建立完成後,裡面就已經安裝好軟體開發套件以及ROS2套件,並設定好環境,立刻就可以開始使用。
使用Docker來部署程式環境已經是一種趨勢,可以省下許多繁瑣的設定過程,最近NVIDIA推出的NIM(NVIDIA Inference Microservice)也採用了Docker容器進行本地部署,只需要一行指令就能完成部署。想知道NVIDIA NIM有哪些特色,以及它能夠做什麼事情,可以看看部落格文章:
[NVIDIA 黃仁勳執行長在 2024 Computex 說的 NIM 是什麼?]
套件會發布攝影機左右鏡頭的影像、計算出來的深度影像、IMU資料、攝影機的狀態等訊息,系統的大略架構會如下圖中所示。
首先要將ZED ROS2套件下載到Orin Nano上,指令中的–recursive相當重要,它會幫我們把Github上關聯的程式也一起下載下來,就不用自己再去下載了
接著進到剛才下載的套件資料夾中的docker資料夾,可以看到裡面有給不同架構電腦使用的Dockerfile以及建立Docker映像檔使用的腳本
建立Docker映像檔前,要先把Dockerfile裡面的Image版本改成humble-desktop,這樣才可以使用Rviz顯示畫面,還有加入顯示結果用的範例zed-ros2-example,改完後按Ctrl+S儲存,再按Ctrl+X離開即可
修改完成後,就可以使用腳本建立Docker映像檔,使用時要在後方輸入L4T與ZED SDK版本,建立過程大概需要20分鐘
映像檔建立完成後,就可以接上ZED攝影機,開啟Docker容器
最後使用範例程式測試是否正常運作,執行後會開啟Rviz視窗,並顯示平面影像、深度影像與點雲
ZED ROS2套件會發布相機的各種訊息,像是左右鏡頭的灰階與彩色影像、
、合成深度影像與點雲、相機上的IMU資料等,都可以透過訂閱訊息的方式取得內容
這樣算是在ROS2搬運機器人上進行AI人工智慧應用的第一步,之後會將結合以上內容,延伸到更進階的功能,敬請期待。