第一章:深度相机概述
大家好,我是老张。在机器人圈摸爬滚打了十几年,深度相机这东西,我经手过的型号少说也有几十款了。今天咱们就来聊聊深度相机的分类、原理和主流产品。嗯,这部分是基础,但基础不牢,后面做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 知识体系框架图
下面这张图是我自己整理的深度相机知识体系,帮你快速建立全局认知。
1.5 选型建议:我的一点心得
说了这么多,到底该怎么选?我个人习惯从三个维度来考虑:
- 使用场景:室内还是室外?室内优先ToF或结构光,室外优先双目。
- 精度要求:需要毫米级精度?选结构光。厘米级够用?ToF或双目都行。
- 计算资源:嵌入式平台算力有限?ToF最省心。有GPU?双目可以上。
最后说一句: 没有完美的深度相机。我在项目里经常是双目+ToF混合使用,取长补短。你想想看,做机器人感知,本来就是多传感器融合的事,别指望一个相机解决所有问题。
公众号:蓝海资料掘金营,微信deep3321