• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 关于偏转量固定不变的问题



    • import sensor, image, time
      from pyb import UART
      from pyb import Servo
      import json
      
      #设置阈值
      red_threshold_01 = (62, 99, -9, 58, 18, 57)
      
      step = 0
      x=0  #色块中心x值
      c=0  #色块偏离中心程度
      d=0
      
      sensor.reset()
      sensor.set_pixformat(sensor.RGB565)
      sensor.set_framesize(sensor.QQVGA)
      sensor.skip_frames(10)
      sensor.set_auto_whitebal(False)
      sensor.set_auto_gain(False) #关闭自动亮度增益,太暗了可以自行打开
      sensor.set_hmirror(True) #水平镜像,方便调试
      clock = time.clock()
      
      s1 = Servo(1) #P7 舵机
      s1.pulse_width(1500) #舵机初始化到中间位置
      
      
      uart = UART(3, 115200)
      
      while(True):
          img = sensor.snapshot()
      
      
          #查找色块,并过滤掉面积小于1200像素,且长小于30像素,宽小于40像素的色块
          blobs = img.find_blobs([red_threshold_01],x_stride=5, y_stride=15)
      
          if blobs:
              print('sum :', len(blobs)) #我没看懂
              output_str = json.dumps(blobs) #没看懂
              for b in blobs:
                  if b[2]>5 and b[3]>5: #过滤过大或者过小,根据实际修改
                     img.draw_rectangle(b.rect(),color=(0,0,0))  #根据色块大小画框
                     img.draw_cross(b.cx(), b.cy()) #根据色块中心点画十字架
                     x = b[5] #将cx赋值给x
                     c=abs(80-b[5]) #把cx与中心x值的差赋值给c
                     #下面为简单的识别舵机运动算法,具体根据实际调试修改参数,可以自行优化
                     if x > 82:
                         step=step-int((x-80)*1)
                         print('1:',step)
                         if -800 > step:
                             step=step+int((x-80)*1)
                             print('2:',step)
                     if x < 78:
                         tep=step+int((80-x)*1)
                         print('3:',step)
                         if step > 900:
                             step=step-int((80-x)*1)
                             print('4:',step)
                     s1.pulse_width(1500-step) #舵机旋转角度
                     d=1500-step
                     print('偏转量 :',step)
      
                     #若偏离程度较小则小车加速
                     if c < 10:
                         if d == 1500:
                             uart.write('fast\r')
                             print('jia su')
      
              #得到被测物的长和宽(用于测量目标物大小数值)
              #print('get_w :',b[2])
              #print('get_h :',b[3])
              #print('get_zx :',b[5])
      
      ```,
      这段代码实行的时候,无论怎么改变摄像头对红灯的方向,偏转量都没有变,求高手指导


    • 你先看一下x的值?