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测距是主动式的,不依赖环境纹理。这是它跟双目视觉最大的区别。

我给你们画个流程图,把整个信号链路理清楚:

ToF传感器工作流程 光源驱动 VCSEL激光器 发射光学 扩散片/DOE 目标物体 反射光 接收光学 窄带滤光片 传感器像素 SPAD/CIS 信号处理 TDC/相位解算 深度图/点云 图1: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传感器——英飞凌的、意法半导体的、索尼的。它们的点云数据有几个共性特点:

  1. 密度高但噪声大:ToF能输出全幅深度图(比如640×480),每个像素一个深度值。但每个点的精度只有1-3cm,而且有随机噪声。
  2. 边缘飞点:这是ToF的老毛病。在物体边缘,光斑一半打在物体上、一半打在背景上,测出来的深度值会「飘」。我处理过的最夸张的情况,边缘误差能达到10cm以上。
  3. 运动模糊:因为ToF需要积分时间(通常几毫秒到几十毫秒),如果物体动得快,深度图会「拖尾」。嗯,这个在扫地机器人上特别明显。
  4. 多径干扰:前面提过,墙角、金属表面这些地方,数据会偏大。
  5. 温度漂移:ToF传感器对温度敏感。开机前几分钟和稳定后的数据可能差1-2cm。我习惯在代码里加一个「预热」逻辑。

核心结论:ToF点云是「高密度、低精度」的数据。它适合做场景理解、避障、手势识别,但不适合做高精度3D建模。如果你要做毫米级的物体扫描,还是用结构光或者激光线扫吧。

最后分享一个我常用的预处理流程:

// 伪代码:ToF点云预处理
1. 原始深度图输入
2. 中值滤波(去除椒盐噪声)
3. 双边滤波(保留边缘,平滑内部)
4. 边缘飞点检测(梯度突变点剔除)
5. 时间域滤波(多帧平均,降低随机噪声)
6. 输出优化后的深度图/点云

这个流程我用了好几年,效果稳定。当然,具体参数要根据传感器型号和应用场景调。比如扫地机器人,我一般用3×3的中值滤波;如果是AR应用,双边滤波的sigma值要调小一点,不然边缘会糊。

好了,这一章就到这里。ToF的原理和特点你心里应该有数了。下一章我们开始动手——怎么把ToF的原始数据变成可用的点云。


公众号:蓝海资料掘金营,微信deep3321