1. 课程导论
大家好,我是这门课的主讲。在嵌入式视觉领域摸爬滚打了十几年,我经手过的摄像头系统少说也有上百套了。从最早的单目安防摄像头,到后来给自动驾驶公司做环视方案,再到最近帮机器人团队搭全景感知系统——说实话,多摄像头同步这个问题,几乎每个项目都会遇到,而且每次都能整出点新花样。
今天这第一节课,咱们先不急着敲代码。我想先聊聊:为什么我们需要多摄像头?同步到底在解决什么问题?把这些搞清楚了,后面三十章你才知道劲儿往哪儿使。
1.1 多摄像头系统,到底用在哪儿?
你可能觉得,一个摄像头不够用吗?嗯,在很多场景下,确实不够。
我随便列几个我亲手做过的项目,你就明白了:
| 应用场景 | 摄像头数量 | 核心需求 |
|---|---|---|
| 自动驾驶环视 | 4-12 个 | 360° 无死角感知,拼接鸟瞰图 |
| VR/AR 头显 | 2-6 个 | 双目深度估计 + 头部追踪 |
| 工业视觉检测 | 2-8 个 | 多角度同步抓拍,三维重建 |
| 运动捕捉 | 6-24 个 | 高帧率同步,骨骼/动作重建 |
| 全景监控 | 4-8 个 | 画面拼接,无拼接缝 |
你看,从汽车到手机,从工厂到演播室,多摄像头系统已经无处不在。但问题来了——这些摄像头之间,怎么配合?
1.2 不同步的代价,我替你踩过坑
先讲个我自己的故事。
几年前,我给一家自动驾驶公司做环视泊车系统。四个鱼眼摄像头,分别装在车头、车尾和两侧后视镜上。当时为了赶工期,我偷了个懒——直接用软件时间戳,没做硬件同步。
结果呢?
车在低速倒车时还好,画面拼接勉强能看。但一旦车速超过 20 km/h,四个摄像头的画面就「错位」了。车头拍到的路沿石,在拼接图上歪了半个车身。测试工程师跟我说:「你这画面看着像喝醉了。」
后来我查了日志才发现:四个摄像头的曝光时刻,最大差了 80 毫秒。80 毫秒对于 30 km/h 的车速意味着什么?车已经往前走了 0.67 米。画面不错位才怪。
从那以后,我给自己定了个规矩:凡是涉及运动场景的多摄像头系统,硬件同步是底线。
- 软件时间戳在非实时系统上(Linux、Android)抖动可达 10-100 ms
- USB 摄像头共用总线时,带宽竞争会导致帧间隔不均匀
- 不同型号的 sensor,曝光时间差异可能造成「伪同步」
1.3 同步到底在同步什么?
说白了,多摄像头同步要解决三个层次的问题:
- 曝光同步——所有摄像头在同一时刻开始曝光,结束曝光。这是最严格的要求。
- 帧率同步——所有摄像头以相同的帧率运行,帧边界对齐。
- 时间戳对齐——即使曝光时刻不完全一致,也要通过高精度时间戳把数据对齐到同一个时间坐标系。
我个人的经验是:能硬件同步就别用软件,能硬触发就别靠网络对时。但现实往往很骨感——很多时候你拿到的摄像头模组根本没有硬件触发接口,或者系统架构不允许你改硬件。这时候,时间戳对齐就成了最后的救命稻草。
1.4 课程知识体系总览
这门课一共 30 章,我把它分成了四个阶段。下面这张图,就是整个课程的知识骨架:
1.5 学完这门课,你能得到什么?
我不喜欢画大饼。咱们说点实在的:
- 你会亲手搭建至少 3 套多摄像头系统(树莓派、Jetson、工业相机)
- 你会掌握 4 种同步方案(硬件触发、PTP、软件时间戳、混合同步)
- 你会写出生产级的时间戳对齐代码,不是玩具 demo
- 你会学会怎么排查同步问题——这个能力,说实话比写代码还值钱
1.6 你需要准备什么?
硬件方面,我列了个最低配置清单:
| 硬件 | 推荐型号 | 预算(约) |
|---|---|---|
| 主控板 | 树莓派 4B / Jetson Nano | 300-800 元 |
| 摄像头模组 | OV5640 (MIPI) × 2 | 100-200 元 |
| USB 摄像头 | USB 免驱摄像头 × 2 | 100-200 元 |
| 逻辑分析仪 | Saleae 8ch / 国产替代 | 100-500 元 |
| 杜邦线 + 面包板 | 若干 | 30 元 |
软件方面,你需要熟悉 Linux 基本操作,会 C 或 Python 更好。不过别担心——每章的代码我都会逐行解释,你跟着敲就行。