我正在尝试使用双四元数手眼校准算法标头和实现,并且得到的值相距遥远。我正在使用机械臂和光学跟踪器(又名相机)以及连接到末端执行器的基准。就我而言,相机不是放在手上,而是坐在一边看着手臂。

我拥有的变换是:


机器人底座->末端执行器
光学跟踪器底座->基准

我需要的变换是:


基准->末端执行器



我将手臂移动到路径(蓝线)上的36个点上,并且在每个点附近我都在获取位置(xyz)和方向(角度)相机->基准和基础-> EndEffector的角度,然后将它们放入HandEyeCalibration算法所需的向量中。我还确保在滚动俯仰偏航中将方向更改大约+ -30度。

然后运行estimateHandEyeScrew,我得到以下结果,并且您可以看到位置不对一个数量级。

[-0.0583,0.0387,-0.0373]实数
[-0.185,-0.404,-0.59]由HandEyeCalib估计

这里是完整的转换和调试输出:

# INFO: Before refinement: H_12 =
-0.443021 -0.223478  -0.86821  0.321341
 0.856051 -0.393099 -0.335633  0.470857
-0.266286 -0.891925   0.36546   2.07762
        0         0         0         1
Ceres Solver Report: Iterations: 140, Initial cost: 2.128370e+03, Final cost: 6.715033e+00, Termination: FUNCTION_TOLERANCE.
# INFO: After refinement: H_12 =
  0.896005   0.154992  -0.416117  -0.185496
 -0.436281    0.13281  -0.889955  -0.404254
-0.0826716   0.978948   0.186618  -0.590227
         0          0          0          1


expected RobotTipToFiducial (simulation only):   0.168   -0.861    0.481  -0.0583
expected RobotTipToFiducial (simulation only):   0.461   -0.362    -0.81   0.0387
expected RobotTipToFiducial (simulation only):   0.871    0.358    0.336  -0.0373
expected RobotTipToFiducial (simulation only):       0        0        0        1


estimated RobotTipToFiducial:   0.896    0.155   -0.416   -0.185
estimated RobotTipToFiducial:  -0.436    0.133    -0.89   -0.404
estimated RobotTipToFiducial: -0.0827    0.979    0.187    -0.59
estimated RobotTipToFiducial:       0        0        0        1


我是否可能以错误的方式使用它?有什么建议可以给您吗?

评论

您是要校准从手臂的底部到摄影机的转换,还是手臂的运动学或其他功能?

我正在尝试在末端执行器和基准之间进行校准。

错误是第一个转换未正确初始化

#1 楼

解决问题后,我创建了主题演讲,为感兴趣的人解释了许多有关手眼校准的细节。校准机器人的实用代码和说明可以在手眼校准器上找到。

我直接在此处回答了一些关键方面的问题。









Camodocal

Camodocal是我正在使用的库解决问题。这是一个写得很好的C ++库,其中包括手眼校准,尽管文档非常稀疏。

Camodocal包括以下实现:



K。 Daniilidis 1999年使用双四元数进行的手眼校准(已测试并且可以工作)
棋盘相机校准
立体声相机校准
SLAM,带有多个不重叠的相机和里程表
专为移动车辆设计

相关论文


CamOdoCal:带有多个通用摄像机和里程表的钻机的自动内部和外部校准,正在执行中。 IEEE / RSJ国际智能机器人和系统国际会议(IROS),2013年。
Lionel Heng,MathiasBürki,Gim Hee Lee,Paul Furgale,Roland Siegwart和Marc Pollefeys,基于多摄像头钻机的基于基础设施的校准,提交给IEEE国际机器人技术和自动化大会,2014年。

将数据输入CamOdoCal


每次测量的时间,位置和方向都不同记录可以表示未知X的可能变换

记录不同时间步长之间或相对于第一时间步长采取的许多变换A和B的列表


旋转格式为AxisAngle = UnitAxisAngle格式,或[x_axis,y_axis,z_axis] 𝜃_angle


|| UnitAxis || = 1 = 1
|| AxisAngle || = 𝜃_angle


翻译是正常的[x,y,z]格式


将两个向量都传递到EstimateHandEyeScrew()
以4x4变换估计的形式返回X



ROS积分

有一个使用camodocal + ROS为此实现了求解器的软件包,称为handeye_calib_camodocal。它还包括详细的故障排除说明。

参考文献


Strobl,K.和Hirzinger,G.(2006)。最佳手眼校准。在2006年10月的2006年IEEE / RSJ关于智能机器人和系统的国际会议上(第4647–4653页)。
慕尼黑工业大学(TUM)CAMP实验室wiki
K。 Daniilidis,“使用双四元数进行手眼校准”,诠释。抢劫杂志。研究,第一卷。 18号3,第286-298页,1999年6月。
E. Bayro–Corrochano,K。Daniilidis和G. Sommer,“ 3D运动学的电机代数:手眼校准的情况”,《数学》杂志。影像与视觉,第一卷。 13号,第2卷,第79-100页,2000年10月。 Dornaika和R. Horaud,“同步机器人–世界和手眼校准”,IEEE Trans。在Robs。和自动卷。 14号1998年8月,第4卷,第617-622页。
注:图和文字来自混合来源,包括演讲作者,所引用的各种论文以及TUM Wiki。


评论


$ \ begingroup $
对于将来遇到的问题,现在有一个使用camodocal + ROS的软件包:github.com/jhu-lcsr/handeye_calib_camodocal
$ \ endgroup $
–安德鲁·洪特(Andrew Hundt)
16年4月11日在6:38

$ \ begingroup $
指向您的主旨演讲的链接已断开:“演示文稿的版本不同步。所有者选择版本后,便可以打开它。”
$ \ endgroup $
– Paul Du Bois
20年4月5日在21:04

#2 楼

您正在使用的库(及其基于的库)似乎与您正在使用的库不同。他们有一个摄像机装置在世界各地移动,基准点从SLAM地图中拉出,而您有一个静态摄像机和一个动手握住基准点的手臂。从根本上讲,是的,它们是相同的,但是我想知道您是否使用了更适合机器人手臂的其他库,是否可以得到更好的结果。您可能会考虑这是一篇论文:校准多臂多传感器机器人:捆绑调整方法。我不知道是否有源代码。但这是ROS,所以赔率很好。

评论


$ \ begingroup $
它们是不同的应用程序,但是据我所读,它们似乎都是相同的AX = XB问题的构造略有不同。这是我认为代码正在实现的Daniilidis论文,这是另外一些有用的解释的论文。也许我没有正确理解事情?
$ \ endgroup $
–安德鲁·洪特(Andrew Hundt)
2015年5月5日19:44

$ \ begingroup $
我已经可以确认该问题在我的情况和camodocal中在数学上是相同的,即使用例看起来略有不同。
$ \ endgroup $
–安德鲁·洪特(Andrew Hundt)
2015年6月11日23:25



#3 楼

我同意Ben的观点,您的情况是直视(机器人在外部的相机),并且AX = XB,X是相机和机器人底座之间的姿势(但您可以从末端执行器中获得功能)。
在手眼(相机绑定到机器人尖端)上,X是相机和机器人末端执行器之间的姿势。 http://math.loyola.edu/~mili/Calibration/index.html
中还有另一个Matlab代码(双四元数)

评论


$ \ begingroup $
我还认为X是摆在相机和机器人底座之间的,便于手握。
$ \ endgroup $
–马继强
18/12/6在8:34