手眼標定之eye in hand之halcon實現

2021-10-01 20:38:56 字數 2764 閱讀 9623

*****calibrate_hand_eye_scara_moving_cam.hdev *******

scara關節機械人眼在手上的手眼標定例程**

視窗設定階段

dev_close_window ()

dev_open_window_fit_size (0, 0, 1280, 1024, 640, -1, windowhandle)

set_display_font (windowhandle, 14, 『mono』, 『true』, 『false』)

dev_update_off ()

*標定準備階段:

*1. 讀取相機初始內參,設定描述檔案路徑

*2. 建立標定資料模型 create_calib_data

*3. 設定相機的引數型別 set_calib_data_cam_parm

*4. 設定標定板的資料型別(此處用到了描述檔案)

*5. 設定標定模式 set_calib_data(我使用的是非線性的方法)

具體步驟如下

*首先通過相機標定獲取相機的初始內參(焦距,畸變係數,單個畫素的寬,單個畫素高,影象座標的中心值橫座標,影象座標中心值的縱座標,影象寬度,影象高度)

*//1、設定標定相機模型,採用division或者polynomial畸變模型並設定相機模型初始引數

gen_cam_par_area_scan_division (0.004938, -10379.136, 4.65138e-006, 4.65e-006, 617.294, 534.687, 1280, 1024, cameraparam)*

*//2、設定標定板描述檔案

calibobjdescr := 『calibrate_hand_eye_scara_setup_01_calplate.cpd』

*create a new calibration model

正式標定階段:

*6. 迴圈讀取影象將標定板的位姿資訊和機械人末端在基座標係位姿(tool_in_base)儲存到標定資料模型中。

*7. 進行手眼標定 calibrate_hand_eye

具體步驟如下

*拍攝 14—20 組標定板影象(eye_in_hand),並準確記錄每**像在拍攝時tool_in_base 位姿(此位姿從機械人中讀取)。

*備註:在獲取標定影象時,標定板不動,機械人末端的擺動要盡可能的全面,繞各個軸的旋轉角要盡量的大。

*標定板要出現在相機視野的各個角落。理論上影象越多,角度越全面,標定精度越高。

6、遍歷處理各幅標定影象和其採集時的工具端位姿

for index := 1 to 10 by 1

// read the calibration image

**讀取標定影象

read_image (calibimage, 『3d_machine_vision/hand_eye/scara_moving_cam_setup_01_calib_』 + indexkatex parse error: expected group after '_' at position 201: …ol_in_base_pose_̲' + index』02』 + 『.dat』, toolinbasepose)

* set the robot pose in the calibration model

*設定機械人位姿標定模型,set_calib_data函式內涵比較多,建議詳細檢視幫助檔案

set_calib_data (calibdataid, 『tool』, index, 『tool_in_base_pose』, toolinbasepose)

* determine the pose of the calibration plate in the camera

* coordinate system and set the pose in the calibration model

*獲取標定點資訊,並獲取標定板在相機座標系中的位姿

find_calib_object (calibimage, calibdataid, 0, 0, index, , )

* visualize

dev_display (calibimage)

*//從標定模型中讀取標定板位姿資訊

get_calib_data_observ_pose (calibdataid, 0, 0, index, objincamerapose)

*//顯示標定影象中的標定點

disp_caltab (windowhandle, calibobjdescr, cameraparam, objincamerapose, 1)

disp_message (windowhandle, 『calibration image 』 + index + 』 of 10』, 『window』, 12, 12, 『black』, 『true』)

wait_seconds (0.2)

endfor

perform the hand-eye calibration

7、進行手眼標定

calibrate_hand_eye (calibdataid, errors)

標定結果獲取處理階段:

*具體步驟如下

標定結果校準階段:

標定位姿轉換為最終位姿階段:

halcon手眼標定

手眼標定最簡單的方法 九點標定 九點標定的目的 建立mark點的影象座標與其在機械手座標系下的仿射變換矩陣,利用求得的仿射變換矩陣,可以把mark點的影象座標轉成物理座標,進而控制機械手完成定點抓取任務。halcon九點標定運算元 mark點畫素座標 area center sortedregion...

手眼標定(一)

所謂手眼系統,就是人眼鏡看到乙個東西的時候要讓手去抓取,就需要大腦知道眼鏡和手的座標關係。如果把大腦比作b,把眼睛比作a,把手比作c,如果a和b的關係知道,b和c的關係知道,那麼c和a的關係就知道了,也就是手和眼的座標關係也就知道了。相機知道的是畫素座標,機械手是空間座標系,所以手眼標定就是得到畫素...

手眼標定 九點標定

手眼標定 就是建立影象座標系和 機械人座標系之間的轉化關係 換矩陣 機械人座標系 通俗的說就是機械手上的座標點 二維平面,為什麼是二維平面,讀者們可以自己考慮一下 22.40 開始.23.52 其實沒有講 得到九個點的 影象座標 和 機械手位置座標怎麼 求 轉換矩陣的。25.12 開始講原理 如果 ...