1. 为什么D435i用久了必须做一次自校准
D435i这台深度相机,做机器人、做三维重建、做体积测量的朋友应该都不陌生。它出厂时是做过标定的,但用上几个月之后,很多人会发现一个很典型的现象:画面开始“发虚”,深度图上原本平整的墙面出现波浪纹,近距离测距误差从几毫米涨到一两厘米,点云配准也开始飘。这不是相机坏了,绝大多数情况是标定参数漂移了。
漂移的来源其实很朴素。D435i是双目结构光方案,左右两个红外成像模组加一个红外点阵投射器,靠三角测量算深度。相机摔过、长期在温差大的环境里工作、镜头表面有轻微污染、甚至长时间高温运行导致内部结构微小形变,都会让左右目之间的相对位置发生肉眼看不见的变化。出厂标定参数是写死在相机里的,一旦物理结构变了,参数就对不上了,深度自然算不准。
Intel在固件里内置了一套On-Chip Calibration(片上自校准)机制,就是专门解决这个问题的。它不需要你打印棋盘格、不需要摆标定板、不需要外部工具,相机自己对着一个目标就能重新估计并修正深度参数。而Intel RealSense Viewer是官方提供的图形化工具,把这套自校准流程做成了几个按钮的事。这也是为什么标题里说“保姆级”——因为整个流程确实可以做到零门槛。
这篇文章适合三类人:刚拿到D435i不知道怎么维护的新手、深度数据开始不准想自己修的老用户、以及做产品集成需要把校准流程固化下来的工程师。我会把原理、操作步骤、参数含义、踩坑经验全部讲透,让你看完就能自己动手,不用再返厂或者换新。
2. 自校准之前必须搞清楚的几个概念
2.1 On-Chip Calibration到底在算什么
很多人以为自校准是“重新标定整个相机”,其实不是。On-Chip Calibration主要修正的是深度模块的标定参数,具体来说是左右红外成像器之间的外参(旋转和平移)以及深度缩放相关的系数。它不修正RGB彩色相机的内参,也不修正RGB和深度之间的外参——那两块要用别的方法。
校准的数学本质是一个优化问题:相机对着一个已知几何特征的目标(通常是墙面或者专用靶标),采集多帧红外图像,通过最小化重投影误差来反推左右目的相对位姿修正量。Intel把这套优化跑在主机端,算完之后把新的参数写回相机固件。所以校准是持久化的,断电重启依然有效,不需要每次开机都做。
这里有个关键点:自校准依赖场景中要有足够的红外纹理。D435i的投射器会打出一片红外点阵,如果对着纯白墙、玻璃、镜面,红外图案反射不回来或者被镜面反射干扰,校准就会失败或者算出错误参数。这是新手最容易翻车的地方。
2.2 什么情况下该做,什么情况下别做
不是所有“画面模糊”都该做自校准。我整理了一张判断表,你先对号入座:
| 现象 | 是否适合自校准 | 说明 |
|---|---|---|
| 深度图有波浪纹、平面不平 | 适合 | 典型的标定漂移 |
| 近距离测距误差变大 | 适合 | 深度系数漂移 |
| 点云配准开始飘 | 适合 | 外参漂移 |
| 画面整体模糊、RGB也糊 | 不适合 | 大概率是镜头脏了或对焦问题 |
| 深度图大面积黑洞 | 不适合 | 可能是投射器故障或遮挡 |
| 刚摔过、外壳变形 | 谨慎 | 可能物理损坏,校准救不回来 |
| 刚买来第一次用 | 不需要 | 出厂标定是好的 |
注意:如果你的相机摔得很严重,或者红外投射器不亮了,自校准是救不了的,这种情况直接联系售后。自校准只能修“参数漂移”,修不了“硬件损坏”。
2.3 校准前必须满足的环境条件
这一步很多人跳过,然后抱怨“校准总是失败”。我踩过的坑告诉你,环境条件不满足,成功率直接掉一半。必须满足的条件:
- 目标表面要有红外可见的纹理。最理想的是带一点粗糙度的墙面,或者贴一张A4纸再在纸上随便画几笔。纯白墙、玻璃、金属反光面都不行。
- 距离控制在0.3米到1米之间。太近了视场覆盖不全,太远了红外点阵能量衰减,信噪比不够。我一般用0.5米左右。
- 光照要稳定。避免阳光直射,避免强红外源(比如其他深度相机、遥控器红外灯)在旁边。室内普通照明就够。
- 相机要固定死。校准过程中相机和目标都不能动,手持是绝对不行的,必须上三脚架或者固定在桌面上。
- 温度要稳定。刚开机别马上校准,让相机跑个5到10分钟热平衡,否则热漂移会干扰结果。
3. 手把手实操:RealSense Viewer自校准全流程
3.1 软件和固件准备
先去Intel官方渠道下载Intel RealSense SDK 2.0,Viewer是SDK自带的工具,Windows和Linux都有。装完之后别急着打开,先做两件事:
第一,升级固件。用Viewer连上相机后,右上角会显示当前固件版本。D435i建议用5.12.7.100以上的版本,早期固件里On-Chip Calibration有已知bug,校准完可能反而更差。升级固件在Viewer里直接有入口,跟着提示走就行,升级过程中千万别断电。
第二,确认SDK版本。Viewer的校准功能在不同SDK版本里位置略有差异,建议用2.50以上的版本。打开Viewer后,如果左侧设备面板里能看到“On-Chip Calibration”这一项,说明版本没问题。
3.2 连接相机并确认基础状态
把D435i用USB 3.0线接到电脑上,注意一定要用USB 3.0接口和原装线。USB 2.0带宽不够,深度流会掉帧,校准过程会不稳定。接上之后Viewer左侧会出现设备树,展开能看到Depth、Infrared、Color等模块。
先别急着点校准,先做一次“体检”:
- 打开Stereo Module的Infrared 1和Infrared 2两个流,确认左右目都能正常出图。
- 打开Depth流,看看深度图是否正常。如果深度图本身就有大面积异常,先解决那个问题。
- 观察红外图里能不能看到投射器打出的点阵。如果点阵很淡或者没有,说明投射器可能有问题,校准没意义。
这一步大概花两分钟,但能帮你排除掉一半的无效校准。
3.3 摆放目标与相机
把相机固定在三脚架上,镜头正对目标表面,距离0.5米左右。目标表面我实测下来最稳的是贴了一张A4纸的纸箱,纸上用铅笔随便画些交叉线。为什么用纸?因为纸对红外的反射特性比较均匀,而且铅笔线条能提供额外的纹理特征,帮助优化算法收敛。
相机角度尽量垂直于目标表面,偏角不要超过15度。偏太多会导致视场里深度分布不均,校准精度下降。摆好之后,用手轻轻碰一下相机确认它不会晃,然后等30秒让画面稳定。
3.4 执行On-Chip Calibration
在Viewer左侧设备面板找到Stereo Module,展开后能看到On-Chip Calibration选项。点开之后界面里会有几个关键参数:
- Target:选择校准目标类型,一般选“Wall”或者“Custom”。用纸箱就选Custom。
- Speed:校准速度,有Very Fast、Fast、Medium、Slow几档。速度越慢采集帧数越多,精度越高。我一般用Medium,平衡时间和精度。
- Data Collection:点击开始采集。
点击开始后,Viewer会连续采集若干帧红外图像,界面上会显示采集进度。这个过程大概持续10到30秒,取决于你选的Speed档位。采集期间相机和目标都不能动,手也别碰桌子。
采集完成后,Viewer会自动计算新的标定参数,并显示一个校准结果。这里重点看两个指标:
- Health Check:显示校准前后的误差对比。如果校准后误差明显下降,说明成功。
- New vs Old Calibration:显示新旧参数的差异量。差异太大(比如旋转超过1度)要警惕,可能是采集过程出了问题。
确认结果没问题后,点击Apply或者Write to Device,把新参数写回相机。写完之后建议断电重启一次,让参数彻底生效。
3.5 校准后的验证方法
写完参数别急着收工,一定要验证。我的验证流程是这样的:
- 重启相机,重新打开深度流。
- 对着一个平整的墙面(距离1米左右),看深度图的平整度。校准前如果有波浪纹,校准后应该明显改善。
- 用Viewer里的Measure工具,在深度图上量几个已知距离的点,对比实际卷尺测量的值。误差应该在1%以内。
- 如果有条件,跑一遍点云,看平面拟合的残差。
如果验证下来还是不行,别慌,可以重复校准2到3次。有时候第一次采集受噪声影响,多跑几次取最好的一次结果。Viewer里可以保存每次的校准参数,方便对比。
4. 参数详解与进阶技巧
4.1 Speed档位到底怎么选
很多人不知道Speed档位的区别,随便选一个就跑。其实这个参数直接决定采集帧数和优化迭代次数。我实测下来的经验:
| 档位 | 采集帧数(约) | 耗时 | 适用场景 |
|---|---|---|---|
| Very Fast | 10帧左右 | 5秒 | 快速验证,精度一般 |
| Fast | 20帧左右 | 10秒 | 日常维护 |
| Medium | 40帧左右 | 20秒 | 推荐,精度和速度平衡 |
| Slow | 80帧以上 | 40秒+ | 精度要求高的场景 |
提示:如果你发现Medium档校准后误差还是大,别直接上Slow,先检查环境和目标。环境不行的话,Slow也救不了。
4.2 校准失败的五种典型原因
我整理了一份速查表,按出现频率排序:
| 失败现象 | 最可能原因 | 解决办法 |
|---|---|---|
| 采集进度卡住不动 | 目标无红外纹理 | 换带纹理的表面 |
| 校准后误差反而变大 | 采集时相机晃动 | 加固三脚架,重来 |
| 提示“Not enough features” | 距离太远或太近 | 调整到0.5米左右 |
| 提示“Rectification failed” | 左右目图像质量差 | 检查镜头是否脏污 |
| 写入参数失败 | 固件版本过低 | 升级固件后重试 |
4.3 一个容易被忽略的细节:热平衡
D435i内部有IMU和多个传感器,工作时会发热。刚开机时相机内部温度和环境温度不一致,结构会有微小热胀冷缩,这时候做校准,等相机热起来之后参数又漂了。我的做法是:开机后先让相机跑10分钟深度流,等外壳摸上去温度稳定了再校准。这个细节官方文档里提得不多,但实测对校准稳定性影响很大。
4.4 校准参数的备份与恢复
Viewer里可以把当前标定参数导出成文件。我强烈建议每次校准成功后都导出一份备份,命名带上日期。万一后面参数又漂了,或者校准失败把参数搞坏了,可以直接导入备份恢复。这个习惯帮我省过好几次事。
导出路径在Stereo Module的设置里,找“Save Calibration”之类的选项。恢复的时候用“Load Calibration”导入即可。注意导入的参数要和当前固件版本兼容,跨大版本固件可能不通用。
5. 常见问题排查实录
5.1 校准后深度图出现新的异常
有朋友反馈校准完深度图边缘出现奇怪的条纹。这种情况大概率是校准参数写入了但没重启,或者新旧参数混合导致。解决办法:断电重启相机,如果还不行,导入校准前的备份,重新校准一次。
5.2 校准结果每次都不一样
这是正常的,因为采集过程有随机噪声。但如果差异特别大(比如旋转量每次差0.5度以上),说明环境不稳定。检查是不是有振动源、气流(比如空调出风口对着吹)、或者红外干扰源。
5.3 能不能批量校准多台相机
可以,但要注意每台相机的校准参数是独立的,不能互相导入。如果你有产线需求,Intel提供了命令行工具,可以脚本化调用校准流程。不过命令行工具的参数和Viewer不完全一样,需要单独调试。
5.4 校准对RGB相机有影响吗
没有。On-Chip Calibration只动深度模块的参数,RGB的内参和外参都不变。如果你发现RGB也糊了,那是镜头对焦或者脏污的问题,跟自校准无关。
5.5 多久做一次校准比较合适
这个没有标准答案,取决于使用强度和环境。我的经验是:高频使用(每天8小时以上)建议每月一次,普通使用每季度一次,环境温差大的话适当加密。另外,每次相机摔过或者经历大温差运输后,都应该做一次。
6. 把校准流程固化下来的思路
如果你是把D435i集成到产品里的开发者,手动点Viewer显然不现实。这时候可以考虑用SDK提供的API把校准流程封装成自动化脚本。核心思路是:调用rs2::device的run_on_chip_calibration接口,传入目标类型、速度和超时时间,拿到返回的健康检查结果,判断是否写入。
不过自动化校准对环境的要求更高,因为没有人盯着画面判断目标是否合适。我的建议是在自动化流程里加一个前置检查:先采集几帧红外图,用简单的方差计算判断纹理是否足够,不够就报警让人工介入。这样能避免大量无效校准。
另外,校准参数写回后建议做一次自动验证,比如对着固定距离的平面测几个点,误差超阈值就标记这台相机需要人工复检。这套流程我在一个小批量产线场景里跑过,能把校准成功率从七成提到九成以上。
最后分享一个我自己的小习惯:每次校准完,我会在相机外壳上贴一张小标签,写上校准日期和当时的环境温度。下次再出问题的时候,看一眼标签就能判断是不是该重新校准了。这个土办法比任何日志都直观。