ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

30分钟打通 Jetson Orin 的 RealSense:设备识别与深度流一次排通

30分钟打通 Jetson Orin 的 RealSense:设备识别与深度流一次排通

30分钟打通 Jetson Orin 的 RealSense:设备识别与深度流一次排通

【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense

把 Intel RealSense 插到 Jetson Orin 的 USB3 口上,最常见的翻车现场是这样的:lsusb里明明能看到8086:0b07,但realsense-viewer要么提示找不到设备,要么画面只出颜色流、深度流一片空白。先别急着重新刷机,也别怀疑相机是坏的——多数情况只是问题出错了层级:USB 枚举、内核驱动、SDK 取流,三层的"症状长得不一样"。这篇带你先定位、再动手,把 RealSense 的设备识别和深度流在 Jetson Orin 上完整跑通。

先确认相机被识别到哪一层:lsusb、lsmod、realsense-viewer 三连查

排查的第一原则是"先看现象再下手",别上来就编译。三个命令,每层各一个,从上往下走:

第 1 层:USB 枚举

lsusb
  • 现象:列表里没有Bus XXX Device XXX: ID 8086:0b07(D400 系列)
  • 判断:相机根本没被 USB 子系统看到
  • 下一步:换原装 USB3 线、换主板后置 USB3.0 口、避开 USB hub;供电不足的相机在枚举阶段就会消失

第 2 层:内核驱动

lsmod | grep uvcvideo ls /dev/video*
  • 现象 A:uvcvideo没加载,或/dev/video*节点不存在
  • 判断:L4T 的定制内核里 UVC 驱动没起来
  • 现象 B:模块在、节点也在,但取流时深度格式打不开
  • 判断:L4T 自带的uvcvideo没有包含 RealSense 需要的 camera-formats 支持——这就是 Jetson 上"有 RGB 没深度"的头号嫌疑
  • 下一步:这两类现象分别对应后文两条路线,先记下你停在哪一层

第 3 层:SDK 取流

realsense-viewer
  • 现象:viewer 能打开、能枚举到相机,但深度流不出
  • 判断:SDK 与驱动之间的协议栈没对上(原生后端缺补丁,或 RSUSB 后端没启用)
  • 下一步:按下一条的选型结论决定走哪条路线

顺利的话,最终会看到 RGB 与深度画面并排输出、/dev/video*节点齐全,长这样:

两条路线,怎么判断自己该走哪条

librealsense 在 Linux 上和相机打交道有两条互斥的路径,cmake 阶段一次选死:

  • RSUSB 后端(免内核修改):UVC/HID 协议栈直接编进 SDK,走用户态标准 USB 驱动。适合快速验证——"这台相机在我手上到底能不能用""demo 演示一下",几十分钟内能出结果。代价是:不支持多相机、性能与功能有折损,官方定位是"给原生安装做补充"。
  • 原生内核路线(打 L4T 补丁):把 camera-formats、metadata 等补丁应用到内核模块后编译加载。适合生产环境长期运行;多相机同步、逐帧 metadata这类完整能力只有它给得了。代价是流程长(约 30 分钟)、需要约 2.5GB 磁盘余量。

一句话决策条件:只是快速验证,选 RSUSB;要上生产、要多相机时间同步,只能走原生内核路线,这两条路别走反——很多人卡住的根源就是先用 RSUSB 编译了一套 SDK,然后抱怨多相机不同步。

路线 A 实操:RSUSB 后端 librealsense 编译命令,一步都不多

前置依赖装好后,直接按顺序敲:

git clone https://gitcode.com/GitHub_Trending/li/librealsense cd librealsense sudo apt-get install git cmake libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev -y mkdir build && cd build cmake .. -DFORCE_RSUSB_BACKEND=true -DBUILD_WITH_CUDA=true -DCMAKE_BUILD_TYPE=release make -j$(($(nproc)-1)) sudo make install

两个参数值得说一句"为什么":

  • -DFORCE_RSUSB_BACKEND=true:启用用户态 UVC/HID 协议栈,这正是"免内核补丁"的来源。仓库里还有一份封装好全部步骤的脚本 libuvc_installation.sh,它额外做了 swap 配置和 udev 规则安装,磁盘紧张时可以改用脚本。
  • -DBUILD_WITH_CUDA=true:Jetson 上 CUDA 是现成的,打开后 decimation、temporal 等后处理滤镜走 GPU,深度流负载直接下降。

装完验证:

realsense-viewer

能出双画面,路线 A 到此结束;如果深度流依旧空白,说明问题在第 2 层,转路线 B。

路线 B 实操:L4T 内核补丁,patch 脚本到底替你干了什么

动手前三个检查:df -h至少留 2.5GB 空闲;板子切到 MaxN 电源模式(sudo nvpmodel -m 0);拔掉所有已接的 RealSense 相机。然后从仓库根目录执行:

./scripts/patch-realsense-ubuntu-L4T.sh

这个脚本(patch-realsense-ubuntu-L4T.sh)全程约 30 分钟,内部依次做了四件事,理解它有助于你出问题时知道该盯哪一步:

  1. 按/etc/nv_tegra_release识别你的 L4T 版本(Orin 上即 35.x/36.x/38.x),从 nv-tegra 同步对应的内核源码树到./Tegra沙箱目录——注意它改的是沙箱里的模块源码,不是替换整个内核镜像;
  2. 打 RealSense 专属补丁:realsense-camera-formats(深度相关流格式支持)、realsense-metadata(逐帧元数据),JetPack 6 以上还会补 HID sensor 配置;
  3. 只编译被改动的模块:uvcvideo、v4l2-core、以及hid/iio下加速度计陀螺仪相关模块;
  4. depmod后卸载旧模块、加载新模块,让补丁即刻生效。

脚本跑完后,用原生后端再编译一次 SDK——注意FORCE_RSUSB_BACKEND这次要显式关掉:

./scripts/setup_udev_rules.sh mkdir build && cd build cmake .. -DFORCE_RSUSB_BACKEND=false -DBUILD_WITH_CUDA=true -DCMAKE_BUILD_TYPE=release make -j$(($(nproc)-1)) && sudo make install realsense-viewer

打补丁过程的终端输出大致长这样(编译模块阶段):

viewer 里看到颜色与深度同步输出、且 metadata 信息可用,就是原生路线到位了:

跑通之后的三个调节旋钮:想更快、想更稳、想多相机

  • 想更快:确认BUILD_WITH_CUDA已开,把深度流从 848x480@90 降到 1280x720@30 或 848x480@30,CPU 占用会明显下来;对精度不敏感的节点加decimation滤镜。
  • 想更稳:sudo nvpmodel -m 0进 MaxN,避免 SoC 降频导致的帧率抖动;相机直插 USB3.0 口,不经过 hub;长接线场景检查供电。
  • 想多相机:前提是你走的是原生路线(RSUSB 不支持多相机)。多机时间对齐建议开启硬件同步触发(hardware trigger),让多台相机由硬件脉冲统一打帧,再配合 SDK 的 sync 机制消费。参考实现见 examples/multicam/。

高频卡点速查:对着症状找动作

现象处置动作
lsusb看不到 8086:0b07换线、换后置 USB3.0 口、确认供电,排除 hub
设备被枚举但 SDK 报无权限执行 setup_udev_rules.sh 后重新插拔
只有颜色流、深度流空白原生后端大概率没打 camera-formats 补丁,走路线 B;或临时换 RSUSB 后端先验证相机本身
深度流帧率随机掉、画面卡顿sudo nvpmodel -m 0;检查是否被降频,CPU 是否满载
多相机时间戳对不齐换原生内核路线 + 硬件同步触发,勿用 RSUSB
viewer 打不开但其他进程能读相机查/dev/video*占用,结束抢占相机的进程再启动

收尾:一句话选型,和仓库里的入口路径

原型验证走 RSUSB,生产环境与多相机走 L4T 内核补丁——选对路线,后面的 30 分钟才不会白花。需要继续深入时,直接看仓库内这几处:

  • 官方 Jetson 安装指南:installation_jetson.md
  • 内核补丁脚本:patch-realsense-ubuntu-L4T.sh
  • udev 规则脚本:setup_udev_rules.sh
  • 多相机同步示例:examples/multicam/
  • 最小取流示例(接完先跑通它):examples/hello-realsense/

【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进