CV 计算机视觉检索 / RAG工具

机器人视觉一定要死磕工业深度相机吗?---从 D435i 的曝光问题谈 iPhone + RealSense 的一种混合视觉思路

Stevlen.Fu Hongjin2026-09-15 21:06
机器人视觉一定要死磕工业深度相机吗?---从 D435i 的曝光问题谈 iPhone + RealSense 的一种混合视觉思路

最近在做移动机器人视觉方案时,我遇到了一个看似普通、实际上很工程的问题:

光照。

具体一点,是 Intel RealSense D435i 在机器人从室内走向室外、经过树荫、阳光、反光地面时出现的曝光变化问题。

一开始很自然地会把问题理解成:

Auto Exposure 参数没有调好。

但继续查资料以后,会发现问题没有这么简单。

RealSense 官方明确指出,D400 系列的深度质量高度依赖左右双目图像本身的曝光质量,过曝和欠曝都会直接影响 stereo matching。其自动曝光默认根据 ROI 内像素平均强度工作,如果太阳或者太阳反射进入画面,AE 可能为了压制高亮区域而把整个场景曝光降低。官方甚至专门建议自动驾驶机器人把 AE ROI 放到图像下半部分。

更极端的情况下,曝光甚至已经没有继续下降的空间。RealSense 的光学滤镜技术文档提到,在约 100,000 lux 的强烈光照条件下,D435 即使处于最低曝光附近也可能发生传感器饱和;此时左右 IR 图像中的区域会失去纹理,最终表现为深度图上的空洞。

社区里也能找到更加直观的案例:D435 在阳光下自动把 exposure 和 gain 降到最低之后,重新回到较暗环境时,曾出现 AE 无法正常恢复的现象。

那么这时候,有没有一个软硬件协同性巨无敌,然后在视频领域流畅度非常猛,然后其产品非常常见乃至于随便都可以取得的呢?


一个有点“不机器人”的想法:为什么不用手机?

这里就引出了我之前一直在考虑的一个方案:

把一台支持 LiDAR 的 iPhone 直接作为机器人视觉前端。

这里的关键不是:

用 iPhone 替代 D435i。

而是:

让 iPhone 做它擅长的事情,让 D435i 做它擅长的事情。

这个区别很重要。

在消费电子领域,手机摄像头每天面对的恰恰就是机器人现在遇到的这些场景:

  • 室内走向室外;
  • 窗口逆光;
  • 强烈阳光;
  • 阴影;
  • 夜间;
  • 反光;
  • 高频亮度变化。

Apple 在 AVFoundation 中提供连续自动曝光、曝光补偿、曝光兴趣区域以及手动 exposure duration / ISO 控制;其 Camera API 还提供 HDR/EDR 和 tone mapping 等能力。

ARKit 又在更高一层直接提供了 lightEstimate。其中的 ambientIntensity 会根据摄像头内部曝光补偿估算场景光照变化。

也就是说,对于机器人来说,iPhone 不仅可以输出一张 RGB 图像。

它实际上可以变成一个:

Visual Perception Front-end。

你好兄弟,有的,有这样硬件不算猛,但是其软硬件协同这一块无人能及的公司口牙!


我原来设计的 iPhone 数据,并不是“1 FPS 摄像头”

之前考虑这个方案的时候,有一个很容易产生误解的数字:

1 FPS。

我的设想并不是让机器人每秒只看一次。

真正的数据链大致是:

数据 计划频率
机器人自身控制 100–500+ Hz
iPhone Pose / VIO 30–60 Hz
Depth / Local Terrain 15–30 Hz
Terrain Classification 10–20 Hz
Trash Detection 5–15 Hz
发给 Ubuntu 的完整 RGB Keyframe 约 1 FPS + Event Trigger

也就是说:

1 FPS 只是完整 RGB 图像传输频率。

iPhone 自己仍然在持续感知。

我们真正希望发给 Ubuntu 的其实是:

Pose / Odometry

Depth / Local Terrain

Terrain Type

Slope

Roughness

Traversability

Preferred Foothold

Obstacle XYZ

Trash XYZ

Confidence

RGB Keyframe

而不是:

30 FPS RGB
+
30 FPS Depth
+
全部原始 IMU
+
全部中间结果

这种设计的出发点很简单:

尽量在传感器端把“像素”转换成“信息”。


为什么 iPhone 在这里突然变得有意思?

ARKit 本身就已经把 Camera + IMU 组合成了 Visual-Inertial Odometry。

Apple 对 World Tracking 的定义非常明确:它通过视觉惯性里程计,将运动传感器数据和摄像头视觉信息结合起来,对设备的 6DoF 位姿进行跟踪。

对于支持 LiDAR 的设备,ARKit 还可以直接提供:

sceneDepth

以及:

smoothedSceneDepth

后者会在时间维度上对深度数据进行平滑,同时携带深度置信度信息。

因此,一个 iPhone 实际上可以同时提供:

RGB
│
├── Camera ISP / Exposure
│
├── HDR / Tone Mapping
│
└── Semantic Perception
     
LiDAR
│
└── Depth + Confidence

IMU
│
└── VIO / Pose

Camera
│
└── Light Estimate

这和一颗传统机器人深度相机的设计哲学并不一样。


那是不是意味着 iPhone 比 D435i 强?

不是。

实际上我认为这恰恰是一个很容易走向错误结论的地方。

D435i 的价值依然非常明显。

它是一颗为机器视觉设计的 stereo depth camera。

例如 D435 的深度双目使用 global shutter,官方推荐的深度工作分辨率是 848×480,并且 librealsense 对 exposure、gain、ROI、depth preset、filter、HDR 等参数开放了相当多的底层控制。

而 iPhone 的方向恰恰相反。

Apple 帮开发者做掉了大量底层工作,但是与此同时:

很多底层过程也被封装起来了。

于是二者形成了一种很有意思的对比:


D435i iPhone
设计目标 Robot / Machine Vision Consumer Vision / AR
RGB ISP 相对基础 高度集成
强弱光处理 需要工程调参 系统高度参与
Depth Stereo LiDAR / ARKit Depth
Depth 底层控制 强 较弱
VIO 需要自己构建 ARKit 已提供
IMU 融合 自己完成 ARKit 内建
Light Estimate 无直接高级接口 ARKit 提供
Semantic 外部模型 可直接运行端侧模型
参数透明度 高 低
系统开放程度 高 相对封闭

所以,与其讨论:

iPhone VS D435i,谁更强?

我觉得可能更有价值的问题是:

管他这的那的,你就说能不能用吧


一个可能更合理的系统

我目前更倾向于下面这种结构:

              ┌───────────────┐
              │    iPhone     │
              │               │
              │ RGB + LiDAR   │
              │ IMU + ARKit   │
              └───────┬───────┘
                      │
        ┌─────────────┼─────────────┐
        ↓             ↓             ↓
      VIO          Semantic      Lighting
     Pose           Terrain        State
        │             │             │
        │        Trash / Stairs     │
        │             │             │
        └──────┬──────┴──────┬──────┘
               ↓             ↓
          Structured      RGB Keyframe
             Data            1 FPS
               │
               ↓
           Ubuntu / ROS2
               ↑
               │
        D435i Depth Stream
               ↑
               │
          ┌────┴─────┐
          │   D435i  │
          │  Stereo  │
          └──────────┘

这里 D435i 不再承担:

“整个机器人必须依靠我的 RGB 看懂世界。”

它更像一个:

专用几何传感器。

而 iPhone 则负责:

视觉理解 + 光照适应 + VIO + 较高层感知。


甚至可以再往前一步:让 iPhone 帮 D435i 判断“现在是什么光”

这是我觉得最值得做实验的部分。

ARKit 已经能给出 ambientIntensity。

AVFoundation 本身又可以读取和控制 exposure。

那么机器人完全可以建立一个:

Lighting State Estimator

例如:

NORMAL

INDOOR_DARK

OUTDOOR

STRONG_SUNLIGHT

BACKLIGHT

SUN_SHADE_TRANSITION

REFLECTIVE_SURFACE

然后根据状态动态改变 D435i。

例如:

iPhone
检测到亮度快速上升
      │
      ↓
SUNLIGHT TRANSITION
      │
      ↓
Ubuntu
      │
      ├─ D435i AE ROI → Ground
      │
      ├─ Exposure limit ↓
      │
      └─ Gain limit ↓

而当出现:

Bright + Dark

同时存在时:

D435i → HDR Depth

RealSense 本身已经支持 stereo HDR,也就是交替使用不同 exposure/gain 的帧来扩大可利用动态范围。

这样一来,iPhone 就不是单纯的另一个摄像头。

它实际上变成了:

D435i 的环境状态观察器。


为什么这个思路可能特别适合慢速机器人?

这里还有一个非常重要的任务背景。

我的目标并不是:

机器人 5 m/s 高速奔跑

而更接近:

沿预先规定的路线行走
        ↓
普通地面
        ↓
楼梯
        ↓
不平路面
        ↓
鹅卵石
        ↓
垃圾 / 障碍物

而且:

不追求完成时间,只要求稳定完成。

这会彻底改变视觉系统的设计逻辑。

高速机器人必须极端关注:

Latency
FPS
Synchronization

但是慢速任务可以接受:

发现复杂场景
      ↓
减速
      ↓
获取更多感知
      ↓
确认 terrain
      ↓
切换 locomotion policy
      ↓
通过

这实际上允许机器人主动改变自己的“时间预算”。


D435i 曝光问题反而揭示了一个更大的问题

RealSense 官方给出的 D435 典型曝光数据其实很有意思。

从 100,000 lux 的阳光,到只有约 1 lux 的极暗环境,最佳曝光时间跨度可以从极短曝光一路增长到约几十毫秒量级。

这说明:

Camera
不是一个恒定质量的数据源。

很多机器人算法默认:

Image_t
Image_t+1
Image_t+2

质量大致相同

现实却可能是:

Frame 1
Excellent

Frame 2
Excellent

机器人走过门口

Frame 3
Overexposed

Frame 4
Dark

Frame 5
AE adjusting

Frame 6
Normal

这时候再好的下游:

YOLO
Segmentation
VLM
SLAM
Terrain Network

都只能处理已经受到破坏的输入。

所以也许机器人视觉系统真正缺少的不是:

更强的 perception model。

而是一层:

Perception Quality Manager

它实时回答:

我现在看到的东西靠谱吗?

RGB 是否过曝?

Depth valid ratio 是多少?

IR 有没有 saturation?

当前 lighting state 是什么?

VIO confidence 是否下降?

不同传感器现在谁更可信?

最终可能不是 Sensor Fusion,而是 Confidence Fusion

这也是我目前最感兴趣的一点。

传统 Sensor Fusion 经常写成:

Camera + IMU + Depth
        ↓
      Fusion

但真正复杂环境中的系统也许应该是:

iPhone RGB
confidence = 0.95

iPhone Depth
confidence = 0.72

D435i Depth
confidence = 0.31

VIO
confidence = 0.93

Terrain Model
confidence = 0.88

然后:

             Perception Manager
                    │
      ┌─────────────┼──────────────┐
      ↓             ↓              ↓
    Geometry      Semantic        Pose
      │             │              │
      └─────────────┴──────────────┘
                    ↓
                 Planner

例如强烈阳光导致 D435i stereo saturation:

D435i confidence ↓

那就暂时提高:

iPhone LiDAR
+
Temporal Terrain Estimation

的权重。

进入室内之后:

D435i confidence ↑

再重新增加 D435i depth 权重。

这比永远相信某一个固定传感器,也许更接近真正鲁棒的 embodied perception。


但这个方案还有很多坑

这篇文章只能算抛砖引玉,因为真正实现以后很可能马上遇到几个问题。

第一是同步。

iPhone 和 D435i 是两个完全独立的时钟系统。

如果机器人运动明显:

iPhone(t)

D435i(t + Δt)

可能对应完全不同的空间状态。

因此必须认真处理:

timestamp

extrinsic calibration

time synchronization

pose interpolation

第二是 Apple 的封装。

ARKit 给我们的数据非常好用,但并不意味着我们能够访问所有底层参数。

例如 smoothedSceneDepth 本身就是经过时间平滑的数据。

对于 AR,这是优点。

对于高速机器人:

它可能意味着额外的 temporal behavior。

必须实际测试,而不能直接认为“更平滑 = 更好”。

第三是:

手机不是工业传感器。

散热、持续运行、供电、接口稳定性、系统调度、iOS 生命周期,全部需要验证。

所以这个方案目前绝对不能说:

iPhone 可以替代 D435i。

更准确的表达应该是:

iPhone 可能是一个被机器人领域低估的高集成视觉协处理器。


我下一步更想做的实验

与其继续理论讨论,我觉得最简单的方法就是做一条测试路线:

Indoor
  ↓
Dark Corridor
  ↓
Glass Door
  ↓
Outdoor Sunlight
  ↓
Shadow
  ↓
Direct Sun
  ↓
Reflective Floor
  ↓
Stairs
  ↓
Cobblestone

同时记录:

iPhone RGB

iPhone exposure / ISO

ARKit ambientIntensity

ARKit Pose

iPhone sceneDepth

iPhone Depth Confidence

D435i RGB

D435i Left IR

D435i Right IR

D435i Exposure

D435i Gain

D435i Depth

然后真正比较几个指标:

RGB overexposure ratio

RGB underexposure ratio

Depth valid pixel ratio

Depth temporal variance

Exposure convergence time

VIO tracking state

Terrain classification confidence

Obstacle detection confidence

尤其测试:

室内 → 阳光

和:

阳光 → 阴影

两个瞬间。

因为真正的问题可能根本不是:

静态状态谁的画质更好。

而是:

谁能更平稳地穿过状态变化。


最后

D435i 依然是一颗非常好的机器人深度相机。

iPhone 也绝对不是一颗工业机器人传感器。

但这两个设备恰好代表了两种完全不同的发展路线:

D435i

Sensor
 ↓
Raw Data
 ↓
Engineer
 ↓
Algorithm

以及:

iPhone

Sensor
 ↓
ISP
 ↓
Sensor Fusion
 ↓
OS Framework
 ↓
Structured Perception

机器人领域过去更习惯第一种。

但随着端侧算力、手机 ISP、LiDAR、VIO 和端侧 AI 越来越成熟,也许未来值得重新思考一个问题:

机器人究竟需要的是更多“原始传感器”,还是更好的“感知节点”?

至少对于一个并不追求高速、目标只是稳定走完复杂路线的机器人来说,我觉得:

iPhone + D435i 并不是一个特别荒唐的组合。

甚至反过来讲——

D435i 在强弱光切换中暴露出来的问题,也许恰好给了我们一个机会,去重新思考机器人视觉系统应该怎么分工。

这目前只是一个工程假设。

下一步最有价值的事情,不是继续争论:

“手机能不能做机器人视觉?”

而是把 iPhone 和 D435i 并排装在机器人上,

走一次。

把所有数据记录下来。

然后让数据回答这个问题。

点赞收藏
// 评论0
0 / 500
还没有评论,快来抢沙发