[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、 很明显可以看出,由于|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)在第二象限。

拓展:


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

相关推荐
workflower9 小时前
设备单元级(L1)实施路径
人工智能·线性代数·矩阵·机器人·开源
剑挑星河月17 小时前
54.螺旋矩阵
java·算法·leetcode·矩阵
无限码力1 天前
拼多多笔试真题-对角线遍历矩阵(C++/Py/Java /Js/Go)
矩阵·拼多多·拼多多笔试真题·拼多多技术岗笔试题目·拼多多机试
学究天人1 天前
数学星球:等价性(第5-8章)
线性代数·数学建模·概率论·图论·抽象代数
m0_547486662 天前
上海理工大学《线性代数B》期末试卷及答案2017-2023年(10份)PDF
线性代数
棒球1号位2 天前
《棒球1号位矩阵联盟:江西青少年棒球基地建设的破局之道》
线性代数·矩阵
AI_yangxi2 天前
好用的短视频矩阵系统
大数据·人工智能·矩阵
会博通·代码搬运工2 天前
会博通数字化智能工作站(龟仔家族):产品矩阵、部署架构与技术选型指南
运维·数据库·线性代数·矩阵·架构·api集成·电子档案合规
Bobolink_19 天前
TikTok矩阵账号如何批量养号?工作室级运营方案分享
矩阵·内容运营·跨境电商·tik tok·账号运营
H1785350909619 天前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks