作者:CAVEDU教育團隊
前言
本篇文章將會分享如何在Nvidia Jetson Orin上的ROS2系統中,利用預設的相機標定套件camera_calibration,進行攝影機的標定校正,修正影像畫面的誤差,在執行其他程式時取得更精準的結果
如果還沒有閱讀過關於ROS2應用的文章,請先閱讀以下文章,會更容易了解這次所分享的內容:
- AMR ROS2光達搬運機器人-分段路徑規劃與即時影像串流-使用NVIDIA Orin Nano
- AMR ROS2光達搬運機器人-AI即時影像推論Jetson Inference-使用NVIDIA Orin Nano
- AMR ROS2光達搬運機器人-AI物體距離偵測-使用NVIDIA Orin Nano
攝影/撰寫 | 楊子賢 | 材料表 |
|
時間 | 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容器,執行之後會自動下載需要的映像檔
安裝USB攝影機套件usb_cam,用來發布攝影機影像的訊息
執行USB攝影機套件,這邊要注意camera_name的設定,後續在執行相機標定套件時也會到使用這個名稱,執行時會出現紅字錯誤,說明無法找到攝影機的校正檔,之後完成標定後就不會出現
開啟另外一個終端機,請一次複製整串指令貼上,連入Docker容器並執行相機標定套件,這邊要注意的是-c
、--size
與--square
的設定:
-c
:相機名稱,需要跟上面USB攝影機套件設定的名稱相同,後續開啟時才能夠正確讀取--size
:用來標定的棋盤中內部長寬分別的頂點數,請注意是內部不貼齊邊緣的頂點,如果用的是從上方下載的棋盤就不需要修改--square
:棋盤方格大小,單位是公尺,如果用的是從上方下載的棋盤就不需要修改
執行後會開啟一個視窗,將其最大化後會呈現下圖的狀態
把剛才準備的棋盤圖紙拿到鏡頭前,就會看到圖紙上多出了彩色的標記點與右上角的進度條,移動圖紙並保持彩色標記存在,標定套件會收集可用的資料並推進進度條,同時終端機也會輸出收集到的資料。
建議剛開始可以靠近一點,讓圖紙填滿畫面,並稍微傾斜或旋轉圖紙,之後把圖紙遠離攝影機,移動到畫面一角,再次傾斜或旋轉圖紙,重複幾次後就能夠收集到足夠的資料。請看本文作者的萌萌操作~
資料收集完成後,右側的CALIBRATE按鈕就會亮起,點擊之後畫面就會凍結並開始生成標定結果。
生成結果完成後剩餘的按鈕也會亮起,按下SAVE按鈕就能儲存結果,終端機也會輸出完整的標定結果與儲存位置。
預設會把結果儲存在 /tmp
這個暫存資料夾內,需要手動把它移動到ROS2的設定資料夾,關閉相機標定套件之後執行以下指令就會放到對應位置,請一次複製整串指令貼上
回到原來執行USB攝影機套件的終端機,關閉後重新開啟套件,就會發現紅字不再出現,代表套件成功讀取到標定結果的校正檔
以上就是如何使用NVIDIA Orin Nano 在 ROS2 中替攝影機進行標定校正,在執行攝影機相關的ROS2程式時,可能就會需要這一步驟。後續還會有更多 ROS x NVIDIA Jetson 相關文章,感謝支持也請多多分享喔!