- 📢博客主页:https://loewen.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
- 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨
文章预览:
- 一. 理解手眼标定矩阵
- 二. 拆解手眼标定矩阵
一. 理解手眼标定矩阵
手眼标定矩阵通常是一个齐次变换矩阵,它包含了旋转、平移、缩放和可能的其他变换信息。这个矩阵可以将一个点从机械手坐标系变换到相机坐标系,或者相反。
二. 拆解手眼标定矩阵
1、提取旋转矩阵
-
旋转矩阵是一个正交矩阵,它的行和列都是单位向量且彼此正交。
-
在二维情况下,旋转矩阵(22)通常表示为:[cosθ,-sinθ,sinθ,cosθ](这里不是14矩阵,而是2*2矩阵)
-
可以通过计算手眼标定矩阵的左上角2x2子矩阵[a,b,c,d]的行列式来确定是否包含缩放或剪切变换。
1)如果行列式等于1,即|a,b,c,d| = ab - cd = 1,则矩阵只包含旋转;
2)如果不等于1,即|a,b,c,d| = ab - cd ≠ 1,则矩阵可能还包含缩放或剪切。 -
在没有缩放和剪切的情况下,可以通过对左上角2x2子矩阵进行正交化来提取旋转矩阵。
2、提取缩放矩阵
-
缩放矩阵是一个对角矩阵,它的对角线元素表示了各个方向上的缩放比例。
-
在二维情况下,缩放矩阵通常表示为:S=[Sx,0,0,Sy]
-
可以通过计算手眼标定矩阵的左上角2x2子矩阵的每个元素的绝对值来确定缩放比例。然而,这种方法可能受到旋转和剪切的影响,因此更准确的方法是通过SVD(奇异值分解)或QR分解来提取缩放比例。
3、提取剪切矩阵
- 剪切矩阵表示了坐标轴之间的倾斜程度。
- 在二维情况下,剪切矩阵通常不是对角矩阵,但可以通过计算手眼标定矩阵的左上角2x2子矩阵的非对角线元素来确定剪切程度。
- 然而,剪切变换通常不是手眼标定中的标准变换,因此可能需要额外的步骤来识别和提取剪切矩阵。这通常涉及到更复杂的数学处理,如矩阵的极分解或QR分解。
这也为我们从一个包含缩放和旋转效果的变换矩阵中提取出纯粹的旋转部分,然后计算旋转角度提供思路:可以按照以下步骤进行(假设只考虑旋转和缩放,没有剪切和平移):
三. 实战演练(提取旋转角度)
以该手眼标定矩阵的左上角2x2子矩阵为例:
M = [ M 11 M 12 M 21 M 22 ] = [ − 8.56361 e − 03 2.24152 e − 05 1.07640 e − 05 8.55496 e − 03 ] (1) M = \tag{1} \left [ \begin{matrix} M_{11} & M_{12}\\ M_{21} & M_{22}\\ \end{matrix}\right ] =\left [ \begin{matrix} -8.56361e-03 & 2.24152e-05\\ 1.07640e-05 & 8.55496e-03\\ \end{matrix}\right ] M=[M11M21M12M22]=[−8.56361e−031.07640e−052.24152e−058.55496e−03](1)
1、 很明显可以看出,由于|M11M22 - M12M21| ≠ 1,所以该矩阵还包含缩放或剪切。
2、消除缩放效果(矩阵归一化)*:
1)对于 2×2 矩阵,我们可以选择任一行的范数来作为缩放因子,将旋转矩阵归一化,即将第一列的向量单位化。
这样可以消除矩阵的缩放效果:
S 1 = ( M 11 ) 2 + ( M 21 ) 2 = ( − 8.56361 ∗ 1 0 − 3 ) 2 + ( 1.07640 ∗ 1 0 − 5 ) 2 ≈ 0.00856361 \text{S}_1 = \sqrt{(M_{11})^2 + (M_{21})^2} = \sqrt{(-8.56361 * 10^{-3})^2 + (1.07640* 10^{-5})^2} ≈ 0.00856361 S1=(M11)2+(M21)2=(−8.56361∗10−3)2+(1.07640∗10−5)2≈0.00856361
S 2 = ( M 12 ) 2 + ( M 22 ) 2 = ( 2.24152 ∗ 1 0 − 5 ) 2 + ( 8.55496 ∗ 1 0 − 3 ) 2 ≈ 0.00855496 \text{S}_2 = \sqrt{(M_{12})^2 + (M_{22})^2} = \sqrt{(2.24152 * 10^{-5})^2 + (8.55496* 10^{-3})^2} ≈ 0.00855496 S2=(M12)2+(M22)2=(2.24152∗10−5)2+(8.55496∗10−3)2≈0.00855496
取: S = S 1 + S 2 2 = 0.008559285 (2) S =\tag{2} \frac{S_1+S_2}{2} = 0.008559285 S=2S1+S2=0.008559285(2)
3、归一化矩阵:将矩阵除以缩放因子,消除缩放效果:
M
’
=
M
S
=
[
−
8.56361
∗
1
0
−
3
/
0.008559285
2.24152
∗
1
0
−
5
/
0.008559285
1.0764
∗
1
0
−
5
/
0.008559285
8.55496
∗
1
0
−
3
/
0.008559285
]
=
[
−
1.0005
0.00262
0.00126
0.9995
]
(3)
M’ =\frac{M}{S} = \tag{3} \left [\begin{matrix} -8.56361 * 10^{-3} /0.008559285 & 2.24152* 10^{-5} /0.008559285\\ 1.0764* 10^{-5} /0.008559285 & 8.55496 * 10^{-3} /0.008559285\\ \end{matrix}\right] =\left [\begin{matrix} -1.0005 & 0.00262\\ 0.00126 & 0.9995\\ \end{matrix}\right]
M’=SM=[−8.56361∗10−3/0.0085592851.0764∗10−5/0.0085592852.24152∗10−5/0.0085592858.55496∗10−3/0.008559285]=[−1.00050.001260.002620.9995](3)
4、由于m12′(0.00262) 与m21′ (0.00126)并不相同,表明矩阵中不仅仅含有旋转矩阵,还包含了剪切矩阵,剪切变换会改变图形的形状,使其在某些方向上拉伸或压缩,但不像缩放那样均匀地影响所有方向。
M ’ = R ⋅ K = [ c o s ( θ ) − s i n ( θ ) s i n ( θ ) c o s ( θ ) ] × [ 1 k x k y 1 ] = [ − 1.0005 0.00262 0.00126 0.9995 ] (4) M’ =\tag{4}R⋅K = \left [ \begin{matrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\\ \end{matrix}\right ] × \left[ \begin{matrix} 1 & kx \\ ky & 1\\ \end{matrix}\right ] = \left [\begin{matrix} -1.0005 & 0.00262\\ 0.00126 & 0.9995\\ \end{matrix}\right] M’=R⋅K=[cos(θ)sin(θ)−sin(θ)cos(θ)]×[1kykx1]=[−1.00050.001260.002620.9995](4)
其中,kx表示水平剪切因子,决定了沿y
轴的移动量,ky表示垂直剪切因子,决定了沿x
轴的移动量。
5、计算旋转角度:
如果忽略剪切带来的影响
,可以根据归一化后的矩阵 M′的元素,我们可以计算旋转角度 :
θ = a r c t a n 2 ( m 21 ′ , m 11 ′ ) = a r c t a n 2 ( 0.00126 , − 1.0005 ) = 3.14033 = 179.928 ° (5) θ=\tag{5}arctan2(m_{21}^′,m_{11}^′) = arctan2(0.00126,-1.0005) = 3.14033 = 179.928° θ=arctan2(m21′,m11′)=arctan2(0.00126,−1.0005)=3.14033=179.928°(5)
由m11′为负可知, 机械手坐标系与相机坐标系X方向为相反的关系,所以实际角度偏差为180 - 179.928 = 0.072°
PS:arctan2 函数是计算两个数的商(y/x)的反正切值,但考虑了这两个数所在的象限,(y/x)= (0.00126/-1.0005)在第二象限。
拓展:
下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。 |