嚼一嚼Halcon中的3D手眼标定

2023-10-25 06:45
文章标签 3d 标定 halcon 手眼 一嚼

本文主要是介绍嚼一嚼Halcon中的3D手眼标定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、问题概述
        • 1、何为手眼标定?
        • 2、手眼标定的2种形式
          • 1)眼在手上(eye in hand):即相机固定在机械臂末端
          • 2)眼在手外(eye to hand):即相机固定在机械臂以外的地方
        • 3、手眼标定公式推导
      • 二、Halcon例程解读
        • 1、初始化
          • 1)初始化显示参数
          • 2)初始化三维坐标系
          • 3)初始化标定模型
        • 2、构建坐标系
          • 1)构建标定板坐标系
          • 2)构建机器人基座坐标系与夹具坐标系
        • 3、执行手眼标定
          • 1)检查用于手眼标定的位姿是否一致
          • 2)进行手眼标定并保存相关参数
          • 3)显示标定误差
        • 4、显示标定后的三维模型
          • 1)计算姿态指标和标定对象指标
          • 2)可视化
        • 5、得到标定结果
      • 三、如何实操
        • 1、准备标定板
        • 2、相机标定
        • 3、手眼标定
        • 整体流程梳理如下:
      • 四、关键点梳理
        • 1、tool-base
        • 2、cam-obj
        • 3、求解AX=XB
      • 五、后续的思考

一、问题概述

1、何为手眼标定?

要让机器人的手抓住杯子,就必须知道杯子跟手的相对位置关系,而杯子的位置则是通过机器人的眼睛看见的,所以,我们只需要知道机器人的手和眼睛的转换关系,就可以随时抓取机器人眼睛所看到的物体了。

在这里插入图片描述

2、手眼标定的2种形式
1)眼在手上(eye in hand):即相机固定在机械臂末端

在这里插入图片描述

手眼标定的目的是确定两个未知量

  • 标定板相对于机器人基座的位姿(CalObjInBasePose)

  • 机械手末端相对于相机的位姿(ToolInCamPose

2)眼在手外(eye to hand):即相机固定在机械臂以外的地方

在这里插入图片描述

手眼标定的目的是确定两个未知量

  • 机器人基座相对于相机的位姿(BaseInSensorPose

  • 标定板相对于机械手末端的位姿(CalObjInToolPose)

3、手眼标定公式推导

对原理有兴趣的小伙伴请参看:手眼标定公式推导

二、Halcon例程解读

主要是参考 hand_eye_movingcam_calibration.hdev

1、初始化

这一部分的工作中,需要完成对显示参数的初始化(主要包括2D图像的显示以及3D模型的显示),以及用于标定的模型的初始化(利用已获得的相机内参与标定板参数,同时还可以指定进行标定的方法)

1)初始化显示参数

在这里插入图片描述

2)初始化三维坐标系

一个是以机械手夹具中心点为原点的三维坐标系,另一个是机器人基座的三维坐标系。

在这里插入图片描述

3)初始化标定模型

初始化一个用于标定的模型 CalibDataID。需要通过标定文件相机初始内参以及用于进行标定的方法进行初始化。

在这里插入图片描述

这里的标定方法是用的非线性优化。

2、构建坐标系
1)构建标定板坐标系

根据之前创建的标定模型CalibDataID在图像中寻找相应的标定板图像,获取标定板的轮廓与其中的角点,并在其中心根据相机内参以及标定板位姿初始化一个标定板坐标系。

在这里插入图片描述

  • 在输入的图像中根据之前初始化的标定模型,寻找标定板
  • 提取标定板的轮廓
  • 通过提取标定板中的点,来获取标定板的位姿
2)构建机器人基座坐标系与夹具坐标系

根据保存的机器人工具坐标系到机器人基座坐标系下的转换矩阵,将原有的机器人夹具坐标系转换至基座坐标系下,显示这两个坐标系并将转换关系保存在CalibDataID所指向的模型对象中。

在这里插入图片描述

  • 读取机械手在机器人基座坐标系下的位姿
  • 根据机械手在机器人基座坐标系下的转换矩阵,将机械手坐标系转换至基座坐标系
  • 保存机械手坐标系到基座坐标系的转换关系至标定模型CalibDataID
3、执行手眼标定
1)检查用于手眼标定的位姿是否一致

在这里插入图片描述

2)进行手眼标定并保存相关参数

在这里插入图片描述

3)显示标定误差

在这里插入图片描述

4、显示标定后的三维模型
1)计算姿态指标和标定对象指标

在这里插入图片描述

2)可视化

在这里插入图片描述

  • 获取标定模型CalibDataID中的数据坐标
  • 根据坐标数据初始化标定块
  • 根据标定块在基座坐标系下的转换矩阵对标定块进行转换
5、得到标定结果

3D姿态中的7个参数代表的意义:[0,0,0,0,0,0,0]前六个代表平移和旋转量,最后一个代表OrderOfTransform, OrderOfRotform, ViewOfTransform的组合类型。

在这里插入图片描述

  • OrderOfTransform:旋转和平移的顺序
  • OrderOfRotform:旋转值的含义
  • ViewOfTransform:变换视角

在这里插入图片描述

三、如何实操

1、准备标定板

窗口–打开算子窗口–gen_caltab

  • 设置XNum,YNum—圆点个数,X和Y方向圆点个数

  • 设置圆点直径,MarkDist × DiameterRatio

  • 设置间距MarkDist(单位为米)

caltab.descry是标定板描述文件,caltab.ps为标定板生成文件,没有psAdobe PDF打开就能看到如下图1-2所示的标定板,可以直接打印。

在这里插入图片描述

2、相机标定

助手–打开新的 Calibration

  • 在描述文件地方插入刚刚生成的caltab.descry

  • 点击标定

  • 结果中摄像机参数需要记录下来,之后会用到,摄像机位姿需要点击“保存”保存成 .dat 格式的文件

在这里插入图片描述

3、手眼标定

标定板不动,移动机械臂,拍摄15+张图片,覆盖多个位姿,并记录每张图片拍摄时机械臂的位姿(包括 X , Y , Z , R X , R Y , R Z X,Y,Z,R_X,R_Y,R_Z X,Y,Z,RX,RY,RZ 六个)

在这里插入图片描述

整体流程梳理如下:
  • 初始化相应的参数:二维图像输出窗口,三维坐标系的坐标轴与窗口,用于进行手眼标定的对象CalibDataID

  • 根据手眼标定的对象,在输入的图像中寻找相应的标定板,并建立坐标系;

  • 创建base与tool的三维坐标系,并根据输入的转换关系信息进行显示;

  • 进行手眼标定,输出并保存相关参数;

  • 根据标定后的转换关系,创建base、tool、cam与obj的三维坐标系,并进行显示;

  • 输出相应的转换关系

四、关键点梳理

1、tool-base

机械臂末端在机器人基座坐标系下的位姿,其实就是机器人学里面最基础的运动学正解。

在这里插入图片描述

DH 矩阵等方法来计算机器人运动学正解:只要知道机器人在当前状态下每个关节的角度,就可以得到tool—base之间的变换。

2、cam-obj

相机在标定板坐标系下的位姿,即相机的外参

在这里插入图片描述

在这里插入图片描述

根据相机模型,先确定内参矩阵,然后根据不同时刻拍摄的标定板图片来求取外参矩阵:也即相机在世界坐标系下的变换关系

3、求解AX=XB

在这里插入图片描述

文献3采用的是李群的理论,将AX=XB转化成最小二乘问题

文献4采用的是对偶四元数的知识,用对偶四元数表达旋转和平移,从而进行统一计算;

四种方法精度接近,最后一种 Dual Quaternions 的方法会稍微比其他算法好一点。

五、后续的思考

机器人领域基本上所有用到的模型都只是「近似模型」。也就是说,上面说的每一步,都有改进空间。

1、直接使用的机器人运动学模型是认为机器人加工、装配、控制无误差的情况

实际上这种假设是不成立的。也就是说,我们只拿到每个关节角度,计算的末端位姿是存在误差的。可以从机器人运动学参数辨识等方面入手提高最后的标定精度;

2、相机模型其实也不是标准的小孔模型,像素坐标与空间坐标之间其实是非线性的对应关系

这篇关于嚼一嚼Halcon中的3D手眼标定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280746

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

解析apollo纵向控制标定表程序

百度apollo采用标定表描述车辆速度、加速度与油门/刹车之间的关系。该表可使无人车根据当前车速与期望加速度得到合适的油门/刹车开合度。除了文献《Baidu Apollo Auto-Calibration System - An Industry-Level Data-Driven and Learning based Vehicle Longitude Dynamic Calibrating

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用,模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇,同时也伴随着一系列需要克服的挑战,如何看待企业引进增材制造,小编为您全面分析。 机遇篇: 加速产品创新:3D打印技术如同一把钥匙,为模具企业解锁了快速迭代产品设计的可能。企业能够迅速将创意转化为实体模型,缩短产品从设计到市场的周期,抢占市场先机。 强化定制化服务:面

WPF入门到跪下 第十三章 3D绘图 - 3D绘图基础

3D绘图基础 四大要点 WPF中的3D绘图涉及4个要点: 视口,用来驻留3D内容3D对象照亮部分或整个3D场景的光源摄像机,提供在3D场景中进行观察的视点 一、视口 要展示3D内容,首先需要一个容器来装载3D内容。在WPF中,这个容器就是Viewport3D(3D视口),它继承自FrameworkElement,因此可以像其他元素那样在XAML中使用。 Viewport3D与其他元素相

python画图|3D图基础教程

python画3D图和2D流程类似: 【a】定义一个自变量x; 【b】定义两个因变量y和z; 【c】直接输出plot(x,y,z) 今天就一起快乐学习一下画3D图的基础教程。 【1】官网教程 打开官网,可以迅速找到学习教程,参考下述链接: https://matplotlib.org/stable/plot_types/3D/plot3d_simple.html 然后我们解读一下示

OGRE 3D----创建第一个OGRE 3D示例

目录 1. OGRE 3D概述 2. OGRE 3D vs VTK 3. 编译OGRE 3D 源码 4. 创建示例和配置其编译环境 5. 配置示例程序的执行环境 1. OGRE 3D概述 OGRE (Object-Oriented Graphics Rendering Engine) 是一个开源的、高级的 3D 图形渲染引擎,它提供了一个抽象层,使得开发者可以专注于创建内容和

echarts 多个3D柱状图

图片样式: 代码实现: <template><div :class="className" :style="{height:height,width:width}" /></template><script>require("echarts/theme/sakura"); // echarts themeexport default {props: {className: {typ

将DIB/bitmap读入内存并转为 halcon hobject

问题由来:在mfc halcon混合编程中,发现halcon::readimage() 函数读取图片(8位8M/bmp)至少200ms,当然24位 32位bmp 倍数所消耗的时间倍数上涨。那么有没有什么方法加快读取速度?目前发现一个亲测可行的方式:  1、通过 DIBAPI 读取图片,下载可转到点击打开链接,赚点积分 2、获取所读读片的图像数据的首地址,注意非结构头地址 3、通过halcon