当前位置: 首页 > news >正文

三维手眼标定

机器视觉手眼标定

1.意义:

        确定机器人工具中心点(TCP)与相机之间的固定关系

2.分类:

        在实际应用中,手眼标定常有两种形式: 系统标定在线标定。系统标定指的是在工厂中进行的标定过程,标定完成后在实际应用中不再需要更新;在线标定则意味着在实际运行过程中能够持续更新标定参数,以适应工作环境的改变。

3.步骤:

手眼标定过程主要包括以下步骤

  1. 选定机器人工具中心点对应的相机
  2. 采集一组机器人姿态数据和相机图像信息
  3. 利用以上采集的信息,通过优化方法或其他算法计算出相机与机器人工具中心点之间的精确位置关系。手眼标定算法也有很多,如Tsai、Horaud等。

注意:为了准确地估计这种关系,通常需要从不同的位置和姿态采集数据,以便获得充足和多样性的数据,进一步提高标定结果的精度和稳定性。数据丰富度,算法需求,减少误差,环境和姿态覆盖,验证和评估


4.误差来源

手眼标定的目标是确定相机坐标系和机器人末端执行器坐标系之间的转换关系。

  1. 特征点检测误差:

    • 标定时通常使用某种模式板(例如棋盘格、圆点网格等)作为参考。如果在图像中检测这些特征点的过程中存在误差,那么这会直接影响标定的结果。
  2. 摄像机内参标定误差:

    • 手眼标定的前提是相机的内参(如焦距、主点位置、径向和切向畸变等)已知。如果这些参数的标定存在误差,那么手眼标定的结果也会受到影响。
  3. 机器人位置误差:

    • 机器人的位置和姿态信息通常由编码器提供。任何与机器人的精度和重复定位精度相关的误差都会影响手眼标定。
  4. 机械误差:

    • 机器人的关节间隙、伸缩、弯曲或其他机械误差都会影响标定结果。
  5. 测量噪声:

    • 无论是图像采集还是机器人位置的测量,都可能受到系统噪声的影响。
  6. 模式板制造和安装误差:

    • 如果模式板的制造不精确或在安装过程中发生变形,都可能导致标定误差。
  7. 算法和数值计算误差:

    • 手眼标定算法的选择和实现、以及在解决标定问题时使用的数值方法,都可能引入误差。
  8. 环境因素:

    • 温度、湿度、照明条件等都可能影响摄像机成像和机器人的精度。
  9. 系统时延:

    • 如果机器人和相机之间的数据同步存在延迟,这也可能影响标定结果。
  10. 模型简化:

  • 在手眼标定中,常常使用某些简化的数学模型。这些模型可能无法完全捕获实际系统的全部复杂性,从而引入误差。

为了最小化这些误差,通常需要多次标定和验证,选择合适的标定算法,并确保所有设备和标定工具的质量。

5.标定原理

        手眼标定主要是为了确定机器人手部(通常是机械臂的末端)和相机之间的固定关系。标准的问题可以表示为下面的等式: [ AX = XB ]

其中:

  • ( A ) 是机器人从一个位置到另一个位置的变换矩阵。
  • ( B ) 是相机在这两个位置所观测到的模式板的变换矩阵。
  • ( X ) 就是我们要找的机器人手部到相机的变换矩阵

描述过程:

  1. 机器人移动其手部从位置1到位置2。
  2. 在这两个位置,相机分别捕获模式板的图像,并计算模式板的位置和姿态。
  3. 根据这两个位置,可以计算机器人手部和相机观测到的模式板之间的变换矩阵,即 ( A ) 和 ( B )。
  4. 使用多次观测,可以解决上述的 ( AX = XB ) 问题,从而找到 ( X )。

这只是一个基本的描述。为了更清楚地表示这一过程,您可能需要绘制机器人、相机、模式板以及它们之间的关系,同时注明相关的变换矩阵。

5.1 眼在手上

        相机安装在机械手上,相机随着机械手一起移动。实际工程上较为常用。
可以快速有效地标定被测物体的坐标。这种情况的标定过程实际上和相机和机械手分离的标定方法是一样的,因为相机拍照时,机械手会运动到相机标定的时候的位置,然后相机拍照,得到目标的坐标,再控制机械手,所以简单的相机固定在末端的手眼系统很多都是采用这种方法,标定的过程和手眼分离系统的标定是可以相同对待的

  • 基于图像的视觉控制
  • 基于位置的视觉控制
  • 结合两者的混合视觉控制

5.2 眼在手外

        相机固定在机器上,机械手的运动不会带着相机一起移动。

5.3 数学推导

参考手眼标定_全面细致的推导过程_12点标定-CSDN博客

上文的相机搭载方案是,hand-in-eye。移动相机,标定求解过程
在推导过程中,我们会用到四个坐标系,分别是:

下面先给出示意图:

  • 基础坐标系(用base表示)
  • 机械手坐标系(用tool表示)
  • 相机坐标系(用cam表示)
  • 标定物坐标系(用cal表示)

5.4 仿射变换矩阵

理解:求两个坐标系之间的关系,就是通过三个旋转三个平移得到一个变换矩阵。

        三个旋转和三个平移来表示,通常使用仿射变换矩阵来表示这种变换。这种矩阵通常被称为变换矩阵或变换矩阵。

假设你有两个坐标系,我们称它们为"源坐标系"和"目标坐标系",它们之间的变换可以表示为以下形式的仿射变换矩阵:

| a  b  tx |
| c  d  ty |
| 0  0  1  |

其中 ad 是缩放因子,bc 是旋转因子,txty 是平移因子。这些因子可以通过旋转角度、缩放比例和平移向量来确定。

        相机得到的是 像素坐标,机械手是空间坐标系,所以手眼标定就是得到像素坐标系和空间机械手坐标系的坐标转化关系
在实际控制中,相机检测到目标在图像中的像素位置后,通过 标定好的坐标转换矩阵将相机的像素坐标变换到机械手的空间坐标系中,然后根据机械手坐标系计算出各个电机该如何运动,从而控制机械手到达指定位置。这个过程中涉及到了图像标定,图像处理,运动学正逆解,手眼标定等。


6.标定流程

手眼标定的流程大致可以分为以下步骤:

  1. 系统准备: 配置您的机器人和相机系统,确保它们可以同步运行,并且相机可以正确地观测到目标(通常是模式板)。

  2. 数据采集: 移动机器人手部到不同的位置,每次移动时,同时记录机器人手部的位置(从机器人的编码器或其他传感器获得)以及相机视野中的模式板的图像

  3. 特征提取: 对每一帧图像,通过某种算法(例如,对于棋盘格模式板,通常可以使用OpenCV中的函数)找出模式板的位置和姿态

  4. 变换矩阵计算: 对于相机,可以基于提取到的特征以及相机的内参,计算出模式板的变换矩阵;对于机器人,其变换矩阵可以直接由手部的位置得到。

  5. 求解标定矩阵: 在您有一定数量(通常需要多次观测)的变换矩阵后,您可以通过解AX=XB这个单应性矩阵束平差问题得到相机和机器人手部之间的固定变换矩阵

  6. 验证标定结果: 在获取标定结果后,应验证其准确性。这通常可以通过再次运动机器人到不同的位置,并计算由标定结果预测的模式板的位置和姿态与由相机直接测量的值之间的误差来实现。如果误差在可接受范围内,则标定过程完成;否则,可能需要重新标定或调试您的系统。

代码实现的话,可以查阅很多开源的实现,比如Robotics Toolbox for MATLAB或者ROS中的hand-eye calibration package,都提供了详细的实现方式。在此基础上,根据实际机器人和相机的系统进行相应的接口开发和调试,就可以完成整个手眼标定的过程。

7.变换矩阵

        变换矩阵描述了一个空间中的坐标与另一个空间中的坐标之间的关系。在机器人视觉和计算机视觉中,最常见的变换矩阵是齐次变换矩阵(Homogeneous Transformation Matrix),通常用于描述刚体在3D空间中的平移和旋转

首先,我们来了解3D空间中的旋转和平移:

        1.旋转: 一个3x3的旋转矩阵 ( R ) 可以描述一个物体在3D空间中的旋转。例如,绕x轴旋转的矩阵为:

[ R_x(\theta) = \begin{bmatrix} 1, & 0, & 0; \ 0, & \cos(\theta) ;& -\sin(\theta), \ 0, & \sin(\theta), & \cos(\theta), \ \end{bmatrix} ]

        2.平移: 一个3x1的向量 ( t ) 可以描述一个物体在3D空间中的平移。例如,沿x轴方向平移d单位的向量为:

[ t_x = \begin{bmatrix} d ,\ 0 ,\ 0 \ \end{bmatrix} ]

要将这两个变换合并成一个4x4的齐次变换矩阵,我们可以这样组合它们:

[ T = \begin{bmatrix} R, & t, \ 0, & 1, \ \end{bmatrix} ]

其中:

  • ( R ) 是3x3的旋转矩阵。
  • ( t ) 是3x1的平移向量。
  • 下面的0表示一个1x3的零向量。
  • 最后的1是一个标量。

为了描述点 ( p ) 在两个坐标系之间的变换,我们首先将点表示为一个齐次坐标:

[ p' = \begin{bmatrix} p \ 1 \ \end{bmatrix} ]

然后我们可以使用齐次变换矩阵 ( T ) 进行变换:

[ p'' = T \times p' ]

这给了我们点 ( p ) 在新坐标系中的坐标。

这只是最基本的介绍和推导。在实际应用中,齐次变换矩阵的求解可能涉及到更复杂的方法,如最小二乘法、单应性关系等。特别是在机器人手眼标定中,求解变换矩阵会涉及到多次观测和复杂的数学模型。


数学模型的公式:

        1.绕x轴旋转的矩阵

( R_x(\theta) ): [ R_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \ 0 & \cos(\theta) & -\sin(\theta) \ 0 & \sin(\theta) & \cos(\theta) \ \end{bmatrix} ]

        2.沿x轴方向平移d单位的向量

( t_x ): [ t_x = \begin{bmatrix} d \ 0 \ 0 \ \end{bmatrix} ]

        3.齐次变换矩阵( T ):

[ T = \begin{bmatrix} R & t \ 0 & 1 \ \end{bmatrix} ]

其中:

  • ( R ) 是3x3的旋转矩阵。
  • ( t ) 是3x1的平移向量。
  • 下面的0表示一个1x3的零向量。
  • 最后的1是一个标量。
  1. ( p ) 的齐次坐标表示:                 [ p' = \begin{bmatrix} p \ 1 \ \end{bmatrix} ]

  2. 使用齐次变换矩阵进行变换:           [ p'' = T \times p' ]

希望这样能更清晰地展示公式。如果需要其他格式或进一步的解释,我会尽量帮助您!


参考文献

手眼标定_全面细致的推导过程_12点标定-CSDN博客

【精选】相机标定(三)——手眼标定_相机标定 三点标定-CSDN博客

【精选】手眼标定原理(眼在手上和眼在手外)-CSDN博客

【精选】标定学习笔记(四)-- 手眼标定详解-CSDN博客

手眼标定详述(坐标系介绍,二维、三维的手眼标定方法@九点法、AX=XB)_手眼标定有哪两类?_ljc_coder的博客-CSDN博客

http://www.lryc.cn/news/598640.html

相关文章:

  • Windows下使用UIAutomation技术遍历桌面窗口和指定窗口内容的AutomationWalker.exe的C#源代码
  • Java中的静态变量是在“堆“还是“方法区“?
  • 视频模型国产PK国外?
  • Leetcode—1035. 不相交的线【中等】
  • TDengine 转化类函数 CAST 用户手册
  • Windows 11下纯软件模拟虚拟机的设备模拟与虚拟化(仅终端和网络)
  • C++性能优化实战‘从毫秒到微秒的底层突围‘
  • Windows 10 停服:个人与企业的 “系统选择题”
  • MNIST 手写数字识别模型分析
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——4. 前后端联动:打通QML与C++的任督二脉
  • LAYOUT 什么时候需要等长布线?
  • 【牛客刷题】和零在一起
  • 【Linux】Linux了解与基本指令(1)
  • 数据库期中复习
  • SkyWalking异步采集spring gateway日志
  • postgresql执行创建和删除时遇到的问题
  • AWS云S3+Glue+EMRonEC2+ReadShift
  • ThinkPHP8集成RabbitMQ的完整案例实现
  • 使用 Strands Agents 开发并部署生产级架构通用型个人助手
  • 【论文阅读】基于EEG的冥想状态数据挖掘研究(2025)
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • Nodejs:从“模块未找到”到“大师之路”, 项目初始化与依赖安全完全指南
  • JimuReport 积木报表 v2.1.1 版本发布,免费开源的报表和大屏
  • 主流摄像头协议及其开源情况,GB/T 28181协议介绍
  • Word2Vec模型训练全流程解析:从数据预处理到实体识别应用
  • PyTorch常用Tensor形状变换函数详解
  • 如何恢复mysql,避免被研发删库跑路
  • 多模态数据处理系统:用AI读PDF的智能助手系统分析
  • 六、Element-快速入门
  • K8s WebUI 选型:国外 Rancher vs 国内 KubeSphere vs 原生 Dashboard,从部署到使用心得谁更适合企业级场景?