Holcon手眼標定關鍵函式理解(持續更新)

2021-10-21 04:11:11 字數 3758 閱讀 2685

目錄

一、ho手眼標定:影象座標到相機座標(世界座標)轉換

二、關鍵函式理解:define_reference_coord_system ('ref.bmp', cameraparam, calplatefile, windowhandle, poseref)

三、關鍵函式理解 image_points_to_world_plane (camparampixrect, poseref,modulerowobverse,modulecolumnobverse, 'mm', cornersx_ref_obverse, cornersy_ref_obverse) 總結

*******************************=轉化抓取的影象座標為機械人base下物理座標***********************************===

read_image (refimage, 'ref.bmp')

dev_display (refimage)

*標定板模板

calplatefile := 'calibratetable120.descr'

*從標定板中讀取marks中心座標,該座標值是標定板座標系統裡的座標值,該座標系統以標定板為參照,向右*為x正,下為y正,垂直標定板向下為z正。該運算元控制輸出為標定板中心3d座標。

*caltab_points (calplatefile, x, y, z)

sizegauss := 3

markthresh := 100

mindiammarks := 5

startthresh := 128

deltathresh := 10

minthresh := 8

alpha := 0.9

mincontlength := 15

maxdiammarks := 100

*分割出影象中的標準標定板區域region

find_caltab (refimage, caltab, calplatefile, sizegauss, markthresh, mindiammarks)

*從影象該區域中提取矩形排列的二維校準標記(換算到物理座標系後的),並計算相機外參(用到的影象未去畸變,所以用cameraparam)

find_marks_and_pose (refimage, caltab, calplatefile, cameraparam, startthresh, deltathresh, minthresh, alpha, mincontlength, maxdiammarks, rcoord, ccoord, posecamref)

* disp_3d_coord_system (windowhandle, camparam, posecamref, 0.01)

dev_display (refimage)

dev_set_color ('blue')

*通過影象中校準板的位置定義世界座標繫在攝像機座標系中的3d位姿[x(單位:m),y(m),z(m),a,b,c,0],

*標定後世界座標中心的影象的**,所以此時x為負值,y為正

define_reference_coord_system ('ref.bmp', cameraparam, calplatefile, windowhandle, poseref)

*獲取乙個3d位姿,並展示出來,但是展示的影象是3d位姿在平面圖上的投影

* poseref1 := [-0.0986341,0,0.916344,0,0,0,0]

* dev_set_color ('blue')

* disp_3d_coord_system (windowhandle, cameraparam, poseref1, 0.01)

*將三維姿勢轉換為齊次變換矩陣

pose_to_hom_mat3d (poseref, cam_h_ref)

phyx_obverse:=

phyy_obverse:=

phyangle_obverse:=

*影象在處理過程中已進行去畸變處理,所以用camparampixrect而不是cameraparam,

*影象中的點轉化到世界座標的z=0的平面上,所謂的z=0的平面即物料所在面,實際上獲取的特徵點就是在該平面上的,這個函式就是確定特徵帶在那個平面上獲得的,得到的cornersx_ref_obverse,

*cornersy_ref_obverse為該平面尺度上的座標

image_points_to_world_plane (camparampixrect, poseref,modulerowobverse,modulecolumnobverse, 'mm', cornersx_ref_obverse, cornersy_ref_obverse)

引數:『ref.bmp』:影象路徑;cameraparam:相機內參;calplatefile:標定板模板檔案;poseref:得到的3d座標

描述:通過影象中校準板的位置定義世界座標繫在相機座標系中的3d位姿[x(單位:m),y(m),z(m),a,b,c,0],標定後世界座標中心的影象的**

圖中:o1:鏡頭焦點及世界座標系原點

o2:標定板原點

o3:影象座標系的座標原點

通過該運算元,獲取標定板中心畫素在世界座標系中的位置即(x',y',z',a',b',c',0)例如圖中座標為:[-0.0986341, 0.0803844, 0.916344, 0.390286, 0.636935, 270.004, 0],,圖中o1『為世界座標原點在平面1的投影,x偏移:--0.0986341m,

y偏移:0.0803844,,z偏移:0.916344, 繞x:0.390286, 繞y:0.636935, 繞z:270.004

引數:camparampixrect:相機內參;poseref:上乙個函式求出的標定板原點在相機座標系下的姿態;modulerowobverse,modulecolumnobverse:模型特徵點在影象座標系中的x,y;mm:單位mm

cornersy_ref_obverse:輸出,特徵點在相機座標系(世界座標系中)的x,y

通過該 運算元,獲取特徵點的物理座標,原理應該是相似三角型。如圖:

焦距及靶平面資訊在引數camparampixrect中,焦距資訊在poseref中

新建:hom_mat2d_identity (hommat2d)

平移:hom_mat2d_translate (hommat2d, row, column, hommat2dtranslate)

旋**hom_mat2d_rotate (hommat2dtranslate, angle, 0, 0, hommat2drotate)

影象變換就是點的變換,平面上的點只有下x方向,y方向的變換,不包含旋轉資訊,旋轉體現在點構成的圖形上。影象變換原理參照:

公式的正確首先要正確定義旋轉方向:θ的方向:由x轉向y為正,反之為負;holcon中從row轉向col為正,否則為負;在此,數學座標系和畫素座標系保證一致;

先說一下引數row,column,angle,這三個引數在畫素座標系中的表示如下圖:這裡row相當於數學座標系中的x軸,column相當於y軸,繞原點逆時針轉為正方向;

初學者,個人見解,歡迎指正!

halcon手眼標定

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

手眼標定(一)

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

手眼標定 九點標定

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