AMR ROS2光達搬運機器人-AI即時影像推論Jetson Inference-使用NVIDIA Orin Nano

簡介

本文是AMR ROS2光達搬運機器人的延伸應用分享,延續上一篇完成的ZED深度攝影機設定,利用擷取到的影像在機器人上執行深度學習推論,我們使用Jetson Inference專案結合ROS2,讓機器人在移動時也能夠進行影像辨識、物件偵測等深度學習應用。

如果還沒有閱讀過上一篇文章,以及之前部落格中AMR ROS2搬運機器人系列文章的讀者,可以看看之前的文章,會更容易了解這篇所要分享的內容:

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

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上執行深度學習專案

有了上一篇文章中設定好的影像來源後,就能開始進行有關影像的深度學習推論,這邊使用Jetson Inference的ROS2套件ros_deep_learning,它提供了影像辨識imagenet、物件偵測detectnet以及圖像分割segnet三個不同的推論選項。

Jetson Inference:https://github.com/dusty-nv/jetson-inference

Jetson Inference ROS2套件 – ros_deep_learning:

https://github.com/dusty-nv/ros_deep_learning

 

ros_deep_learning套件會使用從ZED套件發送的ROS2影像訊息獲得用來辨識的圖像,完成推論後再將結果以ROS2訊息傳送出來,接著就能在Rviz上看到辨識完成的結果。

 

平時使用Jetson Inference時會直接使用攝影機作為來源,並且直接將結果輸出到外接螢幕上,但在機器人上運行時,因為使用了CUDA與OpenGL,無法傳送辨識完成的畫面至遠端的電腦上,所以使用ROS2訊息作為輸出方式,這樣只要在同一個網域下,使用Rviz就能接收到來自ZED深度攝影機的影像,還有來自Jetson Inference的辨識結果。

 

在開始操作前,要先開一個新的終端機,把ZED的Docker容器打開,並執行ZED ROS2套件,發送影像到ROS2系統中,記得不要把Rviz的視窗關掉,等一下會用它來看Jetson Inference的辨識結果

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




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

 

跟ZED ROS2套件一樣,首先要將Jetson Inference下載到Orin Nano上,同樣會用到–recursive指令,把關聯的程式也一起下載下來,Jetson Inference的檔案較多,會花一點時間

cd ~ && \

git clone  --recursive https://github.com/dusty-nv/jetson-inference.git && \

ls

 

再來要開啟Jetson Inference的Docker容器,因為作者尚未更新映像檔的名稱,所以要手動指定現在使用的版本,執行之後會自動下載映像檔

cd ~/jetson-inference && \

docker/run.sh --container dustynv/ros:humble-pytorch-l4t-r35.3.1

 

在ROS2上執行影像辨識

進到Docker容器內後,就可以執行Jetson Inference的ROS2套件,第一個是影像辨識imagenet,預設使用googlenet模型,第一次執行會下載模型並對模型進行優化,大概需要數分鐘,開始執行後就會輸出辨識的結果

ros2 run ros_deep_learning imagenet --ros-args -r /imagenet/image_in:=/zed/zed_node/rgb/image_rect_color

 

回到前面在ZED容器開啟的Rviz視窗,在左邊的Display區域中找到ROI Mask,把裡面的Topic改成/imagenet/overlay

 

接著就能在右上角看到Jetson Inference的輸出影像,影像左上角會有辨識的結果,包含代表結果可信度的信心指數百分比,與辨識出來的分類類別

 

在ROS2上執行物件偵測

第二個是物件偵測detectnet,預設使用ssd-mobilenet-v2模型,第一次執行也會下載模型並對模型進行優化,會花費數分鐘,開始執行後就會輸出偵測的結果

ros2 run ros_deep_learning detectnet --ros-args -r /detectnet/image_in:=/zed/zed_node/rgb/image_rect_color

 

回到前面在ZED容器開啟的Rviz視窗,在左邊的Display區域中找到ROI Mask,把裡面的Topic改成/detectnet/overlay

 

接著就能在右上角看到Jetson Inference的偵測結果影像,影像中會將辨識到的物體框出,並標示信心指數百分比與辨識出來的分類類別

 

 

在ROS2上執行圖像分割

第三個是圖像分割segnet,預設使用fcn-resnet18-cityscapes-1024×512模型,第一次執行也會下載模型並對模型進行優化,會花費數分鐘

ros2 run ros_deep_learning segnet --ros-args -r /segnet/image_in:=/zed/zed_node/rgb/image_rect_color

 

回到前面在ZED容器開啟的Rviz視窗,在左邊的Display區域中找到ROI Mask,把裡面的Topic改成/segnet/overlay

 

接著就能在右上角看到Jetson Inference的推論結果影像,影像中會使用顏色標記區域內的物體種類

 

這些算是一些基礎的AI人工智慧應用,之後會結合前面提到的各種功能,在ROS2搬運機器人上做出一些更為實際的應用,敬請期待。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *