[Halcon&3D] 3D手眼标定理论与示例解析

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

  • 📢博客主页:https://loewen.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉
  • 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨


一. 3D手眼标定理论基础

因为3D相机知道的是点云坐标,机械手是空间坐标系,分为基础(底座)坐标系和工具(末端)坐标系,手眼标定目的就是将相机的图像坐标系的坐标和机械手的基础坐标系的坐标进行相互转化即求空间变换矩阵)。

在实际控制中,3D相机对场景中的物体扫描,并进行「三维匹配」,获取到物体的「姿态Pose」后,以3D点云的形式交给机械臂,通过标定好的坐标转换矩阵将相机获取到的3D点云坐标变换到机械手的基础坐标系中,然后根据机械手坐标系计算出各个电机该如何运动,从而控制机械手到达指定位置,可以用于物体抓取、无序分拣、装配、打磨等工作。

注:

1、如果是直接购买市面上的3D相机使用,在其生成对象的点云数据时,其内部已经完成了图像坐标系到世界坐标系的标定转换,所以需要我们做的就变成了求对象所在的世界坐标系(传感器坐标系)和机械手所在的基础坐标系之间的转换矩阵本文默认相机内部已经完成图像坐标系到世界坐标系的标定,即相机坐标系(传感器坐标系)等价于世界坐标系
2、若机械手中心不在法兰中心,需要做TCP(Tool Center Point)标定,得到机械手中心和法兰中心之间的相对位置关系,有四点法、六点法等。

场景示意图:

[Halcon&3D] 3D手眼标定理论与示例解析,3D视觉,手眼标定,halcon,基础理论,原力计划

2D标定一样,根据相机的装载位置分为两种情况:

  • eye-to-hand(眼在手外):相机固定在一个地方,机械手的运动不会带着相机一起移动;
    [Halcon&3D] 3D手眼标定理论与示例解析,3D视觉,手眼标定,halcon,基础理论,原力计划

  • eye-in-hand(眼在手上):相机安装在机械手上,随着机械手一起移动;
    [Halcon&3D] 3D手眼标定理论与示例解析,3D视觉,手眼标定,halcon,基础理论,原力计划

本质都是为了在机器人基础坐标系下,获取物体的姿态Pose情况(注意区分:2D手眼标定得到的是XY坐标位置和角度),便于机械手完成抓取等任务。本文主要介绍的是eye-to-hand


二. 3D手眼标定流程(eye-to-hand)

参考示例:`分类 — 方法 — 三维匹配(基于表面)` —— `calibrate hand eye stationary 3d sensor.hdev`
1、创建标准件的点云模型
* 1.读入点云以及创建模型
read_object_model_3d ('handeye/robot_gripper_3d_model.om3', 1, [], [], OM3DModel, Status)
create_surface_model (OM3DModel, 0.03, [], [], SurfaceModelID) //0.03代表采样距离在点云最小外界球体直径所占的比例
* 简化点云(针对散点),提高匹配速度
sample_object_model_3d (OM3DModel, 'fast', 0.0009, [], [], SampledObjectModel3D) //0.0009代表采样距离

PS:

  • simplify_object model_3d:也是简化点云,和上面sample_object_model_3d算子区别是它针对三角化之后的点云进行简化。
  • create_surface_model:创建点云模板,算子各个参数的含义:传送门。

读取的点云模型如图所示:

[Halcon&3D] 3D手眼标定理论与示例解析,3D视觉,手眼标定,halcon,基础理论,原力计划


2、创建手眼标定模型、多角度匹配标准件的实例点云数据

流程梳理

  1. 获取tool_in_base_pose,即工具坐标系相对于机器人基础坐标系下的姿态Pose —可从机器人示教器上读取到;
    PS:可通过write_pose将机器人工具坐标系的默认姿态通过机器人示教器获取到,然后保存至本地,最后通过read_pose读取出来即可。
  2. 匹配标准件的实例点云数据,获取标准件的姿态Pose
  3. 将步骤1和步骤2获取到的姿态Pose,设置进标定模型中;

代码展示

* 2.创建手眼标定模型
create_calib_data ('hand_eye_stationary_cam', 0, 0, HECCalibDataID)
for I := 1 to 15 by 1
    * 读取工具坐标系相对于机器人基础坐标系下的姿态
    read_pose ('tool_in_base_pose_' + I$'02d' + '.dat', ToolInBasePose)
    * 重新读取物体三维点云模型呢,通过对物体进行三维匹配获得其相对于世界坐标系(或传感器坐标系)下的姿态
    filename := 'handeye/robot_gripper_3d_scene_' + I$'02d'
    read_object_model_3d (filename, 1, [], [], OM3DScene, Status1)
    * 0.05也是一个比例,因为前面我们创建模板的时候对采样点进行了缩减,所以这里在重新读取一个点云模型时,也适当忽略一些点进行匹配
    * 输出获取匹配对象的姿态ObjInCamPose
    find_surface_model (SurfaceModelID, OM3DScene, 0.05, 1, 0, 'false', [], [], ObjInCamPose, Score, SurfaceMatchingResultID)
    * 判断模型是否被找到
    if (|Score|)
        * 将上面的工具坐标系相对于基础坐标系的姿态以及匹配对象的姿态设置到标定模型中
        set_calib_data (HECCalibDataID, 'tool', I, 'tool_in_base_pose', ToolInBasePose)
        set_calib_data_observ_pose (HECCalibDataID, 0, 0, I, ObjInCamPose)
    endif
    clear_object_model_3d (OM3DScene)
endfor

3、开始手眼标定
 * 3.开始手眼标定
calibrate_hand_eye (HECCalibDataID, HECPoseError)

标定完之后:

  • 可以获得世界坐标系(传感器坐标系)相对于机器人基础坐标系下的姿态;
  • 又已知工具坐标系相对于机器人基础坐标系下的姿态;

所以可知工具坐标系相对于世界坐标系(传感器坐标系) 下的姿态,从而完成机器手的抓取


4、获得各坐标系之间的姿态关系
* ⑴机器人基础坐标系相对于相机(传感器)坐标系的姿态 
get_calib_data (HECCalibDataID, 'camera', 0, 'base_in_cam_pose', BaseInSensorPose)
* ⑵物体所在的世界坐标系相对于工具坐标系的姿态
get_calib_data (HECCalibDataID, 'calib_obj', 0, 'obj_in_tool_pose', ObjInToolPose)

5、物体在机器人基础坐标系下的姿态求解

步骤:

  1. 对物体进行三维点云匹配获取物体相对于传感器的姿态ObjInCamPose
  2. 对标定得到的基础坐标系相对于传感器坐标系的姿态BaseInSensorPose进行翻转,获取传感器坐标系相对于基础坐标系的姿态SensorInBasePose
  3. SensorInBasePose联合的三维匹配得到的物体相对于传感器的姿态ObjInCamPose,最终求出物体在机器人基础坐标系下的姿态ObjInBasePose
  4. 最终将物体相对于机器人基础坐标系下的姿态信息通过通讯传给机器人,从而命令其完成相关指令;

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

* 1.相机3D扫描,获取物体点云数据
read_object_model_3d (filename, 1, [], [], OM3DScene, Status1)
*   对物体进行3D点云匹配,获取物体在传感器坐标系下的姿态ObjInCamPose
find_surface_model (SurfaceModelID, OM3DScene, 0.05, 1, 0, 'false', [], [], ObjInCamPose, Score, SurfaceMatchingResultID)
* 2.物体在机器人基础坐标系下的姿态求解
*   翻转标定得到的基础坐标系相对于传感器坐标系下的姿态BaseInSensorPose,获得SensorInBasePose
pose_invert (BaseInSensorPose,SensorInBasePose)  
*   SensorInBasePose联合ObjInCamPose,求解物体在机器人基础坐标系下的姿态
pose_compose (SensorInBasePose, ObjInCamPose, ObjInBasePose)

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

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

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

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

相关文章

  • [Halcon&3D] 主流的3D光学视觉方案及原理

    📢博客主页:https://loewen.blog.csdn.net 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 丶布布 原创,首发于 CSDN, 转载注明出处 🙉 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨ 一. 前言 传统工业机器视觉中, 3D 视觉与 2D 视觉技术的最大区别在

    2024年02月06日
    浏览(38)
  • [3D&Halcon] 3D重要算子及简单处理点云模型求高度示例讲解

    📢博客主页:https://loewen.blog.csdn.net 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 丶布布 原创,首发于 CSDN, 转载注明出处 🙉 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨ 一. 重要算子解析 read_object_model_3d ( : : FileName, Scale, GenParamName, Gen

    2024年02月03日
    浏览(32)
  • 用HALCON标定助手对相机进行标定

    任务要求: 已知相机镜头焦距 f 为 8mm ,相机单个 CCD 像素在水平和竖直两个方向上的尺寸均为 3.75 微米,相机为普通透光镜头和面阵相机,对相机进行标定,测量相机的内外参数。 操作步骤: 1. 在 HALCON 中运行 gen_caltab 算子,生成标定板和标定描述文件。 gen_caltab ( : : XNu

    2024年02月04日
    浏览(31)
  • 使用HALCON标定板快速标定,纠正成像畸变

    gen_caltab ( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : ) 为具有矩形排列标记的标定板生成标定板描述文件和相应的后记文件。 该算子可以制作所需的标定板参数文件 Caltab.descr 和标定板图像文件 Caltab.ps。 参数: 输入: XNum X方向的标记点数。 默认值:7 建议值:5、

    2024年02月13日
    浏览(31)
  • halcon相机标定

            1、摄像头拍出来的原始图片是存在畸变的,我们需要通过标定来矫正这种畸变。         2、相机坐标系 到 世界坐标系 的转化,需要知道图片上像素点的距离转化到实际中代表多长。         3、标定分为内参和外参,内参和相机本身的材质等有关,和其它无关,

    2024年02月05日
    浏览(28)
  • 相机标定张正友、opencv和halcon对比(1)

    本文将从基本标定开始,结合实际工作经验,分析张正友、opencv和halcon三者相机标定的深层原理与不同之处,内容比较多,如果出现错误请指正。 我们使用的镜头都是由多组镜片组成,它实际上是一种厚透镜模型,但是目前所有的相机标定是基于针孔模型来进行标定的,因此

    2024年02月03日
    浏览(29)
  • 3D相机与机械臂手眼标定流程

    1.采集n组点云数据,将第一组点云命名为(点云target)基准点云    这些数据可以通过3D相机采集得到,然后通过一些处理方法(如去噪、滤波等)进一步优化。 2.采集n组点云的同时记录n组机械臂位姿,同样将第一组位姿设为基准位姿(机械臂target) 3.将获取的n组机械臂位姿由欧

    2024年02月12日
    浏览(30)
  • Halcon视觉软件库介绍

    Halcon提供了各种各样的功能,包括图像处理,特征提取,模板匹配,形状识别和三维视觉等。它还包括用于相机校准和三维重建的工具。 优点: Halcon具有强大和灵活的图像处理和机器视觉功能。 它支持多个平台,并且可以与许多不同的编程语言和开发环境集成。 Halcon提供了

    2024年02月16日
    浏览(31)
  • C#联合Halcon机器视觉框架源码

    本软件参考EV开发,共用 50多个算子 模块,基于 WPF+Halcon ,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。 整体代码目录结构如下: 一、Main模块 软件启动入口位置,将NExtVision设为启动项目。 LoadFrm用于初始化、增加预编译及加载插件等功能。

    2024年04月12日
    浏览(42)
  • 在C#中使用Halcon开发视觉检测程序

    本文的初衷是希望帮助那些有其它平台视觉算法开发经验的人能快速转入Halcon平台下,通过文中的示例开发者能快速了解一个Halcon项目开发的基本步骤,让开发者能把精力完全集中到算法的开发上面。 首先,你需要安装Halcon, HALCON 18.11.0.1 的安装包会放在文章末尾。安装包分

    2024年02月03日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包