RDK-X5 双目深度算法hobot_stereonet精度差

关键发现:Baseline 参数确实有问题!

从你提供的日志和对比其他用户的标定数据,我发现了核心问题

问题根因

你的 StereoNet 节点读取到的参数:

baseline: 0.069816m (6.98cm)
fx, fy: 304.31
cx, cy: 297.57, 185.25

但从社区其他 SC132GS 用户的标定日志(topic 35099)看到:

rectify [f, cx, cy, baseline]: [688.825, 687.746, 540.014, 0.0792385]

关键差异

  1. Baseline: 官方标定值是 7.92cm,你的是 6.98cm(偏小 12%)
  2. 焦距: 原始标定 fx=688,但 StereoNet 收到的是 304(说明经过了缩放)
  3. 分辨率: 原始标定是 1280×1088,StereoNet 输入是 640×352

解决方案

方案 1:检查 GDC 缩放后的参数传递(推荐)

你开启了 mipi_gdc_enable=true,GDC 会对图像进行去畸变 + 缩放,但标定参数可能没有正确缩放传递给 StereoNet。

检查步骤

# 1. 查看 MIPI 相机标定文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml

# 2. 查看 StereoNet 使用的参数文件
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

# 3. 对比两个文件的 baseline 和焦距

预期

  • MIPI 相机原始标定:baseline ≈ 0.079m, fx ≈ 688 (1280×1088 分辨率)
  • StereoNet 应该使用缩放后的参数:fx ≈ 688 × (640/1280) ≈ 344

你的实际值 fx=304,说明缩放比例可能有问题。


方案 2:手动校正 baseline 参数

根据你的误差比例 1.24 和 baseline 差异 0.079/0.0698 = 1.13,建议:

# 1. 备份原文件
sudo cp /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml \
        /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml.bak

# 2. 编辑文件
sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

修改参数:

# 原值
baseline: 0.069816
fx: 304.309495
fy: 304.309495
cx: 297.571581
cy: 185.246599

# 校正值(基于官方标定 0.079m 和误差比例)
baseline: 0.086  # 0.069816 * 1.24 或直接使用 0.079
fx: 344.0        # 688 / 2 (1280→640 缩放)
fy: 344.0
cx: 320.0        # 640 / 2
cy: 176.0        # 352 / 2

方案 3:检查 launch 文件参数传递

查看 hobot_stereonet.launch.py 是否正确从 MIPI 相机获取标定参数:

# 查看 launch 文件
cat $(ros2 pkg prefix hobot_stereonet)/share/hobot_stereonet/launch/hobot_stereonet.launch.py

# 重点检查是否有参数覆盖或硬编码

快速验证步骤

# 1. 修改参数后重启
ros2 node kill /stereonet_model_node
ros2 launch hobot_stereonet hobot_stereonet.launch.py

# 2. 观察日志中的参数
# 应该看到类似:
# [fx, fy, cx, cy, baseline(m), doffs] : [344.0, 344.0, 320.0, 176.0, 0.079, 0.000000]

# 3. 测试 62cm 处的深度值
# 使用 rqt_image_view 或 Python 脚本读取深度

为什么开启 GDC 后参数会错?

从日志看,GDC 做了以下处理:

  1. 去畸变:使用原始标定参数 (fx=688, baseline=0.079)
  2. 缩放:从 1280×1088 → 640×352

缩放后的参数没有正确更新给 StereoNet,导致:

  • 焦距应该从 688 → 344,但实际是 304
  • baseline 应该保持 0.079,但实际是 0.0698

下一步行动

请先执行以下操作并在原帖反馈:

  1. 查看两个标定文件内容

    cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
    cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
    
  2. 手动校正参数(按方案 2)

  3. 测试 3 个距离点:0.6m, 1.0m, 2.0m

如果问题仍然存在,可能是 GDC 模块的参数传递 bug,需要官方修复。

参考帖子: