中文 | English

【CAVEDU講堂】利用ROS2套件為攝影機進行標定校正 – 使用NVIDIA Orin Nano

作者:CAVEDU教育團隊

前言

本篇文章將會分享如何在Nvidia Jetson Orin上的ROS2系統中,利用預設的相機標定套件camera_calibration,進行攝影機的標定校正,修正影像畫面的誤差,在執行其他程式時取得更精準的結果

如果還沒有閱讀過關於ROS2應用的文章,請先閱讀以下文章,會更容易了解這次所分享的內容:

攝影/撰寫 楊子賢 材料表

 

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

本文

軟硬體背景

  • NVIDIA Jetson Orin Nano
  • Jetpack 5.1.1
  • L4T 35.3.1
  • Ubuntu 20.04 LTS
  • USB網路攝影機

使用ROS2為攝影機進行標定校正

基本上所有的攝影機都可能會因為製造時的誤差等因素,在拍攝出來的圖像上產生不同大小的偏差,這些偏差雖然肉眼不太能夠察覺,但是會導致在進行一些透過計算產生的結果失準,所以需要透過標定這個步驟,校正偏差並提高圖像的準確度,在執行對精確度比較有要求的程式時,有時會要求必須要有校正資訊才能運行

有些攝影機會在出廠時就先完成這個步驟,例如StereoLabs的ZED深度攝影機,在一般用途上不需要另外進行標定校正,但需要時還是可以透過原廠工具進行校正來達到更準確的測量效果。

標定前需要先準備一張印有黑白棋盤方格的圖紙,可以點擊下方連結下載,之後打開PDF檔案並列印出來。這張圖紙會用來當作標定時的參考,請找一塊板子或書本,把圖紙黏貼在上面,讓它盡量保持平坦。黑白棋盤方格PDF請點我

首先要開啟一個有ROS2環境的Docker容器,執行之後會自動下載需要的映像檔

docker run --runtime nvidia -it --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_test \

  tzushiancavedu/orinnano_isaacfarm:r35.3.1

 

安裝USB攝影機套件usb_cam,用來發布攝影機影像的訊息

apt update

apt install -y ros-humble-usb-cam

執行USB攝影機套件,這邊要注意camera_name的設定,後續在執行相機標定套件時也會到使用這個名稱,執行時會出現紅字錯誤,說明無法找到攝影機的校正檔,之後完成標定後就不會出現

ros2 run usb_cam usb_cam_node_exe --ros-args -p camera_name:=test_camera 

開啟另外一個終端機,請一次複製整串指令貼上,連入Docker容器並執行相機標定套件,這邊要注意的是-c--size--square的設定:

  • -c:相機名稱,需要跟上面USB攝影機套件設定的名稱相同,後續開啟時才能夠正確讀取
  • --size:用來標定的棋盤中內部長寬分別的頂點數,請注意是內部不貼齊邊緣的頂點,如果用的是從上方下載的棋盤就不需要修改
  • --square:棋盤方格大小,單位是公尺,如果用的是從上方下載的棋盤就不需要修改
docker exec -it -e DISPLAY=$DISPLAY aruco_test bash

source ros_entrypoint.sh

ros2 run camera_calibration cameracalibrator -c test_camera --size 8x6 --square 0.025 --ros-ar
gs -r image:=/image_raww

執行後會開啟一個視窗,將其最大化後會呈現下圖的狀態

 

把剛才準備的棋盤圖紙拿到鏡頭前,就會看到圖紙上多出了彩色的標記點與右上角的進度條,移動圖紙並保持彩色標記存在,標定套件會收集可用的資料並推進進度條,同時終端機也會輸出收集到的資料。

建議剛開始可以靠近一點,讓圖紙填滿畫面,並稍微傾斜或旋轉圖紙,之後把圖紙遠離攝影機,移動到畫面一角,再次傾斜或旋轉圖紙,重複幾次後就能夠收集到足夠的資料。請看本文作者的萌萌操作~

資料收集完成後,右側的CALIBRATE按鈕就會亮起,點擊之後畫面就會凍結並開始生成標定結果。

生成結果完成後剩餘的按鈕也會亮起,按下SAVE按鈕就能儲存結果,終端機也會輸出完整的標定結果與儲存位置。

預設會把結果儲存在 /tmp 這個暫存資料夾內,需要手動把它移動到ROS2的設定資料夾,關閉相機標定套件之後執行以下指令就會放到對應位置,請一次複製整串指令貼上

cd /tmp && ll

tar -zxf calibrationdata.tar.gz

mkdir -p /root/.ros/camera_info

cp ost.yaml /root/.ros/camera_info/test_camera.yaml

ll /root/.ros/camera_info

回到原來執行USB攝影機套件的終端機,關閉後重新開啟套件,就會發現紅字不再出現,代表套件成功讀取到標定結果的校正檔

ros2 run usb_cam usb_cam_node_exe --ros-args -p camera_name:=test_camera 

以上就是如何使用NVIDIA Orin Nano 在 ROS2 中替攝影機進行標定校正,在執行攝影機相關的ROS2程式時,可能就會需要這一步驟。後續還會有更多 ROS x NVIDIA Jetson 相關文章,感謝支持也請多多分享喔!

 

(本文經CAVEDU同意轉載,原文連結;責任編輯:王姵文)

分享到社群

vMaker編輯部

歡迎各界朋友投稿你的maker故事,不論是個人作品、創客觀點或是創客的經驗分享,我們都十分期待能聽到您的分享。 投稿請至:contact@vmaker.tw

This site or product includes IP2Location LITE data available from https://lite.ip2location.com.