儿童节特刊 | 如何练好手眼协调能力(手眼标定详解,附源码)

当婴幼儿看到物体时,首先经过眼睛获取信息,传输到大脑进行理解,最终经过手来操做完成玩具的抓取、放置。手、眼、脑协同是人类和少数动物的一项特殊技能,经过常常玩一些简单的益智玩具,能够逐渐锻炼加强孩子的手眼协调能力,同时能够做用到大脑,促进孩子的智力发育。git

商家们也看到了这块领域,设计出不少益智玩具和游戏,如图1中所示。孩子须要把玩具抓起并放入车里。孩子的空间思惟能力、协调能力在游戏中获得了锻炼。
github


图1
图1

在智能机器人领域,机器人须要完成高效、复杂的工做,不然没法称之为“智能”。然而,机器人要想得到同人类同样的协调能力并不容易。如何才能实现像人同样的手眼协同能力呢?算法

再回到这个游戏。孩子在玩玩具时,大脑中有一个坐标系,可看作是基础坐标系;灵活的手在运动中造成一个轨迹,称之为手的坐标系;玩具要放置的点又有一个目标坐标系。三个坐标系协同,游戏才能顺利地玩下去。若是为此游戏场景加入坐标,会是这个样子,如图2所示。
spa



图2

智能机器人领域,四轴、六轴、并联等机械臂可认为是机器人的手臂(虽然自由度较高、速度快,但相比人手的灵活性还远远不如)。机器人的眼睛,通常指摄像机(包括2D和3D)。目前智能机器人的主流是使用3D视觉相机。机器人的大脑通常指进行核心控制和计算的工控机或嵌入式芯片。
通常而言,机器人的“手眼协调”须要一个“手眼标定”(Hand-eye calibration)的过程。手眼标定是机器人领域的一个经典的问题,其核心是计算出相机坐标系在机器人坐标系下的转移矩阵。转移矩阵是4×4的矩阵,通常用齐次坐标表示。其中最重要的两个份量是旋转矩阵\(R\)和平移矢量\(t\),分别表示旋转份量和平移份量。获得转移矩阵后,可将相机下的坐标转换到机械臂坐标系下,从而完成工做。如图3所示。
设计



图3

两个坐标系,如何创建关系?这是手眼标定要解决的核心问题。
手眼标定和核心是解决一个\(AX=XB\)的矩阵。解此矩阵的算法就是手眼标定算法。
小蓝( 杭州蓝芯科技有限公司简称)公司依赖Eigen库实现了经典Tsai的方法而且开源,不想进行理论推导的读者可直接用此代码:https://github.com/zjulion/handeyecatcode

如何进行手眼标定

注意:如下涉及公式推导,不想推数学公式的可跳过。
理解手眼标定的核心是如何将机器人的手眼关系代入\(AX=XB\)的公式中。
首先要理解\(A\)\(B\)\(X\)分别表明什么含义。
\(X\),表示未知量,即手眼标定的转移矩阵。
\(A\)\(B\)呢?
先看机器人手眼分离的示意图。
blog



图 4

图4中,机器人底座通常认为是世界坐标系的原点。摄像机(眼睛)识别的位置经过转移矩阵,能够转换到机器人坐标系(同时也是世界坐标系)下。在手眼标定的过程当中,须要连续移动机械臂终端,采集一组末端执行器的位姿;与此同时,相机采集挂在末端执行器的标记(例如,棋盘格)的位姿,组成另外一组数据。
预警:下面是一些真正的数学推导。
假设采集的数据有\(N\)对,根据图中的几何关系,未知量有两个,分别是标记在末端执行器下的位姿\(H_{grid}\)和相机在世界坐标系下的坐标\(H_{camera}\)
其中\(H_{camera}\)是咱们手眼标定的目标,\(H_{grid}\)是多少咱们并不关心。
根据标记是空间中的位姿,咱们能够获得(两边都是标记的位姿)
\[ H_{camera}\ \ast\ H_{grid\_in\_c}=H_{end}\ \ast\ H_{grid} \]
观察上面公式,游戏

  • \(H_{camera}\)未知,是目标矩阵,不变量;
  • \(H_{grid\_in\_c}\)已知,是能够经过相机读到的数据,变量;
  • \(H_{end}\)已知,是机械臂末端读数,变量;
  • \(H_{grid}\)未知,咱们很不喜欢它,不变量。
    故此方程有两个已知量,两个未知量,一组数据不可解!
    一组数据不行,那就多来几组吧!
    假设咱们有两组数据,分别是第\(i\)组合第\(j\)组,两组坐标在公式里的括号内表示。
    回想初中代数,咱们能够经过相似方程组的解法,消去咱们不喜欢的\(H_{grid}\)
    有以下两组方程,
    \[ {H_{camera}\ \ast\ H}_{grid\_in\_c(i)}=H_{end(i)}\ \ast\ H_{grid},\\ {H_{camera}\ \ast\ H}_{grid\_in\_c(j)}=H_{end(j)}\ \ast\ H_{grid} \]
    联立方程,消去\(H_{grid}\),最终咱们获得,
    \[ H_{end(j)}\ast H_{end(i)}^{-1}*H_{camera}=H_{camera}\ast H_{grid\_in\_c(j)}\ast H_{grid\_in\_c(i)}^{-1} \]
    至此,回想矩阵乘法的结合律,咱们惊喜的发现,方程的形式正是AX=XB!
    其中\(A\)\(B\)分别已知,\(X=H_{camera}\)。什么?\(A\)\(B\)是什么?本身观察一下!
    数学推导结束。

小朋友们,不对,工程师们,能够用此数据带入标准算法计算了!
通常来讲,采集的数据越多,标定的结果越准确。采集时,为防止陷入局部陷阱,需尽量多的采集机器人姿态,同时,要保证标记在机械臂末端位姿固定,相机和机械臂的相对位姿也要保持固定。
有人说,不对,我用的相机不是这样装的。我把相机装在了机械臂上,同其一块儿移动,能够用这种方法吗?
答案固然是能够。
这涉及到手眼协同机器人的两种模式,分别是eye-in-handeye-to-hand。刚刚咱们一直研究的是eye-to-hand的模式。对于eye-in-hand模式,能够采用相似方法,消去咱们不喜欢的中间变量,最终归结到\(AX=XB\)的形式,就能够解了。
两种模式在公开的源码中均可以找到。get

总结

一、孩子的手眼协调能力会在游戏中获得锻炼,只要给玩具让她/他玩,基因会逐渐教会她/他灵活的手眼协同能力。
二、智能机器人的手眼协调,须要工程师们的认真调教!通常来讲,数据越多,偏差越小。手眼协调能力,是机器人完成分拣、抓取、放货工做的前提。
源码



手眼协同做业

源码地址

相关文章
相关标签/搜索