[Halcon&矩阵] 通过手眼标定矩阵计算相机旋转角度

  • 📢博客主页: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、 很明显可以看出,由于|M~11~M~22~ - M~12~M~21~| ≠ 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、由于m~12~^′^(0.00262) 与m~21~^′^ (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)

其中,k~x~表示水平剪切因子,决定了沿y轴的移动量,k~y~表示垂直剪切因子,决定了沿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)

由m~11~^′^为负可知, 机械手坐标系与相机坐标系X方向为相反的关系,所以实际角度偏差为180 - 179.928 = 0.072°

PS:arctan2 函数是计算两个数的商(y/x)的反正切值,但考虑了这两个数所在的象限,(y/x)= (0.00126/-1.0005)在第二象限。

拓展:


|-------------------------------------|
| 下雨天,最惬意的事莫过于躺在床上静静听雨,雨中入眠,连梦里也长出青苔。 |

相关推荐
菜♕卷8 小时前
day-82 最少翻转次数使二进制矩阵回文 I
线性代数·矩阵
oioihoii9 小时前
三角函数基础知识速记版
线性代数
yangmc041 天前
区间和 离散化 模板题
c语言·数据结构·c++·算法·矩阵·objective-c
戊子仲秋1 天前
【LeetCode】每日一题 2024_11_16 最少翻转次数使二进制矩阵回文 II(矩阵,分类讨论)
leetcode·矩阵·分类
Tisfy2 天前
LeetCode 3239.最少翻转次数使二进制矩阵回文 I:遍历(行和列两种情况分别讨论)
python·leetcode·矩阵·题解·回文
sweetheart7-72 天前
LeetCode74. 搜索二维矩阵(2024冬季每日一题 6)
线性代数·矩阵·二分查找·力扣
yangmc042 天前
判断子序列
开发语言·数据结构·c++·算法·矩阵·图论
课堂随想2 天前
【DQ Robotics】基于SVD的全秩矩阵逆
矩阵
戊子仲秋3 天前
【LeetCode】每日一题 2024_11_15 最少翻转次数使二进制矩阵回文 I(模拟、矩阵遍历(竖着遍历))
算法·leetcode·矩阵
谢眠3 天前
机器学习day5-随机森林和线性代数1
线性代数·随机森林·机器学习