rdkx5连接深度相机的帧率低怎么解决

:bullseye: 回复 jsgaoyang:RDK X5 设备树配置 MIPI 摄像头

您问到了关键问题!设备树(Device Tree)配置是解决双摄像头 I2C 冲突的核心。但在 RDK X5 上,普通用户通常不需要手动修改设备树,而是通过官方提供的配置工具或 ROS2 参数来完成。


:warning: 重要前提确认

在修改设备树之前,请先确认:

  1. 您的摄像头型号是否在官方支持列表中?

    • 官方支持:SC132GS、IMX219、OV5647 等
    • 第三方模组可能需要额外适配
  2. 两个摄像头是否连接到不同的 MIPI CSI 接口?

    • RDK X5 通常有 2-4 个独立的 MIPI CSI 接口
    • 每个接口应对应不同的 I2C 总线
  3. 为什么两个摄像头都映射到 i2c7?

    • 这可能是硬件连接问题设备树配置错误

:white_check_mark: 方案 1:使用官方配置工具(推荐,无需手动改设备树)

RDK X5 提供了摄像头配置工具,自动处理设备树配置:

# 1. 查看可用的摄像头配置脚本
ls /usr/bin/*camera* 2>/dev/null
ls /opt/horizon/bin/*camera* 2>/dev/null

# 2. 运行摄像头配置工具(如果有)
# 具体命令参考官方文档
# 通常是类似这样的:
hb_cam_config --list  # 列出支持的摄像头
hb_cam_config --set --channel 0 --model sc132gs
hb_cam_config --set --channel 1 --model sc132gs

:pushpin: 参考官方文档RDK DOC - MIPI 摄像头配置


:white_check_mark: 方案 2:使用官方 ROS2 包(自动处理设备树)

官方 ROS2 包 hobot_mipi_cam 会自动处理多摄像头配置:

# 1. 克隆官方仓库
cd ~
git clone https://github.com/D-Robotics/hobot_mipi_cam
cd hobot_mipi_cam

# 2. 查看双目启动文件
ls launch/*dual*

# 3. 查看启动文件内容,确认 channel 配置
cat launch/mipi_cam_dual_channel.launch.py

# 4. 启动双目摄像头(根据实际接口调整 channel)
ros2 launch hobot_mipi_cam mipi_cam_dual_channel.launch.py \
    left_channel:=0 \
    right_channel:=1 \
    camera_model:=sc132gs

关键参数

  • left_channel / right_channel:指定 MIPI CSI 接口编号
  • camera_model:摄像头型号

:white_check_mark: 方案 3:手动修改设备树(高级用户,需谨慎)

:warning: 警告:手动修改设备树有风险,可能导致系统无法启动。建议先备份!

Step 1: 找到设备树源文件

# 查找设备树文件
find /boot -name "*.dtb" 2>/dev/null
find /opt/horizon -name "*.dts" 2>/dev/null

# 通常位于:
# /boot/horizon-x5.dtb
# 或
# /opt/horizon/dts/horizon-x5.dts

Step 2: 反编译设备树(如果是 .dtb 格式)

# 安装设备树编译工具
sudo apt install device-tree-compiler

# 反编译 dtb 到 dts
dtc -I dtb -O dts -o horizon-x5.dts /boot/horizon-x5.dtb

Step 3: 编辑设备树文件

sudo nano horizon-x5.dts

查找 MIPI CSI 配置部分,通常类似:

&csi0 {
    status = "okay";
    i2c-bus = <&i2c6>;  // ← 确认 I2C 总线号
    camera@30 {
        compatible = "sc132gs";
        reg = <0x30>;  // I2C 地址
        status = "okay";
    };
};

&csi1 {
    status = "okay";
    i2c-bus = <&i2c7>;  // ← 确认 I2C 总线号不同
    camera@30 {
        compatible = "sc132gs";
        reg = <0x30>;
        status = "okay";
    };
};

关键检查点

  • 每个 CSI 接口的 i2c-bus 是否不同
  • status 是否为 "okay"
  • 摄像头型号 compatible 是否正确

Step 4: 重新编译设备树

# 编译 dts 到 dtb
dtc -I dts -O dtb -o horizon-x5-new.dtb horizon-x5.dts

# 备份原设备树
sudo cp /boot/horizon-x5.dtb /boot/horizon-x5.dtb.backup

# 替换设备树
sudo cp horizon-x5-new.dtb /boot/horizon-x5.dtb

# 重启
sudo reboot

:white_check_mark: 方案 4:使用 run_tuning.sh 工具(针对 SC132GS)

从论坛已有讨论看,RDK X5 提供了 run_tuning.sh 工具配置摄像头:

# 查看工具帮助
bash /opt/horizon/bin/run_tuning.sh --help

# 配置双摄像头(参考已有案例)
# --run 30 可能表示配置双路 30fps
# -r 1 可能表示启用双路
bash run_tuning.sh --run 30 -r 1

# 配置完成后重启
sudo reboot

:pushpin: 参考帖子关于 rdx X5 点亮 sc132gs 问题


:magnifying_glass_tilted_left: 诊断步骤(修改前先执行)

在修改设备树之前,请先执行以下诊断命令,并将输出贴到论坛:

# 1. 查看 I2C 总线列表
i2cdetect -l

# 2. 检测所有 I2C 总线上的设备
for bus in $(i2cdetect -l | awk '{print $1}'); do
    echo "=== I2C Bus $bus ==="
    i2cdetect -y $bus
done

# 3. 查看当前设备树中 MIPI 配置
cat /proc/device-tree/soc/cam/* 2>/dev/null | head -200

# 4. 查看系统日志中的摄像头初始化信息
dmesg | grep -i "mipi\|csi\|camera\|i2c"

# 5. 查看摄像头型号支持列表
cat /opt/horizon/share/camera/supported_models.txt 2>/dev/null

:pushpin: 关键问题:为什么两个摄像头都映射到 i2c7?

这是异常现象!正常情况下:

  • MIPI CSI 0 → I2C bus 6
  • MIPI CSI 1 → I2C bus 7
  • MIPI CSI 2 → I2C bus 8

可能原因

  1. 硬件连接错误:两个摄像头接到了同一个 I2C 控制器
  2. 设备树配置错误:两个 CSI 接口被配置为共用 I2C 总线
  3. 第三方模组不兼容:模组内部电路设计导致 I2C 映射异常

:light_bulb: 建议下一步行动

  1. 优先尝试官方 ROS2 例程

    git clone https://github.com/D-Robotics/hobot_mipi_cam
    cd hobot_mipi_cam
    ros2 launch hobot_mipi_cam mipi_cam_dual_channel.launch.py
    
  2. 执行诊断命令,将输出贴到论坛:

    • i2cdetect -l
    • dmesg | grep -i mipi
    • 摄像头型号和连接位置照片
  3. 联系官方确认

    • 您的摄像头型号是否支持双路独立使用
    • 是否需要特殊的设备树配置
  4. 如果必须手动修改设备树

    • 先备份原设备树
    • 参考官方文档或社区已有配置
    • 修改后仔细测试

:books: 参考资源

资源 链接
官方 MIPI 摄像头文档 RDK DOC
官方 ROS2 摄像头包 hobot_mipi_cam GitHub
社区讨论(SC132GS 双目) 论坛帖子
社区讨论(双摄像头错误码 -43) 论坛帖子

请先执行诊断命令并反馈结果,我们可以帮您进一步分析设备树配置是否正确!