第一章 深度相机选型与硬件平台评估
做嵌入式深度相机部署,第一步不是写代码,而是选硬件。这个道理我吃了不少亏才明白。几年前有个项目,算法在PC上跑得飞起,结果移植到嵌入式平台直接卡成PPT——后来一查,是相机接口带宽把CPU吃死了。所以这一章,咱们先把底层的技术选型和平台评估聊透。
1.1 主流深度相机技术对比
目前市面上主流的深度相机,说白了就三种:ToF、结构光、双目。它们各有各的脾气,选错了后面全是坑。
1.1.1 ToF(飞行时间法)
ToF的原理很简单:发射光脉冲,测量反射回来的时间差。我习惯叫它「激光测距的升级版」。它的优点是速度快,能到30fps甚至更高,而且对光照不敏感——晚上也能用。
但有个问题:分辨率普遍不高。目前消费级的ToF传感器,比如英飞凌的IRS系列,分辨率也就QVGA级别。我在项目中遇到过用ToF做手势识别,手指稍微靠近一点,深度图就糊成一团。
核心参数:
- 工作距离:0.3m - 5m(典型)
- 分辨率:QVGA(320x240)为主
- 帧率:30fps - 60fps
- 精度:±1cm @ 1m
1.1.2 结构光
结构光技术,大家最熟悉的应该是Kinect v1。它投射已知的散斑图案,通过图案变形来反推深度。优点是近距离精度极高,能达到亚毫米级。我做过一个3D人脸识别项目,用的就是结构光——因为ToF在近距离的精度根本不够看。
但缺点也很明显:室外基本不能用。太阳光里的红外成分会直接把散斑淹没掉。另外,结构光对反光物体也不太友好,比如黑色塑料或者镜面。
我的经验:如果你做的是室内、近距离(<1m)的应用,结构光是最优解。但千万别想着拿到室外用,我曾经试过在下午三点阳光下测结构光,深度图直接全黑。
1.1.3 双目立体视觉
双目相机模拟人眼,通过两个摄像头视差来计算深度。它的好处是硬件成本低,两个普通摄像头就能搞定。而且室外也能用,不受主动光干扰。
但计算量很大——你需要做立体匹配,这玩意儿在嵌入式平台上跑起来挺吃力的。另外,它对纹理很敏感,纯白墙面或者光滑地面,双目基本就废了。
避坑指南:我曾经在RK3588上跑双目深度估计,用的SGBM算法,640x480分辨率下只能跑到8fps。后来换了轻量级神经网络才勉强到15fps。所以选双目之前,先算清楚你的算力够不够。
1.2 三种技术对比表
| 维度 | ToF | 结构光 | 双目 |
|---|---|---|---|
| 工作距离 | 0.3m - 5m | 0.1m - 1.5m | 0.5m - 10m+ |
| 精度 | 中等(±1cm) | 高(±0.1mm) | 低(随距离下降) |
| 帧率 | 高(30-60fps) | 中(15-30fps) | 中(取决于算法) |
| 室外可用性 | 一般 | 差 | 好 |
| 计算开销 | 低 | 低 | 高 |
| 典型代表 | Kinect v2, iPhone X | Kinect v1, Intel RealSense | ZED, 大疆双目 |
1.3 嵌入式平台性能评估
选好了相机,接下来就是平台。目前嵌入式深度相机部署的主流平台有三个:Jetson系列、RK3588、树莓派。我一个个说。
1.3.1 NVIDIA Jetson系列
Jetson是英伟达的嵌入式AI平台,从Jetson Nano到AGX Orin,跨度很大。我个人最常用的是Jetson Orin NX,16GB版本,跑深度神经网络非常舒服。它自带Tensor Cores,做卷积加速效果很明显。
但功耗是个问题。Orin NX满载能到25W,如果你做电池供电的产品,得掂量掂量。我有个项目用Jetson Nano做扫地机器人,7.5W的功耗已经让电池续航很紧张了。
Jetson系列选型建议:
- Jetson Nano:适合原型验证,功耗低(5-10W)
- Jetson Orin NX:适合量产,算力强(40 TOPS)
- Jetson AGX Orin:适合高负载,但功耗高(15-60W)
1.3.2 Rockchip RK3588
RK3588是瑞芯微的旗舰芯片,8核CPU + Mali G610 GPU + 6 TOPS NPU。说实话,它的NPU算力不如Jetson,但胜在性价比高。一块RK3588开发板才几百块,Jetson Orin NX要两千多。
我做过一个对比测试:同样跑MobileNetV3-SSD,RK3588的NPU能到30fps,Jetson Orin NX的GPU能到45fps。但RK3588的功耗只有8W左右,Jetson Orin NX要15W。所以如果你对功耗敏感,RK3588是个好选择。
小技巧:RK3588的NPU对INT8量化支持很好。我习惯先用PyTorch训练模型,然后转成RKNN格式。注意,有些算子NPU不支持,比如Group Norm,得手动替换成Layer Norm。
1.3.3 树莓派
树莓派4B,BCM2711芯片,1.5GHz四核A72,算力大概0.5 TOPS。说实话,跑深度相机有点吃力。我试过在树莓派上跑双目深度估计,320x240分辨率,OpenCV的BM算法,勉强到10fps。
但树莓派有个好处:生态好。各种传感器驱动、开源库一应俱全。如果你做原型验证或者教学演示,树莓派很合适。量产的话,我建议还是上RK3588或者Jetson。
避坑指南:树莓派的USB带宽有限。我曾经同时接一个深度相机和一个IMU,结果USB总线被占满,深度图丢帧严重。后来换了USB 3.0的树莓派5才解决。
1.4 接口与功耗分析
接口和功耗,这两个东西在选型时容易被忽略,但实际部署时全是坑。
1.4.1 接口类型
深度相机常见的接口有USB 3.0、MIPI CSI、GMSL。USB 3.0最通用,但延迟高,带宽有限(5Gbps)。MIPI CSI延迟低,但线缆短,一般不超过30cm。GMSL适合远距离传输,能到15米,但需要专用芯片。
我个人的习惯是:室内固定场景用USB 3.0,移动机器人用MIPI CSI,车载或者工业场景用GMSL。举个例子,我做过一个AGV小车项目,相机装在车头,主控在车尾,距离1.5米,USB线太长信号衰减,最后换了GMSL才稳定。
1.4.2 功耗预算
功耗这东西,你得算总账。相机本身功耗、平台功耗、散热功耗,加起来才是真实功耗。我列个典型数据:
| 组件 | 典型功耗 | 备注 |
|---|---|---|
| ToF相机(如VL53L5) | 0.5W | 低功耗,适合电池设备 |
| 结构光相机(如RealSense D435) | 2.5W | 含红外投射器 |
| 双目相机(如ZED 2) | 1.5W | 无主动光源 |
| Jetson Orin NX | 15-25W | 满载时接近25W |
| RK3588 | 6-10W | NPU满载约8W |
| 树莓派4B | 3-7W | USB外设会增加 |
嗯,这里要注意:功耗不是简单的加法。比如Jetson Orin NX + RealSense D435,理论上是25W + 2.5W = 27.5W,但实际因为电源转换效率,可能要30W以上。我建议留20%的余量。
1.5 知识体系结构图
下面这张图,我把本章的核心逻辑画出来了。你一看就明白:选型不是孤立的事,相机、平台、接口、功耗,四者互相制约。
1.6 本章小结
这一章我们聊了三种深度相机技术的特点,三个嵌入式平台的性能差异,以及接口和功耗的注意事项。说白了,选型没有银弹——你要根据应用场景、预算、功耗要求来权衡。
我个人建议:如果你是做室内近距离应用,结构光 + RK3588 性价比最高;如果是室外移动机器人,双目 + Jetson Orin NX 更靠谱;如果只是原型验证,树莓派 + 任何USB相机都行,但别指望量产。
下一章,我们会深入讲深度相机的驱动移植和图像采集优化。嗯,到时候我会分享一些驱动调试的实战经验,包括怎么解决USB带宽瓶颈和MIPI信号干扰问题。
公众号:蓝海资料掘金营,微信deep3321