我想得到的姿态(翻译: x,y,z和旋转: Rx,Ry,Rz在世界坐标系)的架空相机。通过移动带有机器人手臂的ChArUco校准板(如https://www.youtube.com/watch?v=8q99dUPYCPs),我获得了许多目标点和图像点。正因为如此,我已经有了所有目标点的精确位置。
为了将多个点输入solvePnP
,我将第一个检测模式(ChArUco板)设置为第一个对象,并将其作为对象坐标系的原点。然后,我将检测到的对象点(从第二种模式到最后一种模式)添加到第一检测对象点的坐标系中(对象帧的原点是第一个对象的原点)。
在得到相机和物体的坐标系之间的转换后,我根据这个变换计算出相机的姿态。
最初的结果看起来很好,但是当我用尺子或磁带测量相机的绝对姿势时,我注意到的外部校准结果对于z方向(相机的高度)大约是15-20毫米,尽管其他的(x,y,Rx,Ry,Rz)几乎是正确的。结果是一样的,即使我改变了物体点的范围,通过不同的移动机器人手臂,它最终总是有几厘米的距离的高度。
以前有没有人经历过类似的问题?我想知道任何我能尝试的事情。当深度方向(z)不准确时,常见的错误是什么?
发布于 2017-12-13 09:56:59
我不知道如何度量z
,但我相信用标尺测量的不是z
,而是euclidean distance
,它的计算方式如下:
d=std::sqrt(x*x+y*y+z*z);
让我们举个例子,如果x=2; y=2; z=2;
,那么d
是d~3,5
,所以3.5-2=1.5
是z
和尺子之间的区别,当你说距离z方向约15-20毫米时。
https://stackoverflow.com/questions/47768656
复制相似问题