2022電賽泊車(chē)openmv代碼
- 僅作為比賽參考,具體數(shù)值請(qǐng)自己調(diào)整
- 注釋寫(xiě)的很清楚了
import sensor, image, time, math,pyb
from pyb import Pin, Timer,UART
# 串口通信
uart = pyb.UART(1,115200,timeout_char = 1000)#串口初始化
# 跟蹤黑色線條(閾值依據(jù)實(shí)驗(yàn)條件進(jìn)行更改)
thresholds = (0, 40)
# 五塊感性區(qū)域
ROIS = [ #[ROI, weight]越近,權(quán)重越大,在這里權(quán)值暫時(shí)不考慮
(30, 90, 100, 30, 0), #下面1
(40, 40, 80, 40, 0), #中間2
(30, 0, 100, 30, 0), #上面3 160 *120
(0, 20, 30, 100, 0), #左邊4
(130,20 , 30, 100, 0) #右邊5
]
weight_sum = 0
for r in ROIS: weight_sum += r[4] # r[4] is the roi weight.
#---------------------------------------攝像頭初始化-----------------------------------------#
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE) # 灰度圖做巡線
sensor.set_framesize(sensor.QQVGA) # 像素160*120
sensor.skip_frames(time=2000)
sensor.set_auto_gain(False) # 顏色追蹤關(guān)閉自動(dòng)增益
sensor.set_auto_whitebal(False) # 顏色追蹤關(guān)閉白平衡
#---------------------------------------標(biāo)志位和變量-----------------------------------------#
flag = 0
i = 0 #記錄第幾行數(shù)據(jù)
led=pyb.LED(3)#必要的時(shí)候進(jìn)行紅外補(bǔ)光
center_flag1 = 0 #區(qū)域標(biāo)志
center_flag2 = 0
center_flag3 = 0
center_flag4 = 0
center_flag5 = 0
mid_num = 0
# 串口輸出變量
out_str1 = ''
count_RT = 0
RT_tag = 0
T_tag = 0
clock = time.clock()
#定義一個(gè)定時(shí)發(fā)送數(shù)據(jù)的函數(shù)
def tick(timer):#we will receive the timer object when being called
global flag
flag=1
tim = Timer(4,freq=100) # create a timer object using timer 4 - trigger at 1Hz
tim.callback(tick) # set the callback to our tick function
#--------------------------------------while循環(huán)開(kāi)始-----------------------------------------#
while(True):
pyb.LED(1).on()
if(flag==1):
img=sensor.snapshot()
img.lens_corr(1.5) # for 2.8mm lens...攝像頭畸變糾正
#--------------------------------------色塊的位置(此段代碼別動(dòng))--------------------------------------#
#檢測(cè)黑色色塊位置
for r in ROIS:
i=i+1;
blobs=img.find_blobs([thresholds], roi=r[0:4], merge=True,pixels_area=10) # r[0:4] is roi tuple.
if blobs:#如果找到了顏色塊
# Find the blob with the most pixels.
largest_blob = max(blobs, key=lambda b: b.pixels())
if(i==1):#下面矩形
if(largest_blob[2]>=5):#排除瑕疵點(diǎn)
if(largest_blob[3]>=5):
center_flag1=1;#下面的矩形找到的標(biāo)志
img.draw_rectangle(largest_blob.rect())
img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
elif(i==2):#中間矩形
if(largest_blob[2]>=5):
if(largest_blob[3]>=5):
center_flag2=1;
img.draw_rectangle(largest_blob.rect())
img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
elif(i==3):#上面的矩形
if(largest_blob[2]>=5):
if(largest_blob[3]>=5):
center_flag3=1;
img.draw_rectangle(largest_blob.rect())
img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
elif(i==4):#左邊的矩形找到了
if(largest_blob[2]>=5):
if(largest_blob[3]>=5):
center_flag4=1;
img.draw_rectangle(largest_blob.rect())
img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
elif(i==5):#右邊的矩形找到了
if(largest_blob[2]>=5):
if(largest_blob[3]>=5):
center_flag5=1;
img.draw_rectangle(largest_blob.rect())
img.draw_cross(largest_blob.cx(),largest_blob.cy(),2)
#--------------------------------------“|-”型T型路口--------------------------------------#
if(center_flag1>0 and center_flag3>0 and center_flag5>0):
RT_tag = 1
pass
#--------------------------------------“T”型T型路口--------------------------------------#
if(center_flag1>0 and center_flag4>0 and center_flag5>0):
T_tag = 1
pass
#--------------------------------------走到空白路段“|-”型路口計(jì)數(shù)清除--------------------------------------#
if (center_flag1 == 0 and center_flag2 == 0 and center_flag3 == 0 and center_flag4 == 0 and center_flag5 == 0):
count_RT = 0
pass
#--------------------------------------“|-”型路口計(jì)數(shù)--------------------------------------#
if(RT_tag > 0):
mid_num += 1
# 識(shí)別路口,mid_num變量即控制計(jì)數(shù)時(shí)間,不能過(guò)大也不能過(guò)小,依據(jù)小車(chē)速度和環(huán)境決定
if(mid_num > 20):
count_RT += 1
mid_num = 0
if(mid_num < 0 ):
mid_num = 0
# 串口發(fā)送的字符串: 按照位的順序
out_str1 += '%.d' % int(RT_tag); # 1.檢測(cè)到“|-”型T型路口
out_str1 += '%.d' % int(T_tag); # 2.檢測(cè)到“T”型T型路口
out_str1 += '%.d' % int(count_RT); # 3.“|-”型T型路口計(jì)數(shù)
# 以s開(kāi)頭#結(jié)尾的串口字符串發(fā)送,可以去掉s和#
uart.write('s'+out_str1+'#')
print(out_str1)
# 清零標(biāo)志
center_flag1 = 0 # 區(qū)域標(biāo)志
center_flag2 = 0
center_flag3 = 0
center_flag4 = 0
center_flag5 = 0
i = 0
flag = 0
RT_tag = 0
T_tag = 0
# 串口數(shù)組清零
out_str1 = '' # 清除之前的數(shù)據(jù)
#-----------------------------------串口打印數(shù)據(jù)-----------------------------------------#
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-589981.html
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-589981.html
到了這里,關(guān)于2022電賽泊車(chē)openmv代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!