为何修改一个方向的距离会导致另外两个方向上值错误
-
修改Z方向的距离后,即向后拉动镜头,X方向不动,openmv测出的x方向距离会发生了改变,测量环境如下图:
测试代码如下: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())
向后拉动镜头,会导致X方向上测距误差增大
-
@ulf1 补充测试,在Z方向550mm处标定参数,然后在Z方向上移动镜头进行测试,测试数据如下
-
xy轴的单位,和z轴的单位,是不相关的,因为AprilTag的尺寸不一样。
你的测试数据,我没看懂。
-
@kidswong999 既然X,Y和Z方向是不相关的,为什么我移动Z方向,X测量的值会改变?没有在X方向上有位移啊
-
我严重怀疑你的OpenMV固定的角度有问题。
-
@kidswong999 什么都怪到角度上就没法讨论了,我在X方向上进行了平移,Z方向上的距离是不会发生改变的,难道只有移动Z方向会产生角度问题?
-
理论上不会出现这种情况,但是我们的实验环境不一样。我没办法得到你的数据,我没有办法帮助你。
我建议你,在不同的距离,找到一系列tx = 0, ty = 0的点,标注出来,画出拟合直线。然后看是否与OpenMV垂直。注意OpenMV要固定。
-
@kidswong999 这个操作步骤是标定的过程,之后测距不需要对角度要求的这么高,还是说每次测距都要严格保证镜头和TAG之间的角度?如果要保证镜头的角度,那可接受的误差是多少?我现在就算角度有问题也不会超过2°。
实际操作中,我不可能是定死镜头,用TAG去找镜头吧,如果要移动镜头,无法确保不出现误差
-
如果是新的问题,请单独提问。
这个问题,我认为就是安装精度的问题,否则不会出现这种情况。
-
@kidswong999 明白了,就是对角度有严格的要求,在实际测距上,不能移动openmv对吧