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



    • import sensor, image, time
      import car
      from pid import PID
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(30)
      sensor.set_auto_gain(False)
      sensor.set_auto_whitebal(False)
      
      size_threshold = 2000
      x_pid = PID(p=0.2, i=1, imax=100)
      h_pid = PID(p=0.05, i=0.1, imax=50)
      
      clock = time.clock()
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          car.run(35,-35)
          for tag in img.find_apriltags():#没扫描出来,则不运行
              if tag[4]==0:
                  x_error =tag[0]+tag[3]/2-80
                  h_error = tag[2]*tag[3]-size_threshold
                  img.draw_rectangle(tag[0:4],color=(255,0,0)) # rect
                  x_output=x_pid.get_pid(x_error,1)/6
                  h_output=h_pid.get_pid(h_error,1)
                  car.run((-h_output-30)/2-x_output,(-h_output-30)/2+x_output)
                  print((-h_output-30)/2-x_output,(-h_output-30)/2+x_output)
                  time.sleep(50)
              else:
                  car.run(35,-35)
      


    • 什么错误?

      哪里和哪里不符?



    • 能加下您的QQ吗?这边交流不是很方便。



    • @kidswong999 左边电压输出正常,能根据摄像头获取的信息进行改变(-h_output-30)/2-x_output从而改变电压,但右边同样也可以获取(-h_output-30)/2+x_output的数据,但是右边对应p8的pwm输出电压则是变成不按参数变化的。



    • 我认为你的公式不对

      x_error =tag[0]+tag[3]/2-80
      h_error = tag[2]*tag[3]-size_threshold
      

      x_error应该是tag[0]+tag[2]/2-80

      改成

      x_error = tag.cx()-img.width()/2
      

      更好一些。



    • @kidswong999 感谢感谢,那个算法只是简化了一些,自己解决了,不是算法的问题。