Quantcast
Channel: CAVEDU教育團隊技術部落格
Viewing all articles
Browse latest Browse all 673

AMR ROS2光達搬運機器人-分段路徑規劃與即時影像串流-使用NVIDIA Orin Nano

$
0
0

簡介

本文是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上關聯的程式也一起下載下來,就不用自己再去下載了

cd ~ && \

git clone  --recursive https://github.com/stereolabs/zed-ros2-wrapper.git && \

ls

 

接著進到剛才下載的套件資料夾中的docker資料夾,可以看到裡面有給不同架構電腦使用的Dockerfile以及建立Docker映像檔使用的腳本

cd ~/zed-ros2-wrapper/docker && \

ls

 

建立Docker映像檔前,要先把Dockerfile裡面的Image版本改成humble-desktop,這樣才可以使用Rviz顯示畫面,還有加入顯示結果用的範例zed-ros2-example,改完後按Ctrl+S儲存,再按Ctrl+X離開即可

nano Dockerfile.l4t-humble

 

修改完成後,就可以使用腳本建立Docker映像檔,使用時要在後方輸入L4T與ZED SDK版本,建立過程大概需要20分鐘

./jetson_build_dockerfile_from_sdk_and_l4T_version.sh l4t-r35.3.1 zedsdk4.1.2

 

映像檔建立完成後,就可以接上ZED攝影機,開啟Docker容器

docker run --runtime nvidia -it --rm --privileged --network=host \

  --ipc=host --pid=host \

  -e NVIDIA_DRIVER_CAPABILITIES=all \

  -e DISPLAY \

  -v /dev:/dev \

  -v /tmp/.X11-unix/:/tmp/.X11-unix \

  -v $HOME/.Xauthority:/root/.Xauthority \

  -v ${HOME}/zed_docker_ai/:/usr/local/zed/resources/ \

  -name zed_container \

  zed_ros2_l4t_image:latest

 

最後使用範例程式測試是否正常運作,執行後會開啟Rviz視窗,並顯示平面影像、深度影像與點雲

ros2 launch zed_display_rviz2 display_zed_cam.launch.py camera_model:=zed2i

 

ZED ROS2套件會發布相機的各種訊息,像是左右鏡頭的灰階與彩色影像、

、合成深度影像與點雲、相機上的IMU資料等,都可以透過訂閱訊息的方式取得內容

 

這樣算是在ROS2搬運機器人上進行AI人工智慧應用的第一步,之後會將結合以上內容,延伸到更進階的功能,敬請期待。

AMR ROS2光達搬運機器人-分段路徑規劃與即時影像串流-使用NVIDIA Orin Nano〉這篇文章最早發佈於《CAVEDU教育團隊技術部落格》。


Viewing all articles
Browse latest Browse all 673

Trending Articles