3、深度传感器原理(下):结构光原理(Kinect v1)、ToF原理(Kinect v2/Azure)、LiDAR原理(机械式/固态)

好,咱们接着聊深度传感器。上一章我把被动双目视觉讲透了,这一章咱们来啃几块硬骨头——结构光、ToF和LiDAR。这三种技术,说白了就是主动往场景里打光,然后靠分析反射回来的光信号来算深度。

我个人习惯把这三者放在一起讲,因为它们都涉及一个核心问题:如何精确测量光的飞行时间或形变。你想想看,不管是投射编码图案还是发射激光脉冲,本质上都是在跟光速赛跑。

核心要点:主动式深度传感的三大流派——结构光(编码光)、ToF(飞行时间)、LiDAR(扫描测距)。它们各有各的脾气,选型时一定要看场景。

3.1 结构光原理:Kinect v1 的成名绝技

结构光,这个名字听起来挺唬人。说白了就是:我往你脸上打一束有规律的光斑,然后用相机拍下光斑被物体表面扭曲后的样子,根据扭曲程度算出深度

Kinect v1 用的就是这招。它内部有一个红外激光投影器,通过衍射光栅投射出密密麻麻的红外光斑。这些光斑打在平面上是整齐的网格,但打在立体物体上就会变形——凸起的地方光斑间距变小,凹陷的地方间距变大。

我记得第一次拆解 Kinect v1 时,看到那个投影器里的衍射元件,心里直呼巧妙。它只用了一个激光二极管,就能投射出几万个光斑,成本控制得死死的。

避坑指南:我曾经在户外用结构光传感器做实验,结果大白天根本没法用——太阳光里的红外成分直接把投影光斑淹没了。所以结构光基本只适合室内或弱光环境。

结构光的深度计算流程大致如下:

  1. 标定:在已知距离的参考平面上,记录光斑的基准位置。
  2. 投射:向场景投射编码光斑。
  3. 拍摄:红外相机捕捉变形后的光斑图像。
  4. 匹配:将当前光斑与基准光斑做块匹配,计算偏移量。
  5. 三角化:根据偏移量和系统几何参数,解算深度。

这里有个关键参数——基线长度。投影器和相机之间的距离越大,深度分辨率越高,但盲区也越大。Kinect v1 的基线大概 7.5cm,在 1-4 米范围内效果不错,太近了反而看不清。

3.2 ToF 原理:Kinect v2 / Azure Kinect 的进化

ToF,全称 Time of Flight,飞行时间法。这名字就直白多了——我发出一束光,等它反射回来,记下时间差,乘以光速除以 2,就是距离

但问题来了:光速太快了,3 米距离来回才 20 纳秒。普通电子器件根本没法直接测这么短的时间。怎么办?

工业界想了个聪明的办法——连续波调制。不是发一个脉冲,而是发一串正弦波或方波。通过比较发射信号和接收信号的相位差,间接算出飞行时间。

Kinect v2 和后来的 Azure Kinect 用的就是这种方案。它们发射 860nm 左右的近红外光,调制频率通常在 20-100 MHz 之间。调制频率越高,深度精度越好,但测量范围会变小。

技术参数对比:

参数 Kinect v2 Azure Kinect
深度分辨率 512 × 424 640 × 576(宽视场)
有效距离 0.5 - 4.5 m 0.25 - 5.46 m
精度 ~4mm @ 1m ~1.7mm @ 1m
视场角 70° × 60° 120° × 120°

ToF 相比结构光有个明显优势——不怕环境光干扰。因为它是主动发射调制光,接收端可以通过带通滤波和同步解调,把环境光滤掉。我在项目中用 Azure Kinect 做过室外测试,阴天条件下效果居然还不错。

但 ToF 也有自己的毛病:

  • 多路径干扰:光线在物体之间来回反射,导致测距偏大。墙角、凹面场景尤其明显。
  • 运动模糊:因为需要积分多个周期才能算出一个深度值,快速移动的物体会产生拖影。
  • 温度漂移:激光二极管的波长会随温度变化,影响调制精度。我建议上电后先预热 5 分钟再采集数据。

3.3 LiDAR 原理:机械式与固态

LiDAR,光探测与测距。跟 ToF 本质一样,都是测飞行时间。但 LiDAR 强调的是扫描——通过机械旋转或电子扫描,逐点测量整个场景的深度。

机械式 LiDAR 大家应该不陌生,就是车顶上那个转来转去的「小桶」。它内部有一个或多个激光发射器,通过旋转镜或整体旋转,实现 360° 水平扫描。垂直方向则靠多线激光阵列覆盖。

我记得 2018 年做自动驾驶项目时,用的还是 16 线机械 LiDAR。那玩意儿贵得离谱,而且旋转部件特别娇气——震动大了会坏,灰尘多了会卡。后来我学乖了,每次上车前都要用气吹清理一下窗口。

注意:机械式 LiDAR 的旋转部件是易损件。我曾经在矿区项目里,因为粉尘太大,三个月烧坏了两个电机。后来换了固态 LiDAR,问题才解决。

固态 LiDAR 是近几年的趋势。它没有旋转部件,靠的是:

  • 光学相控阵(OPA):通过控制光波导阵列的相位差,实现光束偏转。优点是扫描速度快、无机械磨损。缺点是工艺复杂、旁瓣干扰多。
  • Flash LiDAR:一次性照亮整个视场,用面阵探测器同时接收。类似相机拍照,一帧就能拿到整个深度图。适合近距离、高帧率场景。
  • MEMS 振镜:用微机电系统驱动一个小镜片摆动,实现光束扫描。成本低、体积小,是目前消费级固态 LiDAR 的主流方案。

下面这张图是我自己整理的三种 LiDAR 技术路线对比,帮你快速建立直觉:

LiDAR 技术路线对比 机械式 LiDAR • 旋转电机 + 多线激光 • 360° 水平扫描 • 精度高,范围远 • 有磨损,寿命短 • 成本高($1000+) 代表:Velodyne HDL-64 固态 OPA • 光学相控阵偏转 • 无机械部件 • 扫描速度快 • 旁瓣干扰问题 • 工艺难度大 代表:Quanergy S3 MEMS 振镜 • 微镜片摆动扫描 • 体积小,成本低 • 视场角有限 • 可靠性较好 • 消费级首选 代表:Livox Horizon 选型建议:高精度远距离 → 机械式;低成本消费级 → MEMS;高帧率近距离 → Flash

说到选型,我个人的经验是:没有最好的传感器,只有最合适的。如果你做室内人体交互,ToF 或结构光就够了;如果你做自动驾驶,机械式 LiDAR 还是主流;如果你做机器人导航,MEMS 固态 LiDAR 性价比最高。

3.4 三种技术的核心对比

最后,我把这三种技术放在一起做个横向对比。你以后做方案选型时,直接翻到这一页就行:

维度 结构光 ToF LiDAR
测距原理 光斑形变三角化 相位差/脉冲飞行时间 脉冲飞行时间 + 扫描
典型距离 0.1 - 5 m 0.1 - 10 m 10 - 200 m
精度 亚毫米级(近距) 毫米级 厘米级
抗环境光 中等
帧率 30 fps 30 - 60 fps 10 - 20 fps(机械式)
成本 中等
典型应用 人脸识别、手势 体感交互、AR 自动驾驶、测绘

个人建议:如果你刚开始接触 3D 视觉,我推荐从 ToF 入手。它原理直观,数据干净,API 也成熟。Azure Kinect 的 SDK 做得相当好,开箱即用。等你把深度图、点云、标定这些概念都玩熟了,再回头啃结构光和 LiDAR 的底层原理,会轻松很多。

嗯,这一章的内容就到这儿。三种主动式深度传感器的原理、优缺点、选型建议,我都掰开揉碎讲清楚了。下一章咱们会聊点云预处理——拿到原始深度数据后,怎么把它变成干净、可用的点云。


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