1. ToF技术原理:从光子到点云
大家好,我是老张。做3D视觉这些年,接触过不少传感器。ToF(Time-of-Flight)是我个人觉得最「有意思」的一种。为什么?因为它测距的方式特别直接——直接测量光飞行的时间。说白了,就是给光掐表。
今天这一章,我们就把ToF的底裤扒干净。从工作原理开始,再跟结构光、激光雷达做个对比,最后聊聊ToF点云的数据特点。嗯,这些都是我踩过坑之后总结出来的。
1.1 ToF传感器工作原理
ToF的原理其实不复杂。你想想看,光速是固定的(约3×10⁸ m/s)。我们发射一束光,打到物体上再反射回来。记录下这段时间,距离就出来了。
公式很简单:
距离 = (光速 × 飞行时间) / 2
为什么要除以2?因为光走了个来回。这个我在项目里给新人解释过很多次,他们总忘。
实际工程中,ToF传感器主要分两种方案:
- 直接ToF(dToF):直接测量单个光脉冲的飞行时间。精度高,但电路复杂。苹果的LiDAR用的就是这种。
- 间接ToF(iToF):测量发射光和接收光之间的相位差。成本低,适合消费级产品。我早期做的扫地机器人项目用的就是iToF。
核心要点:ToF测距是主动式的,不依赖环境纹理。这是它跟双目视觉最大的区别。
我给你们画个流程图,把整个信号链路理清楚:
我的经验:实际项目中,最容易被忽视的是「多径干扰」。就是光在物体之间来回反射,导致测距偏大。我曾经在一个金属架仓库里调试,数据怎么都对不上,后来才发现是金属表面反射太强。解决办法是调低积分时间,或者用调制频率更高的传感器。
1.2 ToF vs 结构光 vs 激光雷达
很多同学问我:「老张,这三种到底怎么选?」
我一般会反问:「你的应用场景是什么?」
咱们直接上对比表,一目了然:
| 特性 | ToF | 结构光 | 激光雷达 |
|---|---|---|---|
| 测距原理 | 光飞行时间 | 三角测量 | 脉冲/相位测距 |
| 工作距离 | 0.3-10m(消费级) | 0.1-3m | 10m-200m+ |
| 精度 | cm级(1-3cm) | mm级(0.1-1mm) | cm级(1-5cm) |
| 抗环境光 | 中等(需滤光片) | 弱(易受干扰) | 强(窄带滤波) |
| 点云密度 | 高(全幅) | 高(全幅) | 低(扫描线) |
| 帧率 | 30-60fps | 10-30fps | 5-20fps |
| 成本 | 低($10-50) | 中($20-100) | 高($100-10000+) |
| 典型应用 | 手机、AR/VR、机器人 | 人脸识别、3D扫描 | 自动驾驶、测绘 |
我个人的选型建议:
- 室内近距离高精度(比如人脸解锁):结构光更合适。但要注意,强光下结构光基本废掉。
- 中距离动态场景(比如机器人避障):ToF是首选。帧率高,不怕运动模糊。
- 远距离大场景(比如自动驾驶):老老实实上激光雷达。ToF和结构光都够不着。
避坑指南:我曾经在一个户外机器人项目里用了ToF,结果大晴天直接「瞎了」。后来查资料才知道,ToF在强环境光下信噪比会急剧下降。解决办法是加窄带滤光片,或者用更高功率的VCSEL。嗯,这些都是学费换来的。
1.3 ToF点云数据特点
好了,原理讲完了,对比也做了。咱们聊聊ToF点云到底长什么样。
我用过不少ToF传感器——英飞凌的、意法半导体的、索尼的。它们的点云数据有几个共性特点:
- 密度高但噪声大:ToF能输出全幅深度图(比如640×480),每个像素一个深度值。但每个点的精度只有1-3cm,而且有随机噪声。
- 边缘飞点:这是ToF的老毛病。在物体边缘,光斑一半打在物体上、一半打在背景上,测出来的深度值会「飘」。我处理过的最夸张的情况,边缘误差能达到10cm以上。
- 运动模糊:因为ToF需要积分时间(通常几毫秒到几十毫秒),如果物体动得快,深度图会「拖尾」。嗯,这个在扫地机器人上特别明显。
- 多径干扰:前面提过,墙角、金属表面这些地方,数据会偏大。
- 温度漂移:ToF传感器对温度敏感。开机前几分钟和稳定后的数据可能差1-2cm。我习惯在代码里加一个「预热」逻辑。
核心结论:ToF点云是「高密度、低精度」的数据。它适合做场景理解、避障、手势识别,但不适合做高精度3D建模。如果你要做毫米级的物体扫描,还是用结构光或者激光线扫吧。
最后分享一个我常用的预处理流程:
// 伪代码:ToF点云预处理
1. 原始深度图输入
2. 中值滤波(去除椒盐噪声)
3. 双边滤波(保留边缘,平滑内部)
4. 边缘飞点检测(梯度突变点剔除)
5. 时间域滤波(多帧平均,降低随机噪声)
6. 输出优化后的深度图/点云
这个流程我用了好几年,效果稳定。当然,具体参数要根据传感器型号和应用场景调。比如扫地机器人,我一般用3×3的中值滤波;如果是AR应用,双边滤波的sigma值要调小一点,不然边缘会糊。
好了,这一章就到这里。ToF的原理和特点你心里应该有数了。下一章我们开始动手——怎么把ToF的原始数据变成可用的点云。
公众号:蓝海资料掘金营,微信deep3321