背景
这个系列记录的是用树莓派5、罗技C270摄像头、双轴舵机和激光笔,从零搭建视觉追踪激光瞄准系统的完整过程。最终目标是追踪蚊子并用激光笔瞄准,但实际推进中先从气球起步,逐步逼近蚊子场景。
硬件清单
| 部件 | 型号 | 说明 |
|---|---|---|
| 主控 | 树莓派5 | 8GB版更佳 |
| 摄像头 | 罗技C270 | 720P UVC免驱,USB直连 |
| 舵机 | SG90 ×2 | 起步可用,蚊子场景建议升级MG90S金属齿 |
| 激光笔 | KY-008 650nm 5mW | Class 2,有眨眼反射安全 |
| 外部电源 | 5V 3A | 舵机专用,与Pi5共地 |
| 云台机械件 | 亚克力pan-tilt套件 | 含SG90安装座 |
四条技术路径
最初检索了四种实现途径,按蚊子的适用性排序:
| 路径 | 方案 | 蚊子适用性 | 关键短板 |
|---|---|---|---|
| A | OpenCV+GPIO直驱舵机 | 可行但次优 | 舵机PWM和图像处理抢同一颗CPU |
| B | OpenCV+串口控制舵机板 | 最佳(原计划) | 控制板协议未知,卡壳 |
| C | 视觉伺服闭环 | 不推荐 | 需同时检测蚊子+激光点,亚像素级小目标几乎不可能 |
| D | 坐标变换 | 不推荐 | 蚊子轨迹跳跃无规律,开环映射无意义 |
核心逻辑:蚊子的难点不在”控制舵机去哪”,而在”看见蚊子在哪”。把控制甩给下位机,把算力全留给眼睛。
路径决策与转向
原定路径B(OpenCV检测 + 串口控制舵机板),因双路舵机控制板主控芯片N76E003AT20的固件协议无法获取,转向Pi5直驱方案:
| 阶段 | 控制方式 | 说明 |
|---|---|---|
| 原计划路径B | 树莓派→UART→控制板→舵机 | 协议卡壳 |
| 当前方案 | 树莓派→pigpio硬件PWM→舵机直驱 | 本系列核心 |
| 备选方案B’ | 树莓派→I2C→PCA9685→舵机 | 代码已备好,随时可切换 |
模块依赖关系
[01 舵机控制] ←─硬件驱动─→ [04 完整集成]
↑
[02 视觉检测] ─输出质心─→ [03 控制算法] ─输出舵机角度─→ [04]
↓
[05 激光控制]
整个系统分五个模块:舵机控制负责驱动硬件,视觉检测负责发现目标,控制算法负责把目标位置转化为舵机运动,完整集成把前三者组合成可运行系统,激光控制是独立的安全开关模块。
推荐推进顺序
Step 0 — 环境准备
sudo apt update && sudo apt install pigpio python3-pigpio i2c-tools
pip install opencv-python opencv-contrib-python numpy pigpio RPi.GPIO gpiozero
sudo pigpiod
sudo raspi-config -> Interface Options -> I2C -> Enable
Step 1 — 舵机动起来
python 01_舵机控制/示例代码/servo_pigpio.py
确认双轴都能平滑扫描,限位正常。若抖动严重,检查供电、共地、是否真用了硬件PWM。
Step 2 — 摄像头看见目标
python 02_OpenCV运动检测/示例代码/motion_mog2.py
调 VAR_THRESHOLD、MIN_AREA/MAX_AREA 让目标稳定出现在画面中心红点。
Step 3 — 控制算法单独验证
python 03_跟踪控制算法/示例代码/pid_controller.py
python 03_跟踪控制算法/示例代码/kalman_tracker.py
Step 4 — 端到端集成
python 04_完整集成示例/示例代码/autoturret_complete.py
python 04_完整集成示例/示例代码/mosquito_tracker_template.py
Step 5 — 激光开关集成
在主循环中加入激光开关,当跟踪误差小于阈值时才点亮激光。
关键风险与已知短板
- 舵机速度:SG90约0.1s/60度,蚊子近距离角速度可能超出。建议准备MG90S金属齿备用。
- 有效距离:C270在1米外蚊子已近亚像素,实际有效范围0.5~1.5米。
- 多进程复杂度:完整集成示例的多进程架构延迟低但调试复杂,起步可先用单进程版本。
- 供电:双舵机同时转动瞬态电流可达1A,务必外部5V供电且与Pi5共地。
- 激光安全:低功率也禁直射人眼,建议加”对准后才点亮”硬保护。
蚊子与气球的本质差异
这是整个项目最关键的一张表——它决定了检测算法必须换范式:
| 维度 | 气球 | 蚊子 |
|---|---|---|
| 大小 | 占画面几十~几百像素 | 几像素到十几像素 |
| 颜色 | 单一鲜艳,HSV阈值秒杀 | 暗色杂色,HSV无效 |
| 速度 | 慢、可预测 | 快(1~2 m/s)、轨迹zigzag |
| 检测方法 | HSV+轮廓/霍夫圆 | 帧差/MOG2 + 轮廓面积过滤 |
简单说:协议照旧去破,检测算法另起炉灶,控制器加预测。后续文章按模块逐一展开。