标定系列二、9点标定以及5点圆心标定过程(代码详解)
一、九點標定過程
1.算法原理
? ? ? ? 9點標定就是通過9個點計算出相機坐標系到機械手坐標系下的一個仿射變換,(實際上空間中的二維平面的仿射變換只需要3個點就足夠了)。在實際應用過程中,需要獲取像素下特征點的坐標和對應機械手的坐標。聯立方程組求解即可得到對應仿射變換的矩陣,實際應用場景主要分為眼在手上和眼在手外,下面具體介紹使用過程:
(1)眼在手外
? ? ? ? ? ? ? ? ? ? ?
? ? ? 使用場景如圖所示,該場景是一個上相機,9點標定經常是四軸機械臂或者是通過舵機搭建的X,Y兩方向的運行機構與相機相互配合使用。無論是眼在手上還是眼在手外,目的都是獲取對應像素點的坐標和機械手的坐標,然后通過數學計算,得到轉換矩陣。
眼在手外獲取機械手坐標的方式主要有兩種:
第一種:1.準備一張A4紙,或者標定板也行
? ? ?,??
?
獲取圖像中9個圓的圓心的像素位置,存儲起來,點的存儲順序是Z字形。
2.在機械手上加裝針尖,用針尖按Z字形順序依次去戳每個圓的圓心,并以此記錄每個機械手的坐標。
該種方法標定效果誤差較大,因為針尖去戳圓心的過程是肉圓觀察得到的,結果并不是很準確的。
第二種:1,機械手吸取物料固定。
? ? ? ? ? ??? ?
?在相機視野中能觀察提取到Mark(特征)點,對于Mark點是物料上穩定的特征,容易獲取,類似交點,圓心等等。
2.機械手帶動物料按照右圖方式依次運動,獲取9個點的機械手坐標和像素坐標。
該標定方法效果準確,但是需要注意的兩點,一個是標定視野范圍一定大于機械手的工作范圍,
其中紅色為視野中標定的范圍,黑色為機械手的在視野中的工作范圍,否在超過標定范圍的誤差較大,而且難預測。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
另外,在標定過程中,實際的工作面高度和標定高度盡量一致,因為除了圓心鏡頭,我們使用的工業相機會隨著高度變化,X,Y的坐標也會有誤差。
(2)眼在手上
? ? ? ? ? ? ? ? ? ? ??
該種標定方式是機械手和相機不發生相對變化,讓物料固定不動,相機依次去拍物料,獲取Mark點的特征和對應機械手的坐標,存儲起來。
2.代碼介紹
*計算仿射變換矩陣 *機械手9點坐標X,Y數組 Rx=[] Ry=[] *像素坐標的x,y數組 px=[] py=[] vector_to_hom_mat2d (px, py, Rx, Ry, HomMat2D)*計算仿射變換矩陣的RMS affine_trans_point_hommat2d(HomMat2D,px,py,Rx_t,Ry_t)其中Rx_t,Ry_t為仿射變換后對應計算出的機械手坐標。 Rx, Ry為實際標定時機械手的坐標,計算出距離偏差。distance_pp(Rx,Ry,Rx_t,Ry_t,distance) 其中distance存儲9點的坐標偏差tuple_mult(distance,distance,data1) tuple_sum(data1,data_end) tuple_sqrt(data_end,RMS)二、五點旋轉中心標定過程
1.算法原理?
? ? ?在標定旋轉中心之前應該理解為什么要標定旋轉中心,通過上文可以對9點標定有個大概的理解,9點標定其實就是點與點的映射關系。當我們的旋轉中心,吸嘴,特征點在一致的時候,我們可以想象成各點都是繞著特征點旋轉,此時則無需標定旋轉中心如下圖所示:
? ? ? ? ? ? ?
但實際應用中,吸嘴和旋轉中心并不一致,伴隨著旋轉中心轉動,特征點也會移動,此時機械手的坐標并未發生并未發生變換,如果仍使用點點映射求出對應機械手坐標是錯誤,正確的方法是先繞旋轉中心回正,在計算特征點對應的坐標。
?
標定旋轉中心的方法:
機械手固定物料,在相機下依次轉動5個角度,獲取5個位置特征點的像素坐標,通過擬合圓心,求出圓心對應的像素坐標,在通過映射關系得到圓心對應機械手的坐標。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2.代碼介紹
*將5個點對應像素坐標生成多線條輪廓 gen_contour_polygon_xld*將輪廓進行擬合生成圓,求出對應圓心坐標 fit_circle_contour_xld?
?
?
總結
以上是生活随笔為你收集整理的标定系列二、9点标定以及5点圆心标定过程(代码详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Twisted-17.1.0-cp36-
- 下一篇: 【Java】如何根据图片的网络url,下