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



    • # Edge Impulse - OpenMV Image Classification Example
      
      import sensor, image, time, os, tf, pyb,math
      from pyb import UART
      import json
      
      pinADir0 = pyb.Pin('P3', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
      pinADir1 = pyb.Pin('P2', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
      pinBDir0 = pyb.Pin('P1', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
      pinBDir1 = pyb.Pin('P0', pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
      
      pinADir0.value(0)
      pinADir1.value(1)
      
      pinBDir0.value(0)
      pinBDir1.value(1)
      
      
      tim = pyb.Timer(4, freq=1000)
      
      chA = tim.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7"))
      chB = tim.channel(2, pyb.Timer.PWM, pin=pyb.Pin("P8"))
      
      sensor.reset()                         # Reset and initialize the sensor.
      sensor.set_pixformat(sensor.RGB565)    # Set pixel format to RGB565 (or GRAYSCALE)
      sensor.set_framesize(sensor.QVGA)      # Set frame size to QVGA (320x240)
      sensor.set_windowing((240, 240))       # Set 240x240 window.
      sensor.skip_frames(time=2000)          # Let the camera adjust.
      
      net = "trained.tflite"
      labels = [line.rstrip('\n') for line in open("labels.txt")]
      clock = time.clock()
      
      
      while(True):
          clock.tick()
          img = sensor.snapshot()
          uart1=UART(3,9600)
      
          # default settings just do one detection... change them to search the image...
          for obj in tf.classify(net, img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
              print("**********\nPredictions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
              img.draw_rectangle(obj.rect())
              # This combines the labels and confidence values into a list of tuples
              list1=list(labels)
              list2=list(obj.output())
              position=list2.index(max(list2))
              print(list1[position])
      
              output_str=json.dumps(list1[position]) #方式2
              print(output_str[1:2])
              
              
          if list1[position]=='y' or list1[position]=='k':
              chA.pulse_width_percent(100)
              pyb.delay(2500)#电机1正转90度
              pinADir0.value(0)
              pinADir1.value(0)#电机1停转
              pyb.delay(1500)
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2正转90度
              pinBDir0.value(1)
              pyb.delay(4000)
              pinBDir1.value(0)#电机2反向,停4000ms
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2反转90度
              pinBDir0.value(0)
              pinBDir1.value(0)#电机2停转
              pyb.delay(2500)
              pinADir0.value(1)
              pinADir1.value(0)#电机1反向,停2500ms
              chA.pulse_width_percent(100)
              pyb.delay(2500)#电机1反转90度
              pinADir0.value(0)
              pinADir1.value(0)#电机1停转
              
          elif list1[position]=='s' or list1[position]=='g':
              chA.pulse_width_percent(100)
              pyb.delay(5000)#电机1正转90度
              pinADir0.value(0)
              pinADir1.value(0)#电机1停转
              pyb.delay(1500)
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2正转90度
              pinBDir0.value(1)
              pyb.delay(4000)
              pinBDir1.value(0)#电机2反向,停5000ms
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2反转90度
              pinBDir0.value(0)
              pinBDir1.value(0)#电机2停转
              pyb.delay(2500)
              pinADir0.value(1)
              pinADir1.value(0)#电机1反向,停2500ms
              chA.pulse_width_percent(100)
              pyb.delay(5000)#电机1反转90度
              pinADir0.value(0)
          
          elif list1[position]=='d':
              chA.pulse_width_percent(100)
              pyb.delay(7500)#电机1正转90度
              pinADir0.value(0)
              pinADir1.value(0)#电机1停转
              pyb.delay(1500)
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2正转90度
              pinBDir0.value(1)
              pyb.delay(4000)
              pinBDir1.value(0)#电机2反向,停5000ms
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2反转90度
              pinBDir0.value(0)
              pinBDir1.value(0)#电机2停转
              pyb.delay(2500)
              pinADir0.value(1)
              pinADir1.value(0)#电机1反向,停2500ms
              chA.pulse_width_percent(100)
              pyb.delay(7500)#电机1反转90度
              pinADir0.value(0)
              
          elif list1[position]=='z' or list1[position]=='t':
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2正转90度
              pinBDir0.value(1)
              pyb.delay(4000)
              pinBDir1.value(0)#电机2反向,停5000ms
              chB.pulse_width_percent(100)
              pyb.delay(360)#电机2反转90度
              pinBDir0.value(0)
              pinBDir1.value(0)#电机2停转
              
          elif list1[position]=='n':
              chA.pulse_width_percent(0)
              chB.pulse_width_percent(0)
              
              
              uart1.write(output_str[1:2])
              time.sleep_ms(10000)
      
      
      
      
      
              #predictions_list = list(zip(labels, obj.output()))
      
              #for i in range(len(predictions_list)):
                  #print("%s = %f" % (predictions_list[i][0], predictions_list[i][1]))
      
          #print(clock.fps(), "fps")
      
      


    • 你把每一个if else里面都写一个print,看看运行到哪了。



    • This post is deleted!


    • @kidswong999 我在每一个if语句的最后都加了print,发现每一次进入的if都是正确的,请问还可以在哪个位置去加print去检测运行到哪了?



    • @kidswong999 我这边是这样的,我连接了两个电机,正常是电机1先旋转,然后电机2旋转之后转回原位,然后电机1旋转回原位,但是第二次识别之后,电机2先旋转了,并且角度大于我设置的角度。



    • 如果不是算法检测的问题,那就是硬件控制的问题,看看时序,接线,用电压表测电压。