From 8a31afd48e85678ffa6dd8df84c7ae29288522f4 Mon Sep 17 00:00:00 2001 From: UnknownObject Date: Wed, 14 Jun 2023 11:03:31 +0800 Subject: [PATCH] add rfid and spec terrain process --- submit.bat | 15 +++++++ track.py | 116 ++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 113 insertions(+), 18 deletions(-) create mode 100644 submit.bat diff --git a/submit.bat b/submit.bat new file mode 100644 index 0000000..a0bf016 --- /dev/null +++ b/submit.bat @@ -0,0 +1,15 @@ +@echo off +set /p message=请输入本次提交信息: + +REM 将变更添加到暂存区 +git add track.py +git add submit.bat + +REM 提交变更并添加提交信息 +git commit -m "%message%" + +REM 推送到远程仓库 +git push origin master + +REM 等待用户手动关闭窗口 +pause \ No newline at end of file diff --git a/track.py b/track.py index 36832c3..b1ef01c 100644 --- a/track.py +++ b/track.py @@ -110,7 +110,29 @@ def data_format_wrapper(down_center, state_crossing, deflection_angle): return bytes(send_data) -def UsartSend(str_data, _img): +def SendWhiteData(is_detect, detect_info=0x00): + data = [0x55,0x02,0x80, + 0x02 if is_detect else 0x01, + detect_info if is_detect else 0x00,0x00,0x00,0xBB] + UsartSend(bytes(data)) + +def SendROIData(roi_data): + data_1 = [0x55,0x02,0x81, + 0x01 if roi_data['left']['blob_flag'] else 0x00, + 0x01 if roi_data['right']['blob_flag'] else 0x00, + 0x01 if roi_data['up']['blob_flag'] else 0x00, + 0x00,0xBB] + data_2 = [0x55,0x02,0x82, + 0x01 if roi_data['middle_up']['blob_flag'] else 0x00, + 0x01 if roi_data['middle_down']['blob_flag'] else 0x00, + 0x01 if roi_data['down']['blob_flag'] else 0x00, + 0x00,0xBB] + UsartSend(bytes(data_1)) + time.sleep(1) + UsartSend(bytes(data_2)) + + +def UsartSend(str_data): ''' 涓插彛鍙戦佸嚱鏁 ''' @@ -122,7 +144,7 @@ def UsartSend(str_data, _img): #--------------瀹氭椂鍣ㄩ儴鍒 START ------------------- -is_need_send_data = True # 鏄惁闇瑕佸彂閫佹暟鎹殑淇″彿鏍囧織 +is_need_send_data = False # 鏄惁闇瑕佸彂閫佹暟鎹殑淇″彿鏍囧織 def uart_time_trigger(tim): ''' 涓插彛鍙戦佹暟鎹殑瀹氭椂鍣紝瀹氭椂鍣ㄧ殑鍥炶皟鍑芥暟 @@ -176,8 +198,9 @@ time.sleep(1) # 鐩寸嚎鐏板害鍥鹃鑹查槇鍊 -LINE_COLOR_THRESHOLD = [(6, 65)] -#LIGHT_LINE_COLOR_THRESHOLD = [(9, 88)] +LINE_COLOR_THRESHOLD = [(6, 65)] #Dark +WHITE_BLOCK_THRESHOLD = [(165, 255)] +#LINE_COLOR_THRESHOLD = [(6, 120)] #Light #LINE_COLOR_THRESHOLD = [(0, 52, -19, 0, -1, 14)] # 浠ュ疄闄呯┖闂村潗鏍囦负鍩哄噯锛屽彇鏍风獥鍙 @@ -229,10 +252,41 @@ def find_blobs_in_rois(img): if is_debug: img.draw_rectangle((x,y,width, height), color=(255)) else: - #blobs=canvas.find_blobs(LINE_COLOR_THRESHOLD, roi=roi, merge=True, pixels_area=10) + blobs=canvas.find_blobs(LINE_COLOR_THRESHOLD, roi=roi, merge=True, pixels_area=10) continue + return roi_blobs_result +def find_white_blobs_in_rois(img): + ''' + 璇存槑锛氬湪ROIS涓鎵捐壊鍧楋紝鑾峰彇ROI涓壊鍧楃殑涓績鍖哄煙涓庢槸鍚︽湁鑹插潡鐨勪俊鎭 + ''' + global ROIS + global is_debug + canvas = img.copy() + roi_blobs_result = {} # 鍦ㄥ悇涓猂OI涓鎵捐壊鍧楃殑缁撴灉璁板綍 + for roi_direct in ROIS.keys(): + roi_blobs_result[roi_direct] = { + 'cx':0, + 'cy':0, + 'w':0, + 'blob_flag': False + } + for roi_direct, roi in ROIS.items(): + blobs=canvas.find_blobs(WHITE_BLOCK_THRESHOLD, roi=roi, merge=True) + if len(blobs) != 0: + largest_blob = max(blobs, key=lambda b: b.pixels()) + if largest_blob.area() > 1000: + x,y,width,height = largest_blob[:4] + roi_blobs_result[roi_direct]['cx'] = largest_blob.cy() + roi_blobs_result[roi_direct]['cy'] = largest_blob.cx() + roi_blobs_result[roi_direct]['w'] = largest_blob.h() + roi_blobs_result[roi_direct]['blob_flag'] = True + if is_debug: + img.draw_rectangle((x,y,width, height), color=(255)) + else: + blobs=canvas.find_blobs(WHITE_BLOCK_THRESHOLD, roi=roi, merge=True, pixels_area=10) + continue return roi_blobs_result @@ -277,6 +331,27 @@ def state_deflection_angle(roi_blobs_result): #--------------鐩寸嚎涓庤矾鍙f娴嬮儴鍒 END ------------------- +#--------------RFID鍗′笌鐗规畩鍦板舰鏍囧織鐗╂娴 START ------------------- + +white_line_flag = 0 + +def rfid_and_spec_terrain_detect(roi_blobs_result): + global white_line_flag + if roi_blobs_result['up']['w'] > 100 and white_line_flag == 0: + white_line_flag = 1; + return False + if roi_blobs_result['middle_up']['w'] > 100 and white_line_flag == 1: + white_line_flag = 2; + return False + if roi_blobs_result['middle_down']['w'] > 100 and white_line_flag == 2: + white_line_flag = 3; + return False + if roi_blobs_result['down']['w'] > 100 and white_line_flag == 3: + white_line_flag = 0; + return True + + +#--------------RFID鍗′笌鐗规畩鍦板舰鏍囧織鐗╂娴 END ------------------- #--------------浜岀淮鐮佽瘑鍒儴鍒 START ------------------- @@ -309,8 +384,6 @@ def QR_Check(): last_cx = 0 last_cy = 0 Flag_track = False -#璋冭瘯锛屼娇璁惧濮嬬粓澶勪簬宸$嚎妯″紡 -#Flag_track = True #灏嗚摑鐏紩鑴欼O12閰嶇疆鍒癎PIO0锛孠210寮曡剼鏀寔浠绘剰閰嶇疆 fm.register(12, fm.fpioa.GPIO0) LED_B = GPIO(GPIO.GPIO0, GPIO.OUT) #鏋勫缓LED瀵硅薄 @@ -322,6 +395,8 @@ while True: LED_B.value(0) #鐐逛寒LED # 鎷嶆憚鍥剧墖 img = sensor.snapshot() + # 鍘婚櫎鍥惧儚鐣稿彉 + img.lens_corr(DISTORTION_FACTOR) # 涓插彛鏁版嵁鎺ユ敹澶勭悊 data = uart.read(8) if data is not None: @@ -340,8 +415,9 @@ while True: if(data[3] == 0x02): print("宸$嚎") print("鍋滄璇嗗埆") - Flag_track = False tim1.stop() # 鍋滄瀹氭椂鍣 + Flag_track = False + time.sleep(1) if(data[3] == 0x03): # 鑸垫満璋冩暣 angle = data[5] # 鍒ゆ柇鑸垫満鎺у埗鏂瑰悜 @@ -372,22 +448,26 @@ while True: QR_Flag = False - # 鍘婚櫎鍥惧儚鐣稿彉 - #img.lens_corr(DISTORTION_FACTOR) # 浜岀淮鐮佽瘑鍒 #QR_Check() # 宸$嚎 if Flag_track: roi_blobs_result = find_blobs_in_rois(img) - down_center, state_crossing, deflection_angle = state_deflection_angle(roi_blobs_result) - LCDDrawTrackInfo(down_center, state_crossing, deflection_angle, img) - if is_need_send_data: - UsartSend(data_format_wrapper(down_center, state_crossing, deflection_angle)) - time.sleep_ms(10) + if rfid_and_spec_terrain_detect(find_white_blobs_in_rois(img)): + SendWhiteData(False) is_need_send_data = False - - # 鍦↙CD涓婃樉绀 - #lcd.display(img) + else: + down_center, state_crossing, deflection_angle = state_deflection_angle(roi_blobs_result) + if state_crossing: + white_line_flag = 0 + LCDDrawTrackInfo(down_center, state_crossing, deflection_angle, img) + if is_need_send_data: + UsartSend(data_format_wrapper(down_center, state_crossing, deflection_angle)) + time.sleep_ms(10) + is_need_send_data = False + else: + # 鍦↙CD涓婃樉绀 + lcd.display(img) #鎸夐敭KEY鎸変笅銆傚紑鍚垨鍏抽棴璋冭瘯锛屽苟閫鍑烘墍鏈変换鍔° if btn_debug.value() == 0: Flag_track = not Flag_track # 宸$嚎浠诲姟閫鍑