点云相机手眼标定原理(AX=XB)
描述常见的机械臂手眼标定,都是通过相机检测棋盘格的方式来完成的。那么针对点云相机来说,在没有rgb图像的情况下, 该如何完成手眼标定呢我的方法是利用ICP算法,完成3D点云相机的手眼标定点云相机手眼标定原理2D相机的手眼标定过程,看起来是需要机械臂位姿和相机检测结果,事实上,它利用的也是公式 AX = XB我们先来推一下公式,很简单手眼标定公式核心公式Tobject−in−base =Thand
描述
常见的机械臂手眼标定,都是通过相机检测棋盘格的方式来完成的。那么针对点云相机来说,在没有rgb图像的情况下, 该如何完成手眼标定呢
我的方法是
利用ICP算法,完成3D点云相机的手眼标定
点云相机手眼标定原理
2D相机的手眼标定过程,看起来是需要机械臂位姿和相机检测结果,事实上,它利用的也是公式 AX = XB
我们先来推一下公式,很简单
手眼标定公式
-
核心公式
T o b j e c t − i n − b a s e = T h a n d − i n − b a a s e ⋅ T c a m e r a − i n − h a n d ⋅ T o b j e c t − i n − c a m e r a T_{object-in-base\; }=T_{hand-in-baase}\cdot T_{camera-in-hand}\cdot T_{object-in-camera} Tobject−in−base=Thand−in−baase⋅Tcamera−in−hand⋅Tobject−in−camera -
假设我有两组数据的话
T p o s e 1 ⋅ T h a n d ⋅ T o b j e c t 1 = T p o s e 2 ⋅ T h a n d ⋅ T o b j e c t 2 T_{pose1}\cdot T_{hand}\cdot T_{object1}\; =\; T_{pose2}\cdot T_{hand}\cdot T_{object2} Tpose1⋅Thand⋅Tobject1=Tpose2⋅Thand⋅Tobject2
进行一下变换
T p o s e 1 − 1 ⋅ T p o s e 2 ⋅ T h a n d = T h a n d ⋅ T o b j e c t 1 ⋅ T o b j e c t 2 − 1 T_{pose1}^{-1}\cdot T_{pose2}\cdot T_{hand}\; =\; T_{hand}\cdot T_{object1}\cdot T_{object2}^{-1} Tpose1−1⋅Tpose2⋅Thand=Thand⋅Tobject1⋅Tobject2−1 -
则公式变为
A X = X B AX=XB AX=XB
其中
A = T p o s e 1 − 1 ⋅ T p o s e 2 A\; = \; T_{pose1}^{-1}\cdot T_{pose2} A=Tpose1−1⋅Tpose2
B = T o b j e c t 1 ⋅ T o b j e c t 2 − 1 B\; =\; T_{object1}\cdot T_{object2}^{-1} B=Tobject1⋅Tobject2−1
AX = XB是西尔维斯特方程的一种特殊形式
西尔维斯特方程(Sylvester equation)是控制理论中的矩阵方程,形式如下:
A X + X B = C {AX+XB=C} AX+XB=C
其中A、B及C是已知的矩阵,问题是要找出符合条件的X。其中所有矩阵的系数都是复数。为了要使方程成立,矩阵的行和列需要满足一定条件,A和B都要是方阵,大小分别是n和m,而X和C要是n行m列的矩阵,n和m也可以相等,四个矩阵都是大小相同的方阵。有兴趣可以自行去研究,我没深究。
AX = XB
由于变换了公式,所以在完成手眼标定过程中,我们将不再需要物体在相机中的位姿了。因此,3D点云相机的手眼标定,可以使用两片点云的相对位姿
这个步骤跳跃的非常优雅。原因在于:使用点云相机在估计物体的位姿,实际上是一个高精度的算法工作,而进行手眼标定过程往往是机械臂项目的开始。我们不希望,连手眼标定矩阵都没搞好,就去准确的估计物体位姿了。
我们可以说,使用AX = XB的方法,能在手眼标定过程中,暂时不去优化待检测物体的位姿估计,能够快速的完成机械臂的环境搭建工作
代码
想要用代码完成手眼标定,请看我的这篇文章
点云相机手眼标定代码——利用PCL库的ICP算法完成手眼标定
想要学习求解AX = XB的两种经典算法,可以看这篇
C++求解AX = XB
更多推荐
所有评论(0)