星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 如何求解空间中openmv的位置?



    • 通过Apriltags可以进行测距,如何使用AprilTags提供的坐标转换为空间中openmv的位置。例如我将AprilTag摆放在{'x':500,'y':500,'z':0}的位置得到tx,ty,tz,rx,ry,rz的值,并通过移动距离/tx(ty)的方式得出的xk、yk

      cosPitch = math.cos(Ry)
      cosYaw = math.cos(Rz)
      cosRoll = math.cos(Rx)
      
      sinPitch = math.sin(Ry)
      sinYaw = math.sin(Rz)
      sinRoll = math.sin(Rx)
      
      if tag.id() in range(len(tags)):  # tags是存放规定tag坐标的列表
          X = cosPitch * cosYaw * Tx * xk + cosPitch * sinYaw * Ty * yk - sinPitch * Tz * zk
          Y = (-cosRoll * sinYaw + sinRoll * sinPitch * cosYaw) * Tx * xk + (cosRoll * cosYaw + sinRoll * sinPitch * sinYaw) * Ty * yk + sinRoll * cosPitch * Tz * zk
          Z = (sinRoll * sinYaw + cosRoll * sinPitch * cosYaw) * Tx * xk + (-sinRoll * cosYaw + cosRoll * sinPitch * sinYaw) * Ty * yk + cosRoll * cosPitch * Tz * zk
      
          changed = (X, Y, Z)
      
          currentX = str(round((tags[currentID].get('x') - X) / 10, 2)) + 'cm'
          currentY = str(round((tags[currentID].get('y') - Y) / 10, 2)) + 'cm'
          currentZ = str(round((tags[currentID].get('z') - Z) / 10, 2)) + 'cm'``
      

      是否能通过这种方式正确的得出openmv自身的位置?另外xk、yk的值是否和求z方向的k值的方式一致?