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

这篇具有很好参考价值的文章主要介绍了嚼一嚼Halcon中的3D手眼标定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题概述

1、何为手眼标定?

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

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

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

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

3、手眼标定公式推导

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

二、Halcon例程解读

主要是参考 hand_eye_movingcam_calibration.hdev

1、初始化

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

1)初始化显示参数

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

2)初始化三维坐标系

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

3)初始化标定模型

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

3)显示标定误差

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

2)可视化

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

三、如何实操

1、准备标定板

窗口–打开算子窗口–gen_caltab

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

  • 设置圆点直径,MarkDist × DiameterRatio

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

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

2、相机标定

助手–打开新的 Calibration

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

  • 点击标定

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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 六个)

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

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

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

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

  • 输出相应的转换关系

四、关键点梳理

1、tool-base

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

2、cam-obj

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

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

3、求解AX=XB

嚼一嚼Halcon中的3D手眼标定,1024程序员节,手眼标定,halcon,3D

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

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

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

五、后续的思考

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

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

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

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

文章来源地址https://www.toymoban.com/news/detail-757877.html

到了这里,关于嚼一嚼Halcon中的3D手眼标定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手眼标定,9点标定过程及其运算

    在工业领域常常会遇到将相机安装在机器手中,由相机快速引导机器手进行工作的方式。其中9点标定的作用是将图像的坐标转化为机器手的坐标。 不同标定文件的区别:不同标定的区别在于:图像坐标系与机器人坐标系是否匹配,单像素精度是否匹配。影响单像素精度是,

    2023年04月24日
    浏览(33)
  • Realsense D455/435内参标定以及手眼标定

    内参数 与相机自身特性有关的参数,焦距,像素大小 外参数, 相机的位置,旋转方向 理想情况下,镜头会将一个三维空间中的直线也映射成直线(即射影变换),但实际上,镜头无法这么完美,通过镜头映射之后,直线会变弯,所以需要相机的畸变参数来描述这种变形效果

    2024年01月17日
    浏览(42)
  • 手眼标定原理

    参考了https://zhuanlan.zhihu.com/p/103749589 手眼标定法是标定摄像头与机械臂的一个经典方法,不过这个思想也适用于其他传感器,比如自动驾驶中激光雷达与摄像头之间的标定,比如东京大学的这篇工作《LiDAR and Camera Calibration using Motion Estimated by Sensor Fusion Odometry》。 手眼标定法

    2024年02月06日
    浏览(37)
  • 手眼标定眼在手上

    1、为什么要用手眼标定 参考手眼标定特别是眼在手上在网上的文章很多,但很多在实际中调试不通。在定位时候,往往希望相机能返回的是机械的世界坐标,而不是相机的的图像坐标。从而间接计算出相机坐标系与机械坐标世界坐标转换矩阵,以镜头中心为参考点。 2、手眼

    2024年02月14日
    浏览(36)
  • 机械臂与RealSense相机手眼标定

    环境: 本文主要使用kinova mico机械臂 + RealSense D435i深度相机进行了eye to hand的手眼标定。 系统环境:Ubuntu18.04,ROS Melodic 硬件:Kinova mico,RealSense D435i 特别注意:经测试,本方法有效可行,好多博客里说的运行写好的标定launch文件后,只有两个rviz界面,而没有标定的rqt_easy_

    2024年02月15日
    浏览(37)
  • GRCNN抓取网络学习4【手眼标定】

    2023年09月10日
    浏览(38)
  • 机械臂 手眼标定 手眼矩阵 eye-in-hand 原理、实践及代码

    所谓 手眼系统 ,就是人眼睛看到一个东西的时候要让手去抓取,就需要大脑知道眼睛和手的坐标关系。而相机知道的是像素坐标,机械手是空间坐标系,所以手眼标定就是得到像素坐标系和空间机械手坐标系的坐标转化关系。 目前工业上通常使用两种方法进行机械臂的手眼

    2024年02月03日
    浏览(38)
  • 机器人手眼标定快速精度验证方法

    一、原理及流程         机器人的手眼标定原理在本文中不再过多描述,基本流程都是先标定相机的内外参数,然后标定两台相机之间的位置关系,如果相机是可以转动的话,还要标定转台与机械臂之间的关系。         在手眼标定完成后,怎么确定标定结果是否准确呢

    2024年02月02日
    浏览(45)
  • 机器人手眼标定原理与python实现

    机器人手眼标定分为eye in hand与eye to hand两种。介绍之前进行变量定义说明: {b}: base基坐标系 {g}: gripper夹具坐标系 {t}: target标定板坐标系 {c}: camera相机坐标系 1、眼在手上(eye in hand) 眼在手上,相机固定在机器人上。 图1. eye in hand示意图 由以上两公式得: 经变换得: 可得:

    2024年02月02日
    浏览(35)
  • Halcon中的一些3D算子

    1.read_object_model_3d  从文件读取一个3d模型 如下图,读的一个ply文件出来是个3d点云模型  2.visualize_object_model_3d  交互式展示3d模型 即上个算子读出来后,通过这个算子可以把3d模型显示出来旋转、平移,缩放来观察操作 算子签名 visualize_object_model_3d( : : WindowHandle, ObjectModel3D,

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包