AMR ROS2光達搬運機器人-ArUco標記辨識與跟隨-使用NVIDIA Orin Nano

 

攝影/撰寫 楊子賢 材料表

 

時間 3小時
難度 3.5(滿分5)

簡介

本篇文章將會分享如何在AMR ROS2光達搬運機器人上,進行ArUco標記的辨識與跟隨,文章會分為兩段:

第一段是辨識ArUco標記,使用StereoLabs ZED 2i深度影像攝影機,取得ArUco標記的位置與姿態

第二段則是將ArUco標記作為搬運機器人移動的參考點,讓機器人會跟隨標記,移動到固定的位置上

如果還沒有閱讀過之前關於AI影像應用的文章,可以先往回閱讀之前的文章,會更容易了解這次所分享的內容:

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

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

本文

軟硬體背景

辨識ArUco標記並取得位置與姿態

 

ArUco標記是一種由黑色邊框與內部代表編號的黑白方格組成的正方形標記,通常會當作使用攝影機進行定位時的參考點,透過演算法可以計算出標記的姿態,廣泛地被運用在需要定位物體位置與姿態的場合

 

在ROS2中可以使用aruco_ros這個套件,它提供了辨識ArUco標記的功能,並且會以訊息的形式輸出標記的各種資訊,包含標記在畫面中的位置與計算出來的姿態等。ArUco標記辨識 ROS2套件 – aruco_ros: https://github.com/pal-robotics/aruco_ros

在終端機中開啟ZED深度攝影機的容器,並執行ZED ROS2套件,在Orin Nano上使用ZED 2i攝影機的方法可以參考之前的文章,內容有提到如何建立並執行ZED攝影機的Docker容器:

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

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_wrapper zed_camera.launch.py camera_model:=zed2i

 

接著開啟另外一個終端機,建立另一個安裝好aruco_ros的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 \
--name aruco_container \
tzushiancavedu/orinnano_isaacfarm:aruco_r35.3.1

 

執行ArUco標記辨識程式

ros2 launch aruco_demo bringup.launch.py

 

再開啟另外一個終端機,執行RQT圖形化介面,選擇”/aruco_demo/result”,將標籤移動到鏡頭前就可以看到辨識結果

docker exec aruco_container bin/bash -c 'source /ros_entrypoint.sh && rqt -s image_view' 

 

AMR ROS2搬運機器人跟隨ArUco標記

有了可以從ArUco標記獲得位置資訊的能力後,就可以用來定位搬運機器人的相對位置,讓機器人可以跟隨ArUco標記移動

在終端機中開啟ZED深度攝影機的容器,並執行ZED ROS2套件

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_wrapper zed_camera.launch.py camera_model:=zed2i

 

建立安裝好aruco_ros的Docker容器,並執行ArUco標記辨識程式

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 \
--name aruco_container \
tzushiancavedu/orinnano_isaacfarm:aruco_r35.3.1
ros2 launch aruco_demo bringup.launch.py

 

開啟新的終端機,進入AMR ROS2的Docker容器中,並執行ArUco標記跟隨程式

./run_docker.sh
ros2 launch ugv_bringup aruco_follower.launch.py

 

將ArUco標記移動到機器人前方,就會根據標記的位置發送移動指令,嘗試跟隨ArUco標記

 

這樣算是在ROS2搬運機器人上完成一個簡單的ArUco標記跟隨功能,如果加以改進並搭配導航系統,就能提高機器人移動的精準度,讓自行停車充電等功能的實現變得可行,之後會繼續分享ROS2在AMR ROS2光達搬運機器人上的各種應用,敬請期待

發佈留言

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