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

:bullseye: 回复 jsgaoyang:确认当前设备树并配置双摄像头

您提供的设备树列表非常有用!现在需要确认当前系统使用的是哪个设备树,然后针对性配置。


:white_check_mark: Step 1: 确认当前使用的设备树

# 查看当前启动使用的设备树
cat /proc/device-tree/compatible | head -5

# 或查看内核启动参数
cat /proc/cmdline | grep -i device

# 查看当前设备树文件名
ls -la /boot/hobot/*.dtb | grep -v backup

通常 RDK X5 默认使用

  • x5-rdk.dtbx5-rdk-v1p0.dtb(RDK 版本)
  • x5-evb-lp4-v2p0.dtb(评估板最新版本)

:white_check_mark: Step 2: 查看当前 MIPI 摄像头配置

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

# 或查看 csi 节点
find /proc/device-tree -name "*csi*" -o -name "*mipi*" 2>/dev/null

# 查看 I2C 总线与 MIPI 的映射关系
cat /proc/device-tree/soc/*/i2c*/compatible 2>/dev/null

关键信息

  • 每个 CSI 接口对应的 i2c-bus 编号
  • 摄像头节点的 reg 值(I2C 地址)
  • status 是否为 "okay"

:white_check_mark: Step 3: 优先使用官方配置工具(避免手动改设备树)

:warning: 手动修改设备树有风险,建议先尝试官方工具:

# 1. 查看是否有摄像头配置工具
ls /opt/horizon/bin/*cam* 2>/dev/null
ls /usr/bin/*cam* 2>/dev/null

# 2. 查看 run_tuning.sh 帮助(SC132GS 专用)
bash /opt/horizon/bin/run_tuning.sh --help 2>/dev/null

# 3. 尝试配置双摄像头
# 根据论坛已有案例,这个命令可能配置双路
bash /opt/horizon/bin/run_tuning.sh --run 30 -r 1

# 4. 重启生效
sudo reboot

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

这是最推荐的方式,无需手动修改设备树:

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

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

# 3. 查看启动文件内容
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

:pushpin: 参考帖子X5 调用双目 MIPI 摄像头同时获取图像时第二个摄像头报错误码 -43


:warning: Step 5: 手动修改设备树(仅当上述方法无效时)

如果必须手动修改,请按以下步骤:

5.1 备份当前设备树

# 假设当前使用 x5-rdk.dtb
sudo cp /boot/hobot/x5-rdk.dtb /boot/hobot/x5-rdk.dtb.backup

5.2 反编译设备树

# 安装工具
sudo apt install device-tree-compiler

# 反编译
dtc -I dtb -O dts -o x5-rdk.dts /boot/hobot/x5-rdk.dtb

5.3 编辑设备树

nano x5-rdk.dts

查找并修改 MIPI CSI 配置,确保两个接口使用不同的 I2C 总线

&csi0 {
    status = "okay";
    i2c-bus = <&i2c6>;  // ← 确保与 csi1 不同
    camera@30 {
        compatible = "sc132gs";  // 或您的摄像头型号
        reg = <0x30>;
        status = "okay";
    };
};

&csi1 {
    status = "okay";
    i2c-bus = <&i2c7>;  // ← 确保与 csi0 不同
    camera@30 {
        compatible = "sc132gs";
        reg = <0x30>;
        status = "okay";
    };
};

5.4 重新编译并替换

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

# 替换(谨慎!)
sudo cp x5-rdk-new.dtb /boot/hobot/x5-rdk.dtb

# 重启
sudo reboot

:magnifying_glass_tilted_left: 关键诊断:为什么两个摄像头都映射到 i2c7?

这是异常现象!请执行以下命令并将输出贴到论坛:

# 1. 查看所有 I2C 总线
i2cdetect -l

# 2. 检测每个 I2C 总线上的设备
for bus in 0 1 2 3 4 5 6 7 8 9; do
    echo "=== I2C Bus $bus ==="
    i2cdetect -y $bus 2>/dev/null | grep -v "UU"
done

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

# 4. 查看内核日志中的摄像头初始化
dmesg | grep -i "mipi\|csi\|camera\|i2c" | tail -50

# 5. 确认当前使用的设备树
cat /proc/cmdline | grep -i device

:pushpin: 建议下一步行动

优先级 操作 说明
:red_circle: P0 执行上述诊断命令 确认 I2C 总线映射异常原因
:orange_circle: P1 尝试官方 ROS2 包 hobot_mipi_cam 自动处理设备树配置
:yellow_circle: P2 使用 run_tuning.sh 工具 SC132GS 专用配置工具
:green_circle: P3 手动修改设备树 仅当前述方法无效时使用

:books: 参考资源

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

请先执行诊断命令并将输出贴回论坛,特别是:

  1. i2cdetect -l 输出
  2. dmesg | grep -i mipi 输出
  3. 当前使用的设备树文件名
  4. 摄像头型号和连接位置(CSI0/CSI1/CSI2)

这样可以更快定位是硬件连接问题还是设备树配置问题