赞
踩
该代码可以识别十字路口,终点线的判断,完成简单巡线的要求,并将数据传给32进行处理
- import sensor, image, time,lcd
- from pyb import UART
-
- uart = UART(3, 115200, timeout_char=1000)
- red_threshold = ((29, 100, 38, 93, -82, 61))#红色阈值
- sensor.reset()
- sensor.set_pixformat(sensor.RGB565) #选择RGB模式
- sensor.set_framesize(sensor.QQVGA) #160*120选择分辨率(分辨率越高帧率可能越低)
- sensor.skip_frames(time = 2000)
- lcd.init()
- sensor.set_hmirror(True)#开启镜像
- uart.init(115200,8,None,1) #对串口3给定参数初始化
- line_roi1 = (25,5,110,10)#上方
- #line_roi2 = (25,30,110,10)#中方
- line_roi3 = (25,50,110,10)#下方
- flag=0 #0正常巡线,1十字路口,2终点线
- xx1=0
- xx2=0
- # 通信协议
- def Send_data_packet(data1,data2,data3):#data1 = xx1,data2 = xx2,data3 = flag
- x = '%03d'%data1
- y = '%03d'%data2
- z = '%01d'%data3
- data = 'W'+x+y+z+'Z'
- uart.write(data)
-
- #求绝对值
- def my_abs(x,y):
- xx = x - y
- if(xx>0):
- return xx
- else:
- return -xx
-
- def run():#巡线函数
- global flag # 0正常巡线,1十字路口,2终点线
- global xx1
- global xx2
- blobs_low = img.find_blobs([red_threshold], roi = line_roi1,pixels_threshold = 5)
- #blobs_high = img.find_blobs([red_threshold], roi = line_roi3, pixels_threshold = 5)
-
- if(blobs_low):#前方有线
- if(blobs_low[0].h()*blobs_low[0].w()>=210):#十字路口
- flag = 1
- xx1 = 80
- xx2 = 0
- print("across")
- else:#正常巡线
- img.draw_cross(blobs_low[0].cx(), blobs_low[0].cy(), (0,255,0), 5)
- #img.draw_cross(blobs_high[0].cx(), blobs_high[0].cy(), (255,255,255), 5)
- print("line")
- flag = 0
- xx1 = blobs_low[0].cx()
- xx2=0
- else:#前方无线
- flag = 4
- xx1 = 80
- xx2 = 0
- print("end")
-
- while (True):
-
- Send_data_packet(xx1,xx2,flag)
- img = sensor.snapshot()
- run()
- img_black=img.binary([red_threshold])#图像二值化,使图像只有黑白,白色为被追踪的颜色,注意:
- #要放在色块识别的后面,不然色块识别会出问题
- lcd.display(img)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。