第一章:深度相机概述

大家好,我是老张。在机器人圈摸爬滚打了十几年,深度相机这东西,我经手过的型号少说也有几十款了。今天咱们就来聊聊深度相机的分类、原理和主流产品。嗯,这部分是基础,但基础不牢,后面做SLAM定位、避障规划的时候,你可能会被各种奇怪的问题折磨到怀疑人生。

1.1 深度相机分类:三种主流技术路线

深度相机说白了就是能告诉你「物体离我有多远」的相机。目前市面上主流的方案就三种:ToF(飞行时间法)结构光双目视觉。我习惯把它们比作三种不同的「测距性格」。

核心区别一句话总结:

  • ToF:我直接测光飞过去再飞回来的时间,简单粗暴。
  • 结构光:我往物体上投射已知图案,通过图案变形来算距离。
  • 双目:我模仿人眼,用两个摄像头看同一物体,通过视差算距离。

1.2 工作原理对比:它们到底怎么工作的?

1.2.1 ToF(飞行时间法)

ToF的原理其实很直观。相机发射一束调制过的红外光,打到物体表面后反射回来。传感器记录下光从发射到接收的时间差,乘以光速再除以2,距离就出来了。

为什么会这样?因为光速是恒定的,时间差直接对应距离。我在项目中遇到过一个问题:在强阳光下,ToF相机的红外光会被环境光淹没,导致测距失效。嗯,这里要注意,ToF对多路径反射也很敏感——比如你对着墙角拍,光在墙面之间弹来弹去,测出来的距离就会偏大。

避坑指南: 我曾经在户外做AGV导航时,用了某款ToF相机,结果一到中午就罢工。后来发现是没加带通滤光片。记住,ToF在室内表现优秀,室外强光下要谨慎。

1.2.2 结构光

结构光技术,说白了就是「我往你脸上打光,看你长什么样」。相机投射出已知的红外光斑或条纹图案,这些图案打到物体表面会发生变形。通过分析变形量,就能算出深度信息。

Kinect一代用的就是这种方案。我个人觉得结构光的优势在于近距离精度高,特别适合人脸识别、手势交互这类场景。但它的短板也很明显:怕强光、怕远距离。你想想看,投射出去的光斑在远处会发散,精度自然就下降了。

警告: 结构光相机在户外基本是废的。太阳光里的红外成分会直接淹没投射图案。我曾经试过在下午三点用结构光相机做室外建图,结果深度图全是噪点,根本没法用。

1.2.3 双目视觉

双目视觉是最「聪明」的方案。它不需要主动发光,完全靠两个摄像头之间的视差来计算深度。原理就是三角测量:已知两个相机之间的距离(基线),通过匹配左右图像中的同名点,就能算出物体的距离。

我建议做室外SLAM的朋友优先考虑双目。为什么?因为它不怕强光,而且功耗低。但双目的痛点是:计算量大,而且对纹理要求高。你对着白墙拍,左右图像找不到匹配点,深度就出不来。

对比维度 ToF 结构光 双目视觉
测距原理 飞行时间 图案变形 视差三角测量
精度 中等(厘米级) 高(近距离毫米级) 中等(依赖基线长度)
室外表现 差(强光干扰) 极差
计算量
典型场景 室内导航、AR 人脸识别、手势 室外SLAM、自动驾驶

1.3 主流产品介绍:我踩过的坑和推荐

1.3.1 Intel RealSense 系列

RealSense D435 是我用得最多的一款。它用的是双目+红外投射器方案,说白了就是双目为主,红外投射器辅助在弱纹理区域打上纹理。这个设计很聪明,兼顾了室内外场景。

我记得有一次做移动机器人导航,D435在室内走廊的表现非常稳定,深度图几乎没有空洞。但要注意,它的有效测距范围大概在0.1米到10米之间,超过10米精度就急剧下降。

个人经验: RealSense的SDK做得不错,但USB带宽是个坑。如果你同时接多个相机,记得调整USB控制器设置,否则会出现丢帧。

1.3.2 Microsoft Kinect

Kinect一代(结构光)和二代(ToF)我都用过。一代的精度在近距离确实惊艳,但那个外接电源和风扇噪音……嗯,你懂的。二代改用ToF后,帧率上去了,但精度反而下降了。

我建议:如果你做的是固定场景的手势交互,Kinect一代是个好选择。但如果是移动机器人,还是算了——它的体积和功耗都不太友好。

1.3.3 Orbbec(奥比中光)

Orbbec是国产深度相机的代表。我用过他们的Astra系列,结构光方案,性价比很高。在室内人脸识别和体感交互场景下,表现不输Kinect。

但要注意,Orbbec的驱动在Linux下有时会出问题。我曾经在Ubuntu 18.04上折腾了整整两天才把驱动装好。嗯,这里建议直接去他们官网下载最新SDK,别用第三方仓库的版本。

1.4 知识体系框架图

下面这张图是我自己整理的深度相机知识体系,帮你快速建立全局认知。

深度相机知识体系 ToF(飞行时间法) 结构光 双目视觉 原理:光飞行时间 精度:厘米级 原理:图案变形 精度:毫米级(近) 原理:视差三角 精度:依赖基线 ✅ 帧率高、计算量小 ❌ 室外差、多径干扰 ✅ 近距离精度极高 ❌ 怕强光、距离短 ✅ 室外好、功耗低 ❌ 计算量大、弱纹理 Kinect v2、PMD Kinect v1、Orbbec Astra RealSense D435、ZED 选型核心:场景决定方案,没有万能相机

1.5 选型建议:我的一点心得

说了这么多,到底该怎么选?我个人习惯从三个维度来考虑:

  1. 使用场景:室内还是室外?室内优先ToF或结构光,室外优先双目。
  2. 精度要求:需要毫米级精度?选结构光。厘米级够用?ToF或双目都行。
  3. 计算资源:嵌入式平台算力有限?ToF最省心。有GPU?双目可以上。

最后说一句: 没有完美的深度相机。我在项目里经常是双目+ToF混合使用,取长补短。你想想看,做机器人感知,本来就是多传感器融合的事,别指望一个相机解决所有问题。


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