D435i 用久了画面开始发虚、深度图边缘毛刺变多、近距离测距飘得厉害,这类问题十有八九不是摄像头坏了,而是出厂标定参数随着温度变化、轻微磕碰、长期插拔产生了漂移。很多人第一反应是去跑一整套复杂的标定流程,摆棋盘格、调光源、写脚本,折腾大半天还不一定收敛。其实 Intel 官方在 RealSense Viewer 里内置了一个 On-Chip Calibration(片上自校准)功能,专门用来处理这种"轻度漂移",几分钟就能跑完,不需要任何外部标定板。这篇就把 D435i 在 RealSense Viewer 里做自校准的完整流程、背后的原理、以及我踩过的那些坑,一次性讲清楚,不管你是刚拿到相机的新手,还是已经用了一段时间发现精度下降的老用户,都能直接照着做。
1. 先搞清楚 D435i 为什么会"越用越糊"
1.1 深度相机的精度不是一成不变的
D435i 属于主动双目结构光方案,左右两个红外成像传感器加一个红外点阵投射器,通过视差计算深度。这套系统在出厂时会做一次严格的标定,把左右目的内参、外参、畸变系数以及深度缩放系数都写进设备内部的校准表里。问题在于,这个校准表是"出厂那一刻"的状态,而实际使用环境跟出厂环境往往差很多。
温度是最主要的变量。D435i 工作时红外投射器和传感器都会发热,机身温度从室温升到四十多度是常态,而镜头座、传感器支架这些结构件在热胀冷缩下会产生微米级的位移。别小看这几微米,双目基线只有 50mm,视差计算对基线变化极其敏感,几微米的位移就足以让深度值产生明显偏差。我实测过一台连续工作两小时的 D435i,深度读数在 1 米处漂移了将近 8mm,这个量级对于做精密测量或者机械臂抓取来说已经不能接受了。
除了温度,运输途中的震动、安装时的轻微挤压、甚至反复插拔 USB-C 接口带来的应力,都可能让传感器相对位置发生微小改变。这些改变不会让相机彻底罢工,但会让精度悄悄下降,表现出来就是"画面模糊""边缘毛刺""测距不准"。
1.2 什么时候该做自校准,什么时候不该做
这里必须先划清一个边界:On-Chip Calibration 不是万能的,它只能修正"小范围漂移",不能替代完整的工厂级标定。判断标准其实很简单,我总结了一个经验表格:
| 现象 | 适合自校准 | 需要完整标定或返修 |
|---|---|---|
| 深度图整体轻微发虚,边缘毛刺增多 | 是 | 否 |
| 1 米处误差在 10mm 以内 | 是 | 否 |
| 深度图出现大面积空洞、条纹 | 否 | 是 |
| 误差超过 20mm 或某个区域完全错乱 | 否 | 是 |
| 红外投射器不亮、图像全黑 | 否 | 是(硬件故障) |
| 刚拆封新机 | 否(出厂已校准) | 否 |
判断方法也很直接:把相机对着平整墙面,距离 1 米左右,在 RealSense Viewer 里看深度图的平整度和数值稳定性。如果只是轻微起伏、边缘不够锐利,自校准基本能救回来;如果深度图已经"花"得不成样子,那多半是硬件或者标定表严重损坏,自校准反而可能把参数改得更糟。
提示:自校准会覆盖设备内部的校准表,虽然可以恢复出厂设置,但操作前最好确认相机确实处于"轻度漂移"状态,不要盲目跑。
1.3 On-Chip Calibration 到底在算什么
很多人以为自校准是"重新标定",其实它的原理要巧妙得多。D435i 的深度计算依赖左右目之间的视差,而自校准的核心思路是:利用红外投射器打出的点阵图案,让左右目同时观测同一个已知图案,通过比对两幅图像中特征点的位置差异,反推出当前的视差偏移量,然后把这个偏移量补偿到深度计算里。
具体来说,它调整的主要是深度缩放(Depth Scale)和外参中的旋转/平移微调,而不是把整套内参推倒重来。这也是为什么它快——不需要用户摆标定板、不需要采集几十张图,设备自己就能完成观测和计算。整个过程在设备端(On-Chip)完成,所以叫"片上校准"。
理解这一点很重要,因为它决定了自校准的适用边界:它修正的是"系统性小偏移",对于镜头畸变变化、传感器损坏这类问题无能为力。你把原理搞明白了,就不会在错误的问题上浪费时间。
2. 动手前的环境准备与版本确认
2.1 RealSense Viewer 和固件的版本匹配
这一步看起来琐碎,但它是整个流程里最容易翻车的地方。On-Chip Calibration 对固件版本和 SDK 版本都有要求,版本不匹配会出现"校准按钮灰色""跑一半报错""校准后精度反而更差"等各种诡异现象。
我建议的版本组合是:RealSense Viewer 用 2.50 以上的版本,D435i 固件用 5.12.7 以上的版本。这两个版本之后的 On-Chip Calibration 逻辑比较稳定,早期版本存在校准后参数不生效的 bug。查看固件版本的方法是在 Viewer 里连上相机,左侧设备信息栏会显示 Firmware Version,如果低于 5.12.7,先用 RealSense Viewer 自带的固件更新功能升级。
升级固件时有个坑要注意:必须保证 USB 连接稳定,升级过程中绝对不能拔线。我见过有人升级到一半笔记本休眠,结果相机变砖,只能走恢复流程。升级前把电源管理里的 USB 选择性暂停关掉,笔记本插上电源,能省掉很多麻烦。
2.2 USB 连接质量直接决定校准成败
D435i 是 USB 3.0 设备,满带宽下数据量很大。如果用了劣质线材或者接在 USB Hub 上,校准过程中可能出现丢帧,导致校准结果不可靠。我的硬性要求是:用相机原装线,直插主板后置 USB 3.0 接口,不要用前面板、不要用 Hub、不要用延长线。
怎么确认连接质量?在 RealSense Viewer 里看设备信息,USB Type 应该显示 3.2 或 3.1,如果显示 2.1,说明跑在 USB 2.0 模式下,带宽不够,校准大概率会失败。另外可以看 "USB Bandwidth" 相关提示,如果频繁报带宽不足,先解决连接问题再谈校准。
2.3 校准环境的选择
On-Chip Calibration 对场景有要求,但不是要你搭标定实验室。核心要求是:有纹理、有深度层次、光照均匀。因为校准需要红外投射器的点阵在场景中形成可识别的特征,如果对着白墙或者纯色平面,特征太少,校准会失败或者精度很差。
我通常的做法是:把相机对着一个杂物较多的桌面,或者一面有挂画、有书架的墙,距离 0.5 到 1.5 米之间,保证画面里既有近处物体也有远处背景。光照方面,避免强阳光直射(会淹没红外图案),也避免全黑环境(虽然红外不依赖可见光,但太暗会影响特征匹配的稳定性),普通室内照明就够了。
注意:校准过程中相机不能移动,也不能有物体在画面里大幅移动。找个稳定的地方放好,或者用三脚架固定。
3. 在 RealSense Viewer 里跑通自校准的完整步骤
3.1 连接设备并进入校准入口
打开 RealSense Viewer,插上 D435i,左侧会出现设备树。展开后能看到 Stereo Module、RGB Camera、Motion Module 几个部分。On-Chip Calibration 的入口在 Stereo Module 下面,具体位置是展开 Stereo Module 后找到 "On-Chip Calibration" 这一项,点击它会弹出一个面板。
这里有个细节:如果 "On-Chip Calibration" 是灰色的点不动,通常是三个原因——固件版本太低、相机没被正确识别为 D435i、或者当前有其他程序占用了相机。先关掉所有可能占用相机的程序(包括之前没退干净的 Python 脚本),再重新插拔一次。
3.2 校准参数的设置逻辑
弹出的校准面板里有几个关键参数,很多人直接点 "Calibrate" 就跑了,其实参数设置直接影响结果。我把每个参数的含义和推荐值列一下:
| 参数 | 含义 | 推荐设置 |
|---|---|---|
| Health Check | 先做健康检查,评估当前标定状态 | 建议先跑 |
| Calibrate | 执行校准 | 健康检查通过后再跑 |
| Target | 校准目标类型 | 默认即可 |
| Speed | 校准速度档位 | 先用 Default,失败再调 |
| Data Collection | 采集帧数 | 默认,环境差可适当增加 |
Health Check 一定要先跑。它会评估当前标定表的健康度,给出一个分数。如果分数已经很好(比如 0.9 以上),说明相机状态不错,没必要校准;如果分数偏低(0.5 以下),再考虑执行 Calibrate。这个顺序能帮你避免"没事找事"式校准。
Speed 档位我一般先用 Default。如果 Default 跑失败,可以试 Faster 或 Slow。Faster 采集帧数少、速度快,但对环境要求高;Slow 采集帧数多、更稳,但耗时长。环境好的话 Default 基本够用。
3.3 执行校准与结果判读
点下 Calibrate 之后,相机会自动采集一段时间的图像,界面上会有进度提示。整个过程通常几十秒到两分钟,取决于 Speed 档位和环境复杂度。这期间千万别动相机、别切窗口、别让画面里有大物体移动。
校准完成后,Viewer 会给出新的健康分数和校准结果。判断标准是:新分数应该比旧分数高。如果新分数反而更低,说明这次校准没成功,可能是环境不满足要求,或者相机本身状态不适合自校准。这时候可以点 "Restore Factory Calibration" 恢复出厂标定,重新评估。
我遇到过一种情况:校准后分数提高了,但实际测距反而更飘。后来发现是校准环境里有个反光物体,导致特征匹配出错。所以校准完一定要做实际验证,不能只看分数。
3.4 校准后的实际验证方法
分数只是参考,真正靠谱的是实测。我的验证流程是:把相机对着平整墙面,距离 1 米,在 Viewer 里打开深度图,看三个指标——平整度、边缘锐度、数值稳定性。
平整度看深度图颜色是否均匀,有没有明显的波浪或斑块;边缘锐度看物体轮廓处深度过渡是否干脆;数值稳定性看同一位置的深度读数在几秒内波动多大。校准成功的标志是:平整度改善、边缘毛刺减少、读数波动从原来的几毫米降到 1mm 以内。
如果验证不通过,别急着反复校准。先回到环境检查,确认场景纹理、光照、稳定性都满足要求,再跑一次。连续校准超过三次还没改善,基本可以判断问题不在标定漂移,而在硬件或更严重的标定损坏。
4. 那些官方文档不会告诉你的坑
4.1 校准后参数不生效的排查
这是最常见的问题:明明校准成功了,分数也提高了,但重新打开程序发现精度还是老样子。原因通常是校准结果没有正确写入设备,或者被其他程序覆盖了。
排查顺序是这样的:先在 Viewer 里确认校准后分数确实变了,然后拔掉相机重新插上,再看分数是否保持。如果重新插拔后分数回到旧值,说明写入失败,多半是 USB 连接不稳定或者固件 bug。这时候换线、换接口、升级固件,三管齐下。
还有一种情况是多个程序同时访问相机。比如你之前跑过一个 Python 脚本没退干净,它在后台持有相机句柄,校准结果写不进去。用任务管理器确认没有残留进程,再操作。
4.2 温度对校准结果的影响
前面说过温度会导致漂移,但这里有个反直觉的点:校准时的温度会影响校准结果。如果你在相机刚上电、还没热起来的时候校准,校准出来的参数是针对"冷态"的,等相机热起来又会漂。
我的做法是:让相机先通电预热 10 到 15 分钟,等机身温度稳定后再校准。这样校准参数是针对工作温度的,实际使用时更准。如果你知道自己的应用场景是长时间连续工作,预热这一步不能省。
4.3 别把自校准当成万能药
我见过有人每次开机都跑一遍自校准,这完全是误区。自校准是"修正漂移",不是"日常保养"。频繁校准反而可能因为每次环境不同,让参数在几个状态之间来回跳,精度越来越差。
合理的频率是:新机不用校准;正常使用每几个月检查一次健康分数,分数明显下降再校准;经历过运输、磕碰、大幅温度变化后校准一次。把它当成"体检后的治疗",而不是"每天吃的保健品"。
4.4 校准失败时的恢复路径
万一校准把参数改坏了,别慌,Viewer 里有 "Restore Factory Calibration" 选项,可以把设备恢复到出厂标定。这个操作是安全的,出厂标定表一直存在设备里,不会被覆盖。
恢复之后,如果精度还是不行,那就要考虑是不是需要做完整的动态标定(Dynamic Calibration),那需要打印标定靶标、用专门的工具,流程复杂得多。但绝大多数"画面模糊"的问题,On-Chip Calibration 加上正确的环境,都能解决。
5. 从自校准延伸到日常精度维护
5.1 建立自己的精度检查习惯
与其等画面糊了再救,不如定期检查。我给自己定的规矩是:每周花两分钟,把相机对着固定距离的墙面,看深度读数是否在预期范围内。这个习惯帮我提前发现过两次漂移,避免了在项目关键节点上翻车。
检查方法很简单,在 Viewer 里把鼠标悬停在深度图上,会显示该点深度值。对着 1 米处的墙面,读数应该在 1000mm 上下小幅波动。如果偏差超过 10mm,就该考虑校准了。
5.2 安装和使用中的减震细节
很多漂移其实是"人为"的。相机固定在机械臂或者移动平台上时,如果刚性不够,运行中的震动会持续给传感器施加应力。我的经验是:固定相机时用带缓冲的支架,螺丝不要拧太死,线缆要留出应力释放的余量,不要让线缆的重量直接拽着接口。
这些细节看起来跟"校准"没关系,但它们决定了你校准完能撑多久。一个震动控制得好的安装,校准一次能管很久;一个震动大的安装,校准完没几天又漂了。
5.3 什么情况下该考虑换相机
说句实在话,D435i 是消费级产品,有它的寿命。如果自校准反复失败、恢复出厂设置也没用、深度图出现固定模式的错误,那可能是传感器老化或者硬件损伤。这种情况下继续折腾校准是浪费时间,该换就换。判断硬件问题的简单方法是:看红外图像本身是否正常,如果红外图就有坏点、条纹,那跟标定无关,是硬件问题。
我在实际项目里的体会是,D435i 在良好使用条件下,一两年内精度衰减很小,自校准基本能覆盖。真正让它"短命"的往往是恶劣的安装环境、频繁的插拔、以及不稳定的供电。把使用习惯养好,比任何校准技巧都管用。
最后分享一个我常用的小技巧:校准前后各拍一张深度图存下来,用同一位置、同一距离对比,比单纯看分数直观得多。这个对比图也是排查问题时最有说服力的证据,能帮你快速判断是校准没生效,还是问题根本不在标定上。