Skip to content

踩坑github.com7 天前

Jetson Orin 多路 RealSense D435i / D405 开启深度流丢帧与 USB 带宽溢出 ​

硬件与软件环境 ​

  • 计算平台:NVIDIA Jetson AGX Orin / Orin NX(JetPack 6.0 / Ubuntu 22.04)
  • 传感器配置:1 路头部全局相机(RealSense D435i/D455)+ 2 路手腕相机(RealSense D405/D435i),用于双臂遥操作采集 LeRobot / OpenPI 数据集

故障现象与报错 ​

单开任意 1 路相机时可稳定跑满 30fps;当同时启动 3 路相机的 RGB + Depth(640×480 @ 30fps)流时,第 3 路相机频繁打印警告: WARN [realsense2_camera]: Frame didn't arrive within 5000 或 uvc streamer watchdog triggered,导致采集的演示轨迹(Episode)出现图像卡顿与时间戳错位。

根因分析 ​

  1. Linux 内核 usbfs_memory_mb 默认仅 16MB:多路高分辨率未压缩 RGB-D 视频流并发传输时,内核 USB DMA 环形缓冲区瞬间耗尽,导致 UVC 驱动直接丢弃后续 USB 批量传输包。
  2. 多路相机共用同一个 USB Root Hub 控制器:许多扩展坞将 4 个 Type-A 接口复用到同一个内部 USB 3.2 Gen1 5Gbps 通道上,3 路 RGB + Depth + IMU 加上主动红外散斑投射器峰值电流波动会导致链路降速至 USB 2.0。

解决步骤 ​

  1. 将内核 usbfs_memory_mb 扩容至 1000MB: 临时生效命令:
    bash
    echo 1000 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb
    永久生效可在 /etc/rc.local 或 udev 规则中写入该参数。
  2. 按序列号固定绑定并拆分 USB 主控制器: 使用 rs-enumerate-devices -s 获取每台相机的 serial_no,通过 lsusb -t 检查拓扑,将头部相机与左右手腕相机分别插在对应不同 Bus(独立 xHCI 控制器)的原生接口上。
  3. 关闭非必要的散斑交叉干扰或启用多机硬件同步线:双腕近距离操作时,两台 D435i 的红外结构光会互相干扰,建议手腕近距相机改用基于双目 RGB 被动纹理的 D405,或通过同步排线设置 1 主 2 从(inter_cam_sync_mode=1/2)错峰曝光。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub IntelRealSense/realsense-ros访问 2026-10-21