机器人手眼标定

发布时间:2023-05-28 11:30

文章目录

  • 前言
  • 手眼标定标的是什么
  • 手眼标定原理
    • 眼在手上(Eye_in_hand)
    • 眼在手外(Eye_to_hand)
  • 怎么求解AX=XB
  • 误差分析以及如何减少误差
  • 如何实操


前言

  前阵子由于参与一个自动加油机器人的项目,研究了一下机器人的手眼标定。借着写博客的机会把整个过程理通顺、消化消化(其实主要就是健忘~_ ~)

手眼标定标的是什么

  我们开门见山,手眼标定标的是相机到机器人坐标系的变换矩阵。那么为什么要标这个呢?我们以加油机器人为例,要实现对加油盖的准确抓取,我们需要知道加油盖的位姿相对于机器人基坐标系下的位姿。这个位姿的求解流程如下图:
\"机器人手眼标定_第1张图片\"

图1

  上图中包括了眼在手上与眼在手外两种方案,其实都是类似的,只不过眼在手上标定的是相机到末端,因为相机坐标系和末端坐标系固连,它与末端坐标系的相对位置关系没变,眼在手外标定的是相机坐标系与机器人极基坐标系的关系,因为相机与机器人都是不动的(标定好就千万别动机器人与相机,否则要重新标定),故其相对位置关系不变。
  无论是眼在手上还是眼在手外,归根结底,最终还是要打通从从目标抓取物的抓取坐标系(比如本项目抓取坐标系就在加油盖上)到机器人基坐标系这一条转化通路。至于手眼标定可以用在哪些领域我就不赘述了。

手眼标定原理

  我将主要通过两张图来分别说明手眼标定原理,用图总是更为简明扼要。
  图均引自:https://blog.csdn.net/yaked/article/details/77161160

眼在手上(Eye_in_hand)

  眼在手上,也就是相机与机械臂的末端坐标系固连,标定板与机器人的基坐标系相对位置关系不变,我们标定的是相机坐标系在末端坐标系下位姿。
\"机器人手眼标定_第2张图片\"

图2

眼在手外(Eye_to_hand)

  眼在手外,也就是相机固定不动,标定板与机器人的末端坐标系固连,我们需要标定的是相机坐标系在基坐标系下的位姿。
\"机器人手眼标定_第3张图片\"

图3

  综上,我们可以看出来,不论是眼在手上还是眼在手外,最终都可以化解成求AX=XB的问题。

怎么求解AX=XB

  求解AX=XB的方法主要可以分类两类:

  • 两步法,先求旋转再求平移
  • 一步法,同时求解平移加旋转

  具体可参考:手眼标定AX=XB求解方法(文献总结)
  我这次标定使用的是Tasi-Len方法,这是一种两步法,也就是先求解出旋转矩阵,在根据旋转矩阵求解出平移向量。我们以眼在手上为例进行介绍。
  图2中,我们对式子进行简化,baseTend1-1 baseTend2化简之后就等于end1Tend2,就是两次不同拍照点之间的末端坐标系之间的齐次变换矩阵(因此Tasi-Len论文中有一句话,就是就算机械臂精度不太好,示教器显示的末端坐标系在基座标的位姿不准确也不太打紧,只要不同拍照点之间末端坐标系的相对位姿准确就行)。相机坐标系,也就是式子右端进行同样的处理。

Actually, even if Hgi may be bad, so long as Hgij is good, there is no problem. This is due to the fact that the computational procedure entails only Hgij but not Hgi

——论文原文

   Tips:接下来的所有齐次变换矩阵都用H来代替,T表示平移矢量,上面用T代表齐次变换矩阵只是为了和图2、3吻合,实在不想重画~~

  第 i 次与第 j 次拍照点之间,末端坐标系的齐次变换矩阵如下: \"在这里插入图片描述\"  相机坐标系之间的齐次变换矩阵如下 :
\"在这里插入图片描述\"
  那么上文中的AX=XB可以转化成如下式子:
\"在这里插入图片描述\"  其中,Hcg便是我们需要求解的相机相对于末端的位置关系。
  在开始解释推导过程之前,有几个东西需要提前说明一下:
1、论文中的旋转表示采用的是罗德里格斯旋转公式。其与旋转矩阵的区别是旋转矩阵把三维空间的旋转看作绕三个正交的向量旋转的组合,而罗德里格斯旋转公式把旋转看作绕某个旋转轴Pr旋转特定角度 θ \\theta θ,其实两者是等效的。
  罗德里格斯大家可以参考这个链接:https://blog.csdn.net/qq_36162042/article/details/115488168
2、向量的反对称阵,设V=[vx,vy,vz],那么有:
\"机器人手眼标定_第4张图片\"
Tasi-Len的求解步骤如下:

1.计算 Pcg
   Pcg定义如下:
\"在这里插入图片描述\"

  其中Pcg为从末端坐标系转到相机坐标系的旋转轴(在末端坐标系下), θ \\theta θRcg为旋转角度。
  计算公式如下:
\"在这里插入图片描述\"
  其中Pgij,Pcij分别为第i、j次拍照点末端坐标系、相机坐标系变换之间的旋转轴,求解方法采用最小二乘法。
2. 计算Pcg
\"在这里插入图片描述\"

3.计算旋转矩阵Rcg
\"在这里插入图片描述\"

4.计算平移向量Tcg
\"在这里插入图片描述\"

误差分析以及如何减少误差

  论文中,旋转误差为:
\"在这里插入图片描述\"
  平移误差为:
\"在这里插入图片描述\"
   公式中下标12和23表示用于标定的两组运动数据,例如Pg12 表示第一次运动的旋转矩阵Rg12对应的旋转轴,Pg23表示第二次运动的旋转矩阵Rg23对应的旋转轴。
1.两次运动的旋转轴的夹角:越大越好
   从旋转误差公式看到,旋转误差公式的第一项分母为 sin[<(Pg12, Pg23)],因此旋转轴Pg12与Pg23的夹角越大,则误差越小。也可以从求解P’cg公式理解旋转轴夹角的影响,使用两组运动数据进行求解则求解方程的系数矩阵为:
\"在这里插入图片描述\"
   从系数矩阵可以看到,两次运动的旋转轴的夹角越大,系数矩阵越接近线性独立。

2. 每次运动的旋转矩阵对应的旋转角度:越大越好
   两个误差公式的分母都有 θ \\theta θRg12:因此每次运动的旋转角度越大,标定精度越高。

3. 相机中心到标定板的距离:距离越小越好
   从平移误差公式可以看到,公式中有|Tc1| ,该项为相机坐标系到标定板坐标系的距离,因此该距离越小越好。

4. 每次运动机械臂末端运动的距离:距离越小越好
   在平移误差公式中包含一项|Tg1 - Tg2|,该项为每次机械臂运动中末端运动的距离,因此该距离越小越好。
5. 机械臂精度影响
  在旋转误差公式中,旋转误差与机械臂末端位姿误差呈线性关系,且在平移误差公式中,平移误差与机械臂末端位姿误差接近线性关系,当机械臂末端位置误差很大时平移误差受位置误差影响很大。在以上影响因素中,前4个因素为主要影响因素,机械臂精度为第二影响因素,但是有时候,机械臂末端位置定位精度误差很大时,机械臂精度影响成为主要因素。
   减少误差的办法主要有以下几个:

  1. 不管采集多少组用于标定的运动数据,每组运动使运动角度最大。
  2. 使两组运动的旋转轴角度最大。
  3. 每组运动中机械臂末端运动距离尽量小,可通路径规划实现该条件。
  4. 尽量减小相机中心到标定板的距离,可使用适当小的标定板。
  5. 尽量采集多组用于求解的数据。
  6. 使用高精度的相机标定方法。
  7. 尽量提高机械臂的绝对定位精度,如果该条件达不到,至少需要提高相对运动精度。
    误差分析内容转自:https://blog.csdn.net/Sandy_WYM_/article/details/83996479

如何实操

  推荐一个视频:https://www.bilibili.com/video/BV1ey4y1b76c/?spm_id_from=333.788.recommend_more_video.2
  Opencv在Opencv4以后有一个专门用于手眼标定的函数calibrateHandeye()
,直接调用即可,里头集成了多中求解AX=XB的方法,Tasi只是其中的一种,对于眼在手上与眼在手外均可使用。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号