本文主要介绍了机器人手眼标定的相关原理与思路,介绍了两种不同安装条件下如何通过同组固定点进行手眼标定,及通过解决  问题进行手眼标定,最后给出了手眼标定的相关评价方式。文章重在进行标定过程的梳理以及相关公式的推导,主要目的还是为了厘清什么是手眼标定,以及如何进行手眼标定。

        本文依旧作为自己学习的一些记录,如有谬误,欢迎斧正!

        文章参考资料:

        相机标定(一):机器人手眼标定 - 知乎 (zhihu.com)

手眼标定_全面细致的推导过程 (360doc.com)

手眼标定传统方法 - 研究僧小陈 - 博客园 (cnblogs.com)

手眼标定之基本原理_3D视觉工坊-CSDN博客_手眼标定

手眼标定(Hand in Eye) - 简书 (jianshu.com)


1  如何理解手眼标定

我们不妨想象,在生活中,我们需要用手移动某一物体时,需要经过哪些步骤?

第一步:通过眼睛去观察三维世界,将三维世界的信息传递至视网膜,转换成二维平面的信息传递给我们的大脑;

第二步:假设,当我们需要移动三维空间下的物体时,对我们的大脑而言,是将一个物体从二维平面的 A' 点移动至 B' 点,因此大脑需要计算从二维坐标转换到三维坐标 A 点和 B 点。

第三步:当大脑获得了 A 点和 B 点的坐标,就可以用手将物体进行相应的移动。

其中,第二步就是进行手眼标定,即得到二维坐标(像素坐标系)到三维坐标(世界坐标系)的转换矩阵

在实际的控制过程中,相机在检测到目标在图像中的像素位置后,通过标定好的坐标转换矩阵将相机的像素坐标变换到机械手的空间坐标系中,然后根据机械手坐标系计算出各个电机该如何运动,从而控制机械手到达指定位置。

2  坐标系与转换关系

2.1  基础坐标系

对于上面的讲解我们将其推及一个简单的机械手系统,我们不难得知其中涉及的坐标系包括:

1)机械手基础坐标系

2)机械手末端夹具坐标系

3)相机坐标系

由之前介绍的相机标定相关知识,我们也可以知道,这里说的相机坐标系不仅包括相机本身的坐标系,还包括像素坐标系

4)工件坐标系(标定板坐标系):

2.2  坐标系转换关系

坐标系之间的转换关系可以记为:

1)机械手末端夹具坐标系到机械手基础坐标系的转换关系

该转换关系可以通过机器人系统得出,在手眼标定过程中我们认为其是已知的,其转换关系用矩阵进行表示可以记为: 。

2)相机坐标系到机械手末端夹具坐标系的转换关系:

尽管该转换关系视相机的装载方式有所区别,但相同点是我们认为其是未知的,也正是我们需要去进行求解的,其转换关系用矩阵进行表示可以记为: 。

3)相机坐标系到标定板坐标系的转换关系:

该转换关系我们可以通过相机标定进行获得,因此我们也认为其是已知的,其转换关系用矩阵进行表示可以记为: 。

4)标定板坐标系到机械手基础坐标系的转换关系

该转换关系也正是我们最终希望求解的,只要机械手整体与标定板的相对位置不发生变化,这个变换矩阵也就不发生变化。

3  利用同组固定点进行标定

3.1  通用思路

机器人的手眼标定其实就是两个坐标系之间的转换关系的标定。我们希望计算出相机坐标系到机械手坐标系的转换关系,并且我们已知对应的几个固定点 在这两个坐标系的坐标 和  。根据坐标转换公式,可以得出:

上式中的  表示我们希望计算出的相机到机械手的转换矩阵。

3.2  相机不在机械手上(eye to hand)

3.2.1  待求量

相机固定在一个地方,机械手的运动不会带着相机一起移动。对于 Eye-to-Hand 而言,相机坐标系相对于机械手基础坐标系是固定的,而对于机械手末端夹具坐标系是变化的

Eye-to-Hand 的问题下,待求量为相机到机械手基座坐标系固定转换矩阵  。考虑到相机是固定在一个位置,因此相机只有相对于基座坐标系才是固定不变的,这样我们的待求量 是一个固定的参数,这样的标定才是有意义的。

3.2.2  标定思路

根据 第3.1节 中所介绍的通用求解思路,下一步需要通过棋盘格图像上的固定点  来获得机械手基座坐标系下的固定点坐标  和相机坐标系下的坐标 

通过识别棋盘格,我们可以得到棋盘格中的角点相机坐标系下的坐标 ,但是这是二维坐标,通过相机内参和物体的深度信息我们可以计算出 。接下来我们只要测量出来对应的棋盘格点在机械手基座坐标系下的坐标 ,便可以标定出机械手和相机之间的转换矩阵 

3.2.3  转换关系推导

Eye-to-Hand 问题下,棋盘格在标定的时候,会固定在机械手的末端夹具上,而机械手的末端夹具坐标系到基座坐标系的转换矩阵,可以通过机器人正向运动学计算得到。因此我们可以通过如下关系测量出棋盘格点在机器人基座坐标系下的坐标  :

在上述公式中, 和  分别代表机械手末端夹具坐标系(tool)基座坐标系(base)的转换矩阵和棋盘格坐标系(board)机械手末端夹具坐标系(tool)的转换矩阵。

其中, 可以实时根据机器人正向运动学得到,而  可以通过设计一个固定尺寸棋盘格得到。当棋盘格尺寸以及安装固定后,我们可以设棋盘格的左上角点为原点,然后通过测量或者设计尺寸计算棋盘格原点机器人末端坐标原点平移坐标,而棋盘格平面一般与机械手末端载具平面平行,因此该原点的法向量也可以获得,接下来就可以计算出  。

 代表棋盘格角点再棋盘格坐标系下的坐标,这个同样可以根据设计棋盘格的尺寸得到。需要注意的是棋盘格的角点在机器人坐标系图像坐标系的顺序需要一一对应,但是一般的方形棋盘格会存在旋转对称的问题,即我们无法区分棋盘格的原点是在左上角还是右下角,因此在进行手眼标定时可以使用非对称的棋盘格

通过上面的推导,我们已经可以计算出棋盘格角点在机器人基座坐标系中的坐标 ,然后根据张正友标定法得到棋盘格在相机坐标系中的坐标 。那么根据 第3.1节 中介绍的计算方法就可以得到相机到机器人的转换矩阵:

3.3  相机在机械手上(eye in hand)

3.3.1  待求量

相机安装在机械手上,随着机械手一起移动。对于 Eye-in-Hand 而言,相机坐标系相对于机械手末端夹具坐标系固定的,而对于机械手基础坐标系变化的

当相机固定于机械手末端夹具时,此时相机坐标系与机械手末端夹具坐标系的变换关系固定,而与基座坐标系的变换关系会时刻变化,因此此时的待求量变成了相机坐标系(camera)到机械手末端载具坐标系(tool)的变换矩阵 

3.3.2  转换关系推导

根据各个坐标系的关系,我们可以给出下述的坐标变换方程:

上式中  代表固定在某个位置上的棋盘格中的角点,在机器人基座坐标系下的坐标。可以通过两种方式计算这个坐标:

1)在机械手末端的夹具上加上探针,直接由末端去触碰棋盘格上的点,根据机器人正向运动学得到的末端夹具到基座坐标系的转换矩阵  及棋盘格角点到末端坐标系的坐标 ,我们可以得到固定的棋盘格角点在机器人基座坐标系下的坐标  。

2)在机械手末端的夹具上安装相机,由相机去直接测量棋盘格角点机器对应的坐标 ,通过计算机器手末端夹具到基座坐标系的转换矩阵  和相机坐标系到机器人末端坐标系的转换矩阵 ,便可以求出棋盘格在机器人基座坐标系下的坐标 

在第二种方式中,相机坐标系到机器人末端坐标系的转换矩阵  是我们的待求量,因此我们需要对开始时描述的坐标变换方程进行简单的变换

在上式中,坐标的三个变量都是已知量,由此我们可以计算出相机到机器人末端坐标系的转换矩阵 

3.4  小结

本部分所探讨的标定方法其实是最直接的方式,即尽量测量出同一组点不同坐标系下的坐标,从而直接可以通过伪逆矩阵的方式计算出坐标变换矩阵。当然,还有更加具有普适性的方法,在不满足上述条件下的情况也可以标定出矩阵,也就是经典的  问题的求解,其中 已知,为待求量。这种方法将在下章进行讨论。

4   问题推导

4.1  转换关系推导(以Eye-in-Hand为例)

首先,我们控制机械手从初始位置移动至位置 1 ,我们可以获取此时的机械臂基座坐标夹具坐标相机坐标以及标定板坐标

对上面的三个公式进行联立,我们可以得出:

同理,将机械手移动到位置 2 时,可以得出:

Eye-in-Hand 问题中,机械臂基座与标定板之间的关系是固定的,所以可得:

Eye-in-Hand 问题中,待求量机械臂末端夹具坐标系到相机坐标系的转换关系,我们不妨记:

因此,上面的推导公式可以写做:

则上面的推导公式又可以简写为:

至此,我们可以将手眼标定问题归结为对上述公式中  的求解问题。其中, 可以通过机器人正向运动学获得, 可以通过相机标定获得。

4.2  求解 

求解  问题的方式有很多种,包括但不限于:利用李群理论,转化为最小二乘问题和采用时对偶四元数的知识,进行统一计算。下面主要介绍使用李群李代数求解的方法。

李代数到李群的转换满足指数映射关系,假设  ,而  ,则其指数映射满足罗德里格斯公式

其中  ,需要注意的是,正常的指数映射不是这种形式

将  写成矩阵形式为:

展开上述矩阵可得:

对于上述方程我们可以采用两步法进行求解,即先解算旋转矩阵再求解平移向量

4.2.1  求解旋转矩阵

假设 ,这里的矩阵都是旋转矩阵(SO(3)),而非变换矩阵(SE(3))。

通过变换可得:

方程两边取对数可得:

令:

则上式可化为:

从而可化为:

存在多组观测值时,求解该方程可以转化为下面最小二乘拟合问题

显然,上述问题是典型的绝对定向问题,因而求解上式与绝对定向相同,其解为:

其中,

上式仅在  不奇异时可以进行求解,当只有两组  时,不能使用上述方法进行求解

当只有两组  时,即存在  时:

其中:

综上所述,可以计算出旋转矩阵

4.2.2  求解平移向量

已知:

通过移项化简可得:

不妨写作:

又因为  不一定可逆,因此在等式两边同时乘以 ,即:

由此可知:

存在多组数据时:

即可求得  。

4.3  小结

通过解决  问题进行手眼标定的方法,其步骤大致如下:

1)当机器人静止在 位置1 时,进行摄像机标定,获得此时的外参矩阵 

2)控制机器人移动至 位置2 ,获取此时的机器人正向运动矩阵 

3)当机器人静止在 位置2 时,进行摄像机标定,获得此时的外参矩阵 

4)控制机器人移动至 位置3 ,获取此时的机器人正向运动矩阵 

5)当机器人静止在 位置3 时,进行摄像机标定,获得此时的外参矩阵 

……测量多组数据……

n)根据测量得到的数据,求解 

5  评价手眼标定效果

通过测量几组不同位置的目标点,我们可以比较:

测量值:

和预测值:

之间的距离误差:

通过计算各个点的误差的均值和标准差,最终我们可以计算出标定结果的系统误差(均值)和随机误差(标准差)。

标定学习笔记(四)-- 手眼标定详解相关推荐

  1. 【学习笔记】线段树详解(全)

    [学习笔记]线段树详解(全) 和三个同学一起搞了接近两个月的线段树,头都要炸了T_T,趁心态尚未凉之前赶快把东西记下来... [目录] [基础]作者:\((Silent\)_\(EAG)\) [懒标记 ...

  2. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  3. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  4. [原创]Saltstack学习笔记:命令参数详解以及配置文件说明

    很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...

  5. Laravel学习笔记汇总——Collection方法详解

    ## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...

  6. Android学习笔记——Android 签名机制详解

    Android 签名机制详解 近期由于工作需要在学习 Android 的签名机制,因为没有现成资料,只能通过开发者文档和阅读博客的方式对 Android 签名机制进行大致了解.过程中查阅到的资料相对零 ...

  7. [学习笔记] 伸展树splay详解+全套模板+例题[Luogu P3369 【模板】普通平衡树]

    文章目录 引入概念 全套模板 变量声明 update ==rotate旋转== splay操作 insert插入 delete删除 查找x的位置 查找第k大 前驱/后继 极小值-inf和极大值inf的 ...

  8. cdt规约报文用程序解析_程序员必备的学习笔记《TCP/IP详解(二)》

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP 协议用来找到目标主机的 Ethernet 网卡 Mac 地址,IP 则承载要发 送的消息.数据链路层可以从 ARP 得到数据的传送信息,而从 ...

  9. RT1064学习笔记__函数初始化详解

    函数详解 一. systick_delay_ms() 毫秒级延时函数 二.zf_gpio.c函数 ① gpio_init() GPIO初始化 ② gpio_set() GPIO输出设置 ③ gpio_ ...

  10. Android学习笔记(6)——详解持久化技术

    第六章 数据存储权方案--详解持久化技术 6.1 持久化技术简介 概述:Android 系统中主要提供了3种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库 ...

最新文章

  1. springcloud基于ribbon的canary路由方案
  2. DAO模式多表联查案例
  3. Nginx 之一:编译安装nginx 1.8.1 及配置
  4. python商用_python实现sm2和sm4国密(国家商用密码)算法的示例
  5. php 输出读取结果集,php获取数据库结果集实例详解
  6. spark视频-Spark on Yarn
  7. 30 行 Javascript 代码搞定智能家居系统
  8. watch解放你的双手
  9. ASP.NET MVC HandleErrorAttribute 和 远程链接
  10. 葡萄酒酒进销存单机版_葡萄酒销售问题| 找到销售葡萄酒的最大利润
  11. 新旧_飘云羽逸_新浪博客
  12. 计算机Excel应用案例,Excel VBA在Office中的应用案例
  13. 硕士生写小论文的经验(转载)
  14. 做单:第3章 骂人的客户
  15. Mysql创建用户给局域网内用户使用,开放权限,开放ip访问。
  16. HBase MOB特性介绍
  17. 巴比特独家 | 区块链入选新基建,这几件事你不得不知
  18. 前端面试题——浏览器原理 高频
  19. 数据结构——栈的基本操作
  20. Typora导出word文档自动生成目录

热门文章

  1. PostgreSQL数据库从入门到精通
  2. 三容水箱液位控制系统_过程控制实验-三容水箱液位控制系统
  3. 秋名山直播php源码,【斗鱼直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)...
  4. Python Socket模块实现服务端与客户端通信
  5. 关于ASCII码的转换
  6. c语言正确声明的格式,c语言函数声明(c语言函数声明格式)
  7. 【流体力学】加和不加湍流模型在NS方程上的体现
  8. linux USB摄像头 V4L2工具调试摄像头
  9. 微信小程序demo、开发工具下载地址
  10. ArcGIS-云南洱海流域地形图制作及使用图层下载(shp+dem)