[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)在第二象限。

拓展:


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

相关推荐
古希腊掌管学习的神3 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
大山同学12 小时前
第三章线性判别函数(二)
线性代数·算法·机器学习
云云32113 小时前
搭建云手机平台的技术要求?
服务器·线性代数·安全·智能手机·矩阵
云云32113 小时前
云手机有哪些用途?云手机选择推荐
服务器·线性代数·安全·智能手机·矩阵
ThreeYear_s13 小时前
基于FPGA 的4位密码锁 矩阵键盘 数码管显示 报警仿真
fpga开发·矩阵·计算机外设
十年一梦实验室14 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
15年网络推广青哥14 小时前
国际抖音TikTok矩阵运营的关键要素有哪些?
大数据·人工智能·矩阵
阿正的梦工坊14 小时前
范德蒙矩阵(Vandermonde 矩阵)简介:意义、用途及编程应用
线性代数·矩阵
sjsjs1120 小时前
【多维DP】力扣3122. 使矩阵满足条件的最少操作次数
算法·leetcode·矩阵
哲学之窗20 小时前
齐次矩阵包含平移和旋转
线性代数·算法·矩阵