AprilTag数据有误差
-
镜头相距TAG55CM,保持镜头和TAG处于同一水平位置,镜头中心点和TAG中心点在一条直线上,为什么TAG图片为呈现在视频中央,X方向偏了180度,实验环境如下:
使用代码如下:
import sensor, image, time, math sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.VGA) # we run out of memory if the resolution is much bigger... sensor.set_windowing((160, 120)) # Look at center 160x120 pixels of the VGA resolution. sensor.skip_frames(time = 2000) sensor.set_auto_gain(False) # must turn this off to prevent image washout... sensor.set_auto_whitebal(False) # must turn this off to prevent image washout... clock = time.clock() # 注意!与find_qrcodes不同,find_apriltags方法不需要对镜像进行镜头校正。 #标签系列有什么区别? 那么,例如,TAG16H5家族实际上是一个4x4的方形标签。 #所以,这意味着可以看到比6x6的TAG36H11标签更长的距离。 然而,较低的H值(H5对H11) #意味着4x4标签的假阳性率远高于6x6标签。 所以,除非你有理由使用其他标签系列, #否则使用默认族TAG36H11。 def degrees(radians): return (180 * radians) / math.pi while(True): clock.tick() img = sensor.snapshot() for tag in img.find_apriltags(): # defaults to TAG36H11 img.draw_rectangle(tag.rect(), color = (255, 0, 0)) img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) print_args = (tag.x_translation(), tag.y_translation(), tag.z_translation(), \ degrees(tag.x_rotation()), degrees(tag.y_rotation()), degrees(tag.z_rotation())) # 位置的单位是未知的,旋转的单位是角度 print("Tx: %f, Ty %f, Tz %f, Rx %f, Ry %f, Rz %f" % print_args) print(clock.fps())
输出如下
Tx: -2.461665, Ty 2.139638, Tz -7.412847, Rx 181.153383, Ry 359.007978, Rz 270.125961
这是硬件自带的误差吗?如何确定X方向的实际距离?
-
角度是因为我旋转了,TX上的误差是为什么呢?
-
你的apriltag没有在OpenMV视野的最中间啊。
高度不一致。
-
@kidswong999 高度不一致我知道,我在测量水平位置,关键水平位置上也有误差
-
误差就是位置不在最中间,你稍微移动一下Apriltag或者OpenMV。
-
@kidswong999 移动一下位置是可以的,主要问题是为什么会出现和物理位置不匹配的问题?我已经确认镜头和图像水平中点在一条直线上,镜头和TAG也是平行的,图像结果和物理位置不统一是什么原因呢?
-
你怎么确认镜头和图像水平中点在一条直线上?
怎么确认镜头和TAG也是平行的?靠线画肯定不准确。
-
@kidswong999 使用了仪器绘制的平行线,角度上的误差不会超过1°,镜头和TAG中点在一条直线只需要用一个够长的直角尺就可以保证了
-
@kidswong999 而且偏移量在44.5mm的样子。。。用游标卡尺量的,画线会产生这么大的误差吗?
-
44.5mm发一张照片
-
@kidswong999 好的,我明天补发一下照片,还有一个问题,为何改变Z方向的距离,如拉远镜头,X方向的K值会发生改变?通过之前确定的Kx计算的距离不再准确
-
新的问题,发新帖子
-
@kidswong999
上图为实际中点和物理中点的距离,43.39mm
上图为在实际中点看到的图像,输出为Tx: 0.023331, Ty 2.183013, Tz -7.473572, Rx 179.000053, Ry 1.866622, Rz 270.264244
-
在OpenMV的视野中是最中间的,有什么问题吗?你的OpenMV固定的有角度吧。
-
@kidswong999 我的问题是,测距不能按照物理位置,首先要对物体在镜头前的位置进行校准是吗?
-
你的问题不是AprilTag有偏移?
-
@kidswong999 是啊,tag的物理地址和图像的中点不匹配,OpenMV固定的没有角度,你的意思是偏差不是由openmv自身的误差引起的?它的呈像的中点就是与镜头平面垂直的正前方?
-
中点就是图像的中心,你看我上面的图,没问题啊?
-
@kidswong999 上面的图是通过移动TAG标签找到的,还是通过测量确定镜头所在平面垂直方向确定的呢?如果是通过移动TAG找到的,那我也可以找到中心位置啊
-
我认为你很难通过纸,来达到足够的精度。OpenMV安装上即使0.1mm的误差,距离大了,差距就很大。
但这不是OpenMV的误差,是安装精度的问题。不管你怎么安装,程序都是OpenMV图像为中心的。