原文链接:https://blog.csdn.net/opencv_learner/article/details/82113323

一直以来,对于手眼标定所涉及到的坐标系及坐标系之间的转换关系都没能有一个很好的理解,最近找了halcon手眼标定的实例在研究,发现对于相机的两种安装方式(眼在手和眼在手外),其坐标转换关系是类似的,这样说好像太抽象了,下面具体说说。

我觉得标定最基本的是要将坐标系理清楚,这里涉及到的坐标系有四个:机器人基坐标系base、法兰上的工具坐标系tool、相机坐标系camera和标定板坐标系cal;此外,涉及到了四个关键的4x4齐次转换矩阵,对于眼在手和眼在手外分别进行说明,下面是两种配置方式的坐标转换过程:

每一种配置方式,都是两个移动的坐标系和两个静止的坐标系,并且这四个坐标系构成了一个闭环。

对于moving camera方式,如下图所示,机械臂基坐标系和标定板坐标系是静止的,两者之间存在一个固定的转换矩阵;法兰上的工具坐标系和相机坐标系是移动的,两者之间存在一个固定的转换矩阵;需要求的是法兰上的工具坐标系与相机坐标系之间的转换矩阵。其中,M1可以从机器人示教器或者控制读出,Mx是需要求取的未知矩阵,M2可以从拍摄照片计算出来,M3未知,但是是一个固定的转换矩阵,利用坐标转换,有如下的等式关系:Mx=M2*M3^(-1)*M1,如果我有许多个这样的等式,利用M3不变,可以构建关于Mx的方程组,解方程组,求得Mx中各个元素的值,在这个过程中我们不必去求M3具体是多少,只是利用了其固定不变这个特性而已。

对于stationary camera方式,如下图所示,机械臂基坐标系和相机坐标系是静止的,两者之间存在一个固定的转换矩阵;法兰上的工具坐标系和标定板坐标系是移动的,两者之间存在一个固定的转换矩阵;需要求的是相机坐标系和机械臂基坐标系之间的转换矩阵。其中,M1可以从机器人示教器或者控制读出,Mx是需要求取的未知矩阵,M3可以从拍摄照片计算出来,M2未知,但是是一个固定的转换矩阵,利用坐标转换,有如下的等式关系:Mx=M1*M2*M3^(-1),如果我有许多个这样的等式,利用M2不变,可以构建关于Mx的方程组,解方程组,求得Mx中各个元素的值,在这个过程中我们不必去求M2具体是多少,只是利用了其固定不变这个特性而已。

halcon 手眼标定的坐标转换原理讲解的更多相关文章

  1. halcon相机标定及图像矫正

    https://blog.csdn.net/humanking7/article/details/44756073 相机标定内容详解:转载自 祥的博客 预备知识 标定中的四个坐标系 1.1.平面旋转 ...

  2. OAuth的机制原理讲解及开发流程

    本想前段时间就把自己通过QQ OAuth1.0.OAuth2.0协议进行验证而实现QQ登录的心得及Demo实例分享给大家,可一直很忙,今天抽点时间说下OAuth1.0协议原理,及讲解下QQ对于Oaut ...

  3. pureMVC简单示例及其原理讲解五(Facade)

    本节将讲述Facade,Proxy.Mediator.Command的统一管家.自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也 ...

  4. pureMVC简单示例及其原理讲解四(Controller层)

    本节将讲述pureMVC示例中的Controller层. Controller层有以下文件组成: AddUserCommand.as DeleteUserCommand.as ModelPrepCom ...

  5. pureMVC简单示例及其原理讲解三(View层)

    本篇说的是View层,即视图层,在本示例中包括两个部分:MXML文件,即可视控件:Mediator. 可视控件 可视控件由UserForm.mxml(图1)和UserList.mxml(图2)两个文件 ...

  6. php 变量原理讲解

    php 变量原理讲解 一.变量概念   所谓变量,是指在程序中其值可以变化的量. 程序是管理和处理数据的.在程序运行过程中,我们需要存贮这些数据,变量和常量就是用于保存程序运行时的数据的. 变量通常由 ...

  7. ElasticSearch之 控制相关度原理讲解

    控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...

  8. 手眼标定eye-to-hand 示例:handeye_stationarycam_calibration

    * * This example explains how to use the hand eye calibration for the case where* the camera is stat ...

  9. 手眼标定之相机随动eye-in-hand 示例:handeye_movingcam_calibration

    * * This example explains how to use the hand eye calibration for the case where* the camera is atta ...

随机推荐

  1. multi_index_container

    转自:https://blog.csdn.net/buptman1/article/details/38657807 multi_index_container: Boost Multi-index ...

  2. [转]HBase高可用性的新阶段

    From:http://m.csdn.net/article_pt.html?arcid=2823943 Apache HBase是一个面向线上服务的数据库,其原生支持Hadoop的特性,使其成为那些 ...

  3. 64. [Mcoi2018]终末之诗(上)

    Description 求出\(k^{k^{k^{k^{...}}}} \pmod p\) 的结果 扩展欧拉定理:\[a^x=a^{min(x,x\%\varphi(p)+\varphi(p))}(m ...

  4. Java实现Package编译和访问

    Java实现Package编译和访问 说明 所有文件都是使用UTF-8编码来写的,请不要用Windows记事本随便打开 Test.java文件中注释的方法说明了该类是不能访问其方法的 文件目录树 bi ...

  5. mongodb的学习-2-简介

    http://www.runoob.com/mongodb/mongodb-intro.html 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系 ...

  6. php官网下载的chm手册,源码字号太小的问题解决

    首先,到官方网站上下载chm格式的文档,地址如下: http://php.net/downloads.php 如图,点击荧光笔标出链接 然后就可以看到各种语言版本的文档手册,可以选择中文版,并带有笔记 ...

  7. Plugin with id 'com.novoda.bintray-release' not found的解决方法

    我们一般在在github上下载下来的代码,有时候会提示Plugin with id ‘com.novoda.bintray-release’ not found的错误,这个怎么解决呢,其实很简单,只要 ...

  8. python 内置常用函数

    import os def set(o): return set(o) # =={o} def reverseObject(it): it.reverse() return it def sortOb ...

  9. Kafka设计解析(三)Kafka High Availability (下)

    转载自 技术世界,原文链接 Kafka设计解析(三)- Kafka High Availability (下) 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场 ...

  10. C#做一个简单的进行串口通信的上位机

    C#做一个简单的进行串口通信的上位机   1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来操作数据.上位机可以接收下位机的信号.下位机是 ...