• 星瞳AI VISION软件内测!可以离线标注,训练,并生成OpenMV的模型。可以替代edge impulse https://forum.singtown.com/topic/8206
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • AprilTag数据有误差



    • 镜头相距TAG55CM,保持镜头和TAG处于同一水平位置,镜头中心点和TAG中心点在一条直线上,为什么TAG图片为呈现在视频中央,X方向偏了180度,实验环境如下:
      0_1542271708596_微信图片_20181115164816.jpg

      使用代码如下:

      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 0_1542330317839_微信图片_20181116090509.jpg
      上图为实际中点和物理中点的距离,43.39mm
      0_1542330358915_图片1.png
      上图为在实际中点看到的图像,输出为Tx: 0.023331, Ty 2.183013, Tz -7.473572, Rx 179.000053, Ry 1.866622, Rz 270.264244



    • 在OpenMV的视野中是最中间的,有什么问题吗?你的OpenMV固定的有角度吧。

      0_1542342823090_屏幕快照 2018-11-16 下午12.29.50.png



    • @kidswong999 我的问题是,测距不能按照物理位置,首先要对物体在镜头前的位置进行校准是吗?



    • 你的问题不是AprilTag有偏移?



    • @kidswong999 是啊,tag的物理地址和图像的中点不匹配,OpenMV固定的没有角度,你的意思是偏差不是由openmv自身的误差引起的?它的呈像的中点就是与镜头平面垂直的正前方?



    • 中点就是图像的中心,你看我上面的图,没问题啊?



    • @kidswong999 上面的图是通过移动TAG标签找到的,还是通过测量确定镜头所在平面垂直方向确定的呢?如果是通过移动TAG找到的,那我也可以找到中心位置啊



    • 我认为你很难通过纸,来达到足够的精度。OpenMV安装上即使0.1mm的误差,距离大了,差距就很大。

      但这不是OpenMV的误差,是安装精度的问题。不管你怎么安装,程序都是OpenMV图像为中心的。