请问一下我的程序当中为什么只有第一次识别的时候电机的转动是按照要求的,第二次识别的时候电机旋转不符合要求?
-
# 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先旋转了,并且角度大于我设置的角度。
-
如果不是算法检测的问题,那就是硬件控制的问题,看看时序,接线,用电压表测电压。