基于 OpenCV 视觉识别与 STM32 运动控制的智能地面油渍清扫机器人。 通过摄像头实时采集地面图像,利用 KNN 背景减除算法结合 HSV 颜色过滤检测油渍区域, 计算油渍中心坐标后通过串口发送控制指令至 STM32 下位机,驱动机器人自主移动并完成清扫任务。 获 第二十七届中国机器人及人工智能竞赛全国二等奖。
# 串口通信 — 向 STM32 发送油渍坐标 def outuart(x, y, control_strategy): data_str = f"a{y:03d}{x:03d}{control_strategy}b\n" uart_A.write(data_str.encode('ascii')) # 油渍检测 — KNN + HSV 过滤 fgmask = fgbg.apply(frame) fgmask = cv2.GaussianBlur(fgmask, (5,5), 0) _, thresh = cv2.threshold(fgmask, 25, 255, cv2.THRESH_BINARY) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask_color = cv2.inRange(hsv, np.array([0, 0, 0]), np.array([180, 255, 80])) combined_mask = cv2.bitwise_and(thresh, mask_color) # 轮廓检测 — 面积 + 形状筛选 contours, _ = cv2.findContours( combined_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: area = cv2.contourArea(cnt) if area > 2000: x,y,w,h = cv2.boundingRect(cnt) center = (x + w//2, y + h//2) outuart(center[0], center[1], 0)