机器人手眼标定 (四轴/六轴都适用)
问题解析
机器人手眼标定分为两种情况:eye-in-hand和eye-to-hand,即传感器是否安装在机器人手抓末端。不管是那种情况,手眼标定的科学问题都是求解AX=XD的问题,其中X为刚体变换矩阵,包含旋转和平移两个部分。通常关于该问题的求解方法分为两类:1)先求解旋转矩阵,再计算平移向量;2)同时求解旋转矩阵和平移向量。
(1)
C
X
=
X
D
CX=XD\tag{1}
CX=XD(1)
如何计算X?
公式CX=XD中,矩阵C为相机坐标系经过一次运动之后的相对位姿,可以通过pnp算法计算出来,矩阵D为机器人手抓坐标系经过一次运动之后的相对位姿,可以通过机器人控制器读取(计算)出来。因此,我们知道矩阵C和D都是刚体变换矩阵,都包含旋转和平移两个部分。设Rc、tc、Rd、td分别为矩阵C、D中包含的旋转矩阵和平移向量,将其带入上式化简得:
(2)
{
R
c
=
R
R
d
R
−
1
(
R
c
−
I
)
t
=
R
t
d
−
t
c
\left\{\begin{matrix} R_{c}=RR_{d}R^{-1}\\ (R_{c}-I)t=Rt_{d}-t_{c} \end{matrix}\right.\tag{2}
{Rc=RRdR−1(Rc−I)t=Rtd−tc(2)
对于一般奇异矩阵T,可以对其进行特征值分解,得:
(3)
T
=
U
⋅
[
λ
1
0
0
0
λ
2
0
0
0
λ
3
]
⋅
U
−
1
T=U\cdot \begin{bmatrix} \lambda _{1} &0 &0 \\ 0&\lambda _{2} &0 \\ 0& 0 & \lambda _{3} \end{bmatrix}\cdot U^{-1}\tag{3}
T=U⋅⎣⎡λ1000λ2000λ3⎦⎤⋅U−1(3)
但是对于旋转矩阵R,由于其特殊性质,可以分解为以下形式:
(4)
R
=
U
⋅
[
1
0
0
0
e
−
j
θ
0
0
0
e
j
θ
]
⋅
U
−
1
R=U\cdot \begin{bmatrix} 1 &0 &0 \\ 0&e^{-j\theta } &0 \\ 0& 0 & e^{j\theta } \end{bmatrix}\cdot U^{-1}\tag{4}
R=U⋅⎣⎡1000e−jθ000ejθ⎦⎤⋅U−1(4)
对上式进行化简,得:
(5)
k
c
=
R
⋅
k
d
k_{c}=R\cdot k_{d}\tag{5}
kc=R⋅kd(5)
式中:
k
c
k_{c}
kc为
R
c
R_{c}
Rc对应的旋转向量,
k
d
k_{d}
kd为
R
d
R_{d}
Rd对应的旋转向量。
特别地,当机器人运动中存在纯平移的运动时,由公式(2), 存在
R
c
−
I
=
0
R_{c}-I=0
Rc−I=0,即:
(6)
t
c
=
R
t
d
t_{c}=Rt_{d}\tag{6}
tc=Rtd(6)
可见,这种纯平移运动也会建立类似于公式(5)的约束。
传统的手眼标定算法仅仅利用公式(5)建立的约束来建立方程组:
(7)
[
k
c
1
,
k
c
2
,
.
.
.
,
k
c
N
]
=
R
⋅
[
k
d
1
,
k
d
2
,
.
.
.
,
k
d
N
]
[k_{c_{1}},k_{c_{2}},...,k_{c_{N}}]=R\cdot [k_{d_{1}},k_{d_{2}},...,k_{d_{N}}]\tag{7}
[kc1,kc2,...,kcN]=R⋅[kd1,kd2,...,kdN](7)
将该公式简记为
(8)
M
1
=
R
⋅
M
2
M_{1}=R\cdot M_{2}\tag{8}
M1=R⋅M2(8)
传统的标定方法利用公式(7)求解旋转矩阵R的前提是约束矩阵
M
1
M_{1}
M1可逆。
然而,桌面四轴机器人由于只具有x、y、z方向的移动和z方向的转动,因此决定了 M 1 M_{1} M1的秩为1,因此通过传统方法计算出来的旋转变换R不为正交矩阵,即无法正确求解R。因此,传统的手眼标定方法不适用于桌面机器人。并且,对于六轴机器人,传统方法要求机器人的运动必须保证旋转向量具有三维空间特征。
传统方法仅仅使用公式(5)由机器人旋转信息提供的约束来约束方程,忽略了平移运动提供的信息(该种运动只有在机器人做纯平移运动时才存在),因此,可以将平移信息添加到约束中来求解旋转矩阵R:
(9)
[
k
c
1
,
.
.
.
,
k
c
N
,
t
c
1
,
.
.
.
,
t
c
M
]
=
R
⋅
[
k
d
1
,
.
.
.
,
k
d
N
,
t
d
1
,
.
.
.
,
t
d
M
]
[k_{c_{1}},...,k_{c_{N}},t_{c_{1}},...,t_{c_{M}}]=R\cdot [k_{d_{1}},...,k_{d_{N}},t_{d_{1}},...,t_{d_{M}}]\tag{9}
[kc1,...,kcN,tc1,...,tcM]=R⋅[kd1,...,kdN,td1,...,tdM](9)
注意:只有当机器人做纯平移运动时公式(6)才有效。
公式(7)简记为:
(10)
M
1
∗
=
R
⋅
M
2
∗
M_{1}^{*}=R\cdot M_{2}^{*}\tag{10}
M1∗=R⋅M2∗(10)
对于平移向量t的求解,根据公式(2),带入R,并将每相邻两次运动得到的方程联立,得到如下方程组:
(11)
[
R
c
12
−
I
R
c
23
−
I
.
.
.
R
c
N
−
1
N
−
I
]
⋅
t
=
[
R
t
d
12
−
t
c
12
R
t
d
23
−
t
c
23
.
.
.
R
t
d
N
−
1
N
−
t
c
N
−
1
N
]
\begin{bmatrix} R_{c_{12}}-I\\ R_{c_{23}}-I\\ ...\\ R_{c_{N-1N}}-I \end{bmatrix}\cdot t=\begin{bmatrix} Rt_{d_{12}}-t_{c_{12}}\\ Rt_{d_{23}}-t_{c_{23}}\\ ...\\ Rt_{d_{N-1N}}-t_{c_{N-1N}} \end{bmatrix}\tag{11}
⎣⎢⎢⎡Rc12−IRc23−I...RcN−1N−I⎦⎥⎥⎤⋅t=⎣⎢⎢⎡Rtd12−tc12Rtd23−tc23...RtdN−1N−tcN−1N⎦⎥⎥⎤(11)
将公式(11)简记为:
(12)
t
=
M
3
−
1
⋅
M
4
t=M_{3}^{-1}\cdot M_{4}\tag{12}
t=M3−1⋅M4(12)
传统手眼标定方法,使用公式(10)计算平移向量。
大家好,我主要的研究方向有:
1)主流的结构光三维测量方法,包括:线扫,格雷码,相移,散斑等;
2)摄像机标定和投影仪标定;
3)点云处理;
4)图像处理;
5)编码标志点识别;
6)Halcon应用;
7)机器视觉相机选型。
对以上研究方向感兴趣的朋友可以加入我的知识星球: