我拥有的变换是:
机器人底座->末端执行器
光学跟踪器底座->基准
我需要的变换是:
基准->末端执行器
我将手臂移动到路径(蓝线)上的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
评论
您是要校准从手臂的底部到摄影机的转换,还是手臂的运动学或其他功能?我正在尝试在末端执行器和基准之间进行校准。
错误是第一个转换未正确初始化