1、ToF技术原理:从飞行时间到深度图,深度相机的前世今生
各位同学好,我是你们这门课的主讲。今天咱们聊聊ToF深度相机——说白了,就是让相机学会“看距离”的技术。
我第一次接触ToF是几年前做机器人避障项目。当时用的还是双目视觉,一到弱光环境就抓瞎。后来换成ToF,才真正体会到什么叫“一束光解决所有问题”。
1.1 什么是飞行时间?
飞行时间,英文叫Time of Flight,简称ToF。原理其实特别简单:
你朝目标发射一束光,光碰到物体弹回来,你记录下它往返的时间。
光速是已知的(约3×10⁸ m/s),所以距离 = 光速 × 时间 / 2。
为什么要除以2?因为光走了个来回嘛。这个细节我当年面试时答错过,印象深刻。
核心公式:
d = (c × Δt) / 2
其中 d 是距离,c 是光速,Δt 是飞行时间。
你想想看,这原理是不是跟蝙蝠的回声定位有点像?只不过蝙蝠用声波,我们用光波。
1.2 从单点到深度图
一个ToF传感器能测一个点的距离。那怎么得到一整张深度图呢?
有两种主流做法:
- 单点扫描式:用激光束逐点扫描,像打印机一样。优点是精度高,缺点是慢。
- 面阵式:一次发射覆盖整个视场,每个像素独立测距。速度快,适合实时应用。
现在消费级ToF相机基本都是面阵式。我做过一个项目,用单点扫描式做高精度建模,扫一个椅子花了半小时。换成面阵式,一秒钟30帧,实时看深度变化,那感觉就像从拨号上网换成了5G。
1.3 ToF的两种调制方式
这里有个关键知识点:ToF怎么精确测量那极其短暂的飞行时间?
光速太快了,1米的往返时间才6.7纳秒。直接计时?普通电子设备根本做不到。所以工程师们想了个巧妙的办法——不直接测时间,而是测相位差。
| 调制方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 连续波调制(CW-ToF) | 发射连续正弦波或方波,通过测量发射波与反射波的相位差计算距离 | 精度高,抗干扰强,适合中远距离 | 存在距离模糊(2π周期问题) |
| 脉冲调制(Pulse-ToF) | 发射极短光脉冲,直接测量脉冲往返时间 | 原理简单,无距离模糊 | 对时间分辨率要求极高,近距精度不如CW |
我个人习惯用CW-ToF。为什么?因为它在室内环境下的稳定性更好。我曾经在强光下测试过脉冲式,结果噪声大得离谱,后来换成CW式才搞定。
避坑指南: 我曾经在选型时忽略了一个问题——CW-ToF有最大不模糊距离。比如调制频率20MHz,对应的不模糊距离只有7.5米。超过这个距离,测出来的值会“折叠”。做室外项目时一定要算清楚这个上限。
1.4 深度相机的前世今生
深度相机不是一天建成的。我把它分成三个阶段:
- 萌芽期(1990s-2000s):主要是科研机构在用,设备又大又贵。我记得2005年看一篇论文,他们用ToF相机拍一张深度图要等好几秒,分辨率才64×64像素。
- 爆发期(2010-2015):微软Kinect v1(结构光)和v2(ToF)把深度相机带入了消费市场。价格从几万美元降到了几百美元。我当时兴奋地买了一个拆着玩,发现里面用的就是PMD的ToF芯片。
- 成熟期(2016至今):苹果、索尼、英飞凌等巨头入场。手机上的LiDAR、人脸识别的ToF模组,精度和集成度都上了一个台阶。
嗯,这里要注意一个误区:很多人以为ToF是新技术。其实原理在1960年代激光发明时就有人提了,只是硬件一直跟不上。说白了,是半导体工艺和计算能力的进步,才让ToF真正落地。
1.5 知识体系总览
为了让你对本章内容有个整体印象,我画了张图:
1.6 深度图长什么样?
深度图本质上是一张灰度图。像素值越大(越亮),表示距离越近;像素值越小(越暗),表示距离越远。当然,不同厂商的编码方式可能相反,用之前一定要看文档。
举个例子:
// 假设深度图每个像素存储的是毫米值
// 像素值 1000 表示 1米
// 像素值 5000 表示 5米
// 读取深度图(伪代码)
uint16_t depth_value = depth_image.at<uint16_t>(row, col);
float distance_in_meters = depth_value / 1000.0f;
这里有个坑:很多ToF相机的深度图是16位无符号整数,但有些厂商用12位有效数据,高4位是状态位。我曾经没注意这个,结果算出来的距离全是错的,排查了半天才发现是位掩码没做。
重要提醒: 拿到一台新的ToF相机,第一件事就是看它的数据手册,搞清楚深度值的单位、位宽、以及无效像素的标记方式(通常是0或65535)。别问我怎么知道的——都是血泪教训。
1.7 本章小结
好了,这一章我们走了一遍ToF的底层逻辑:
- 飞行时间原理:光速测距,简单但精妙
- 从单点到深度图:面阵式是主流
- CW vs 脉冲:各有千秋,看场景选型
- 发展历程:从实验室到手机,走了三十年
下一章我们会深入CW-ToF的相位解算,手撕代码。到时候你会发现,数学公式其实没那么可怕。