基于ROS的機械臂手眼标定-Aruco使用與相機标定
折騰了一段時間的機械臂的手眼标定,相關資料挺多的,但使用起來都比較複雜,新手一般比較難搞懂。于是想做一個比較簡單易懂易用的手眼标定程式。
程式都是Copy的開源代碼,是以也開源出來:
開源位址:https://gitee.com/ohhuo/handeye-calib
作為手眼标定中的重要一環,相機中标定闆位姿關系擷取直接影響标定精度,我們使用aruco這個開源程式來實作坐标的擷取。
本教程一共包含五個部分:
- 手眼标定-基礎使用
- 手眼标定-JAKA機械臂
- 手眼标定-AUBO機械臂
- 手眼标定-Aruco使用與相機标定
- 手眼标定-注意事項
如果上述程式使用過程中遇到問題,可以參考:
- 手眼标定-常見問題排查
如果你對手眼标定原理感興趣,可以參考以下文章:
- 機器人手眼标定原理介紹(含詳細推導過程)使用Tsai-Lenz算法
- 手眼标定算法TSAI_LENZ,眼在手外python代碼實作
- 手眼标定算法Tsai-Lenz代碼實作(Python、C++、Matlab)
原理介紹
aruco采用2D圖像計算深度資訊,需要提前在程式中輸入标記物的寬度,根據識别标記物在圖像中的像素數量與實際寬度的比值即可計算出深度等資訊。
使用指南
- 使用Aruco之前要確定你已經在linux系統上安裝了ROS系統。目前在
和kinetic
版本上測試通過。melodic
- 線上生成标定闆:https://chev.me/arucogen/
1.安裝
aruco安裝
Kinetic:
sudo apt-get install ros-kinetic-aruco*
Melodic:
sudo apt-get install ros-melodic-aruco*
其他版本
sudo apt-get install ros-版本名稱-aruco*
usb-cam安裝
- 目前暫不支援網絡相機,後面将考慮納入該相機驅動。
Kinetic:
sudo apt-get install ros-kinetic-usb-cam
Melodic:
sudo apt-get install ros-melodic-usb-cam
其他版本
sudo apt-get install ros-melodic-版本名稱-cam
2.修改參數
可以直接使用本倉庫中handeye-calib所提供的
aruco_start_usb_cam.launch
或者
aruco_start_realsense_sdk.launch
分别使用realsense和usb相機的驅動來運作,這個視你的相機而定。
需要修改的參數如下:
- camera_info_url 相機标定檔案所在位置
- video_device: 裝置位置
- image_width: 圖檔寬度
- image_height: 圖檔高度
- markerId: 标定闆編号,就是你所用的标定闆的id,可以通過
進行生成并列印線上生成标定闆:https://chev.me/arucogen/
- markerSize:标定闆的寬度 機關m
<arg name="camera_info_url" default="file:///home/dev/.ros/camera_info/ost.yaml"/>
<arg name="video_device" default="/dev/video2"/>
<arg name="image_width" default="1280"/>
<arg name="image_height" default="720"/>
<arg name="markerId" default="0"/>
<arg name="markerSize" default="0.151"/>
3.開始運作
source devel/setup.bash
roslaunch handeye-calib aruco_start_usb_cam.launch
4.運作結果
5.位姿訂閱
程式運作之後如果檢測到标定闆的markerId為我們設定的id則會輸出标定闆在相機中的位姿資料,通過/aruco_signal/pose 話題輸出,話題類型為PoseStamped。
可以使用下面的指令訂閱輸出話題資料。
打開終端
rostopic echo /aruco_signal/pose
6.關于識别誤差的校驗方法
我們可以利用标記不動,移動機械臂的方法進行檢測(假設機械臂是精準的)。由于機械臂與相機末端是固結的,是以當我們讓機械臂的末端在空間中移動10mm,那相機在空間中也會移動10mm,同樣相機中标記物的位置也應當移動10mm,我們可以通過示教器移動機械臂的方式,觀察位姿資料的變化來測量精度。
如果有不明白和有錯誤的地方可以留言,下期更新使用JAKA機械臂來實作自動标定。