[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.56361e031.07640e052.24152e058.55496e03](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.56361103)2+(1.07640105)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.24152105)2+(8.55496103)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.56361103/0.0085592851.0764105/0.0085592852.24152105/0.0085592858.55496103/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=RK=[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(m21m11)=arctan2(0.001261.0005)=3.14033=179.928°(5)

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

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

拓展:

在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针前提: Agents 8.9.0 放入 项…

C#从零开始学习(用unity探索C#)(unity Lab1)

初次使用Unity 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp Unity的下载与安装 从 unity官网下载Unity Hub Unity的使用 安装后,注册账号,下载unity版本,然后创建3d项目 设置窗口界面布局 3D对象的创建 点击对象,然后点击Move Guzmo,就可以拖动…

云服务解决方案,针对小程序、网页、HTML5等轻量化视频解决方案

无论是社交媒体上的短视频分享,还是企业官网中的产品展示,亦或是教育平台上的互动课程,高质量、易制作的视频内容正以前所未有的速度改变着我们的生活方式和工作模式。然而,面对多样化的发布平台和日益增长的个性化需求&#xff0…

Python从0到100(六十五):Python OpenCV-图像运颜色转换及几何变换

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

.net 根据html的input type=“week“控件的值获取星期一和星期日的日期

初始化 "week" 控件值: //MVC部分 public ActionResult WeeklyList() {int weekNo new GregorianCalendar().GetWeekOfYear(System.DateTime.Now, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday);string DefaultWeek DateTime.No…

ssm医院交互系统+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…

python+大数据+基于spark的短视频推荐系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

Mybatis框架 day1018

ok了家人们书接上文&#xff0c;我们继续学习mybatis框架 五.数据输出 5.7 属性和字段的映射 5.7.1 别名映射 将数据库表的字段别名设置成和实体类属性一致。 <!-- 给每一个字段设置一个别名&#xff0c;让别名和Java实体类中 属性名一致 --> <select id"fi…

赋能特大城市水务数据安全高速运算,深圳计算科学研究院YashanDB数据库系统斩获“鼎新杯”二等奖

第三届“鼎新杯”数字化转型应用优秀案例评选结果日前正式公布&#xff0c;深圳计算科学研究院联合深圳市环境水务集团有限公司申报的《深圳环境水务国产数据库YashanDB&#xff0c;赋能特大城市水务数据安全高速运转》案例&#xff0c;经过5个多月的评审&#xff0c;从4000申报…

设计模式04-创建型模式1(简单工厂/工厂模式/抽象工厂/Java)

3.1 简单工厂模式 3.1.1 创建型模式 创建型设计模式将对象的创建过程和对象的使用过程分离&#xff0c;用户使用对象时无需关注对象的创建细节&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不用清楚其实现细节&#xff0c;使得整个系统的设计更加符合…

Redis JSON介绍

Redis JSON介绍 Redis JSON先说说JSON是什么再说说JSON Path先推荐两个网站JSONPath JAVA clents Redis JSON 安装内存json命令语法命令url命令解释JSON.ARRAPPENDJSON.ARRINDEXJSON.ARRINSERTJSON.ARRLENJSON.ARRPOPJSON.ARRTRIMJSON.CLEARJSON.DEBUG MEMORYJSON.DEBUGJSON.DE…

单例模式(自动加载)

目录 介绍 使用 在脚本中写一个函数 让一个「自定义场景」作为单例「自动加载」 介绍 单例模式是编程中的一种设计思想&#xff0c;是为了解决某些编程语言中没有全局变量概念而产生的这对于实现某种模块非常好用 比如玩家信息&#xff0c;有时候&#xff0c;游戏中的很多…

数组中超过一半的元素

有一个数组&#xff0c;找出其中数量超过的元素是谁。比如数组 [3, 2, 3] &#xff0c;输出 3。 这个问题要解起来不难&#xff0c;暴力计数&#xff0c;转为 map&#xff0c;排序都能解决。但是他们的空间复杂度都不低&#xff0c;即便排序能做到 O(1) 的空间复杂度&#xff…

计算机系统简介

一、计算机的软硬件概念 1.硬件&#xff1a;计算机的实体&#xff0c;如主机、外设、硬盘、显卡等。 2.软件&#xff1a;由具有各类特殊功能的信息&#xff08;程序&#xff09;组成。 系统软件&#xff1a;用来管理整个计算机系统&#xff0c;如语言处理程序、操作系统、服…

电影评论网站:Spring Boot技术栈应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理电影评论网站的相关信息成为必然。开发合适…

安装macOS Sequoia注意事项

随着macOS Sequoia的发布&#xff0c;许多Mac用户开始计划升级到这一最新版本。然而&#xff0c;升级系统并非简单点击“升级”按钮即可。在安装新系统之前&#xff0c;有一些关键的注意事项可以帮助你避免潜在的问题&#xff0c;确保顺利过渡到macOS Sequoia。本文将详细介绍在…

FPGA图像处理之三行缓存

文章目录 一、前言二、FPGA实现三行缓存的架构三、Verilog代码实现四、仿真验证五、输入图像数据进行仿真验证 一、前言 在 FPGA 做图像处理时&#xff0c;行缓存是一个非常重要的一个步骤&#xff0c;因为图像输入还有输出都是一行一行进行的&#xff0c;即处理完一行后再处理…

实现uniapp天地图边界范围覆盖

前言&#xff1a; 在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽…

Python画笔案例-086 turtle 多线程绘画

1、turtle 多线程绘画 通过 python 的turtle 库 多线程绘画,如下图: 2、实现代码 turtle 库 多线程绘画,以下为实现代码: """多线程绘画.py """ from random import random,randint from turtle import Turtle,Screen from threading

SpringDataRedis快速入门

SpringDataRedis 什么是SpringDataRedis SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis SpringDataRedis中提供了RedsiTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类…