摘要
2025 年全国大学生电子设计竞赛 C 题要求“仅用一颗固定摄像头”在 5 s 内完成 100 cm~200 cm 距离、误差 ≤2 cm 的单目测距,并实时显示功耗。本文整合国一选手方案、CSDN 高分博文、B 站实测视频及官方说明,给出从硬件选型→离线标定→在线算法→功耗优化→现场调试的完整工程指南
一、赛题纵览:为什么 2 cm 精度这么难?
维度
官方指标
工程难点
绝对误差
≤2 cm @200 cm
1 % 相对误差,接近工业级
实时性
≤5 s 全流程
禁止 PC,只能用 MCU/MPU
目标多样性
圆/三角/正方形 + 30°~60° 倾斜
透视畸变、特征混淆
功耗
实时显示 P / Pmax
算法与硬件双重约束
其他
一键启动,禁网络
鲁棒性要求极高
二、系统架构总览
功能分离式设计,已被多支国一队验证
模块
方案
职责
视觉前端
OpenMV4 H7 Plus(OV5640) 或 CM4+CSI-2
640×480 采集、畸变矫正、PnP
主控
STM32H743 或 Raspberry Pi CM4 Lite
电流采样、键盘/显示、USB 供电
电流检测
INA226 + 0.1 Ω 分流电阻
±0.5 %,I²C 接口
人机交互
0.96" OLED + 轻触按键
一键触发、实时显示 D/x/P
结构
3D 打印 L 支架 + 燕尾槽微调
光轴稳固、俯仰角可锁
三、离线标定:误差预算的第一步
3.1 相机内参标定(张正友法)
棋盘格:9×7 方格,单格 35 mm,打印 A3 哑光相纸
OpenCV 一键脚本
import cv2, glob, numpy as np
objp = np.zeros((9*7,3), np.float32)
objp[:,:2]= np.mgrid[0:9,0:7].T.reshape(-1,2)*35# 35 mm
images = glob.glob('calib/*.jpg')# 自动检测角点 → calibrateCamera
结果
重投影误差 0.36 px
焦距 fx=1572 px,fy=1570 px,主点 (cx,cy)=(640,360)
k1=-0.38,k2=0.12,p1=0.001,p2=-0.002
误差折算:0.36 px @200 cm ≈ 1.1 cm,为后续算法留足余量。
3.2 外参 & 基准线标定
基准线:在 100 cm 处贴一条 2 cm 宽黑线,用激光测距仪标定真实距离 L₀=100.0 cm