尊重作者,支援原創,如需轉載,請附上原位址: https://libaineu2004.blog.csdn.net/article/details/106995624
心得筆記
字面意思,眼代表眼睛,這裡指的是我們的工業相機;
手,指的是我們的運動部分,比如機械手或者運動控制系統;
眼在手上,就是相機按照在運動軸上面,跟随運動的某個軸一起運動,這種标定就是圖像和機械點一一運動去做标定。
眼在手外,就是相機固定一個位置拍照,機械手或者運動部分不會帶動相機,這個時候标定就要一次性拍全視野,然後機械部分再一一針對圖像的上點做好對應關系,然後标定。
這兩種标定是我們圖像和運動部分聯合主要的兩種标定方法,都可以實作圖像轉機械運動,就是标定關系不一樣而已,結果都是一樣的!
眼在手上就是一個點對應一個機械坐标,做九組就好了!
也就是相機一次拍9個點 然後機械手走這九個點得到九個對應的機械坐标進行變換。
眼在外:相機放置一個固定的位置,與機器人基坐标系相對位置不變
眼在手:相機和機器手綁定在一個位置,機器手移動,相機也跟着移動
halcon手眼标定,最少4點就可以,4個像素坐标對應4個機械手坐标就可以算出轉換關系
九點标定法的實作流程
STEP 1:準備好一張标定闆,裡面有3X3的圓。
STEP 2:把标定闆水準放置在相機正下方,控制相機拍照得到一張圖檔,并按順序(走Z字型)記錄圖檔上9個圓的中心位置。

STEP 3:控制機器人TCP工具末端按順序(走Z字型)移動到每個圓心,并記錄下9組機器人位置坐标資料。
STEP 4: 執行标定,這裡使用HALCON标定算子作為示範,利用上面求得的資料。
圖像上9個位置
image_x:=[]
image_y:=[]
機器人9個位置
robot_x:=[]
robot_y:=[]
圖像與機器人資料結合
vector_to_hom_mat2d (image_x, image_y, robot_x, robot_y, HomMat2D)
矩陣進行儲存:write_tuple (HomMat2D, '路徑') 。注意:儲存的矩陣字尾名是.tup格式的
STEP 5:标定完成後,拍攝一個特征點的,求得像素位置
img_x:=
img_y:=
利用以下算子即可把像素坐标轉換成機器人坐标
read_tuple (‘路徑’, HomMat2D)
affine_trans_point_2d(HomMat2D,img_x,img_y, Qx, Qy)
到這裡标定以及轉換過程就完成了。
read_image (Image, 'D:/hellowprld/初學者必用10mm視覺标定闆圖/9points.jpg')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
connection (Region, ConnectedRegions)
*篩選出來九個點
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 2000)
shape_trans (SelectedRegions, RegionTrans, 'outer_circle')
*求出九點坐标
area_center (RegionTrans, Area, Row, Column)
disp_message (WindowHandle, 'R:'+Row+' C:'+Column, 'Image', Row, Column, 'black', 'true')
*把求得的Row和Column指派
*九點标定行
PxRow:=Row
*九點标定列
PxColunm:=Column
*九點标定行
*PxRow:=[23.5, 23.5, 23.5, 71.5, 71.5, 71.5, 118.5, 118.5, 118.5]
*九點标定列
*PxColunm:=[28.5, 75.5, 122.5, 28.5, 75.5, 122.5, 28.5, 75.5, 122.5]
*機器坐标行
Qx:=[100,50,0,100,50,0,100,50,0]
*機器坐标列
Qy:=[0,0,0,50,50,50,100,100,100]
*拿到機器坐标和像素坐标求出關系矩陣
* 标定行 标定列 機器X 機器Y 得到矩陣
vector_to_hom_mat2d (PxRow, PxColunm, Qx, Qy, HomMat2D)
*儲存矩陣
write_tuple (HomMat2D, '九點标定.tup')
*讀取矩陣
read_tuple ('九點标定.tup', HomMat2D)
*利用求出來的物體行列坐标得到機器坐标
affine_trans_point_2d (HomMat2D, Row, Column, Qx1, Qy1)·
官方例程
vector_to_hom_mat2d
calibrate_hand_eye_scara_stationary_cam_approx
hand_eye_stationarycam_calibration
pick_and_place_scara_stationary_cam
參考文獻
關于“眼在手外“和“眼在手上”标定求教
https://www.51halcon.com/forum.php?mod=viewthread&tid=4231【3】機器人手眼标定:固定向下相機
https://www.51halcon.com/forum.php?mod=viewthread&tid=4271“眼在手中”标定之坐标轉換
https://www.51halcon.com/forum.php?mod=viewthread&tid=4265機器人手眼标定算法源碼
http://www.ihalcon.com/read-9533.html機械手手眼标定/9點标定/4點标定/Halcon标定腳本
http://www.ihalcon.com/read-10022.htmlvb.net聯合halcon以及運動控制卡做的點膠貼合項目
http://www.ihalcon.com/read-14513.html手眼标定----眼在手外(eye-to-hand) [魁拔之十萬火急]
http://www.ihalcon.com/read-13820.html手眼标定----眼在手上(eye-in-hand) [魁拔之十萬火急]
http://www.ihalcon.com/read-14658.html http://www.ihalcon.com/read-14687.html九點标定-眼在外(沒有标定闆的情況) [魁拔之十萬火急]
http://www.ihalcon.com/read-14564.html手眼标定----眼在手上(eye-in-hand) [tystq]
http://www.ihalcon.com/read-14209.html楓痕機械手相機9點坐标标定-基于C#+EmguCV
https://www.cnblogs.com/thebreeze/p/10316030.html相機标定助手代碼
http://www.ihalcon.com/read-11647.htmlHaclon代碼架構c#程式設計haclon代碼學習
http://www.ihalcon.com/read-14257.html