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

分析你的内参数据

从日志看到的关键参数:

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

问题定位

1. Baseline 参数可能有误

SC132GS 双目相机的官方基线距离是 12cm,但你的参数显示只有 6.98cm,这会导致深度计算偏大。

验证你的误差比例:

测量值 / 实际值 = 77cm / 62cm = 1.24

如果 baseline 应该是 0.12m,但设置成 0.0698m:
理论误差 = 0.12 / 0.0698 = 1.72

但你的实际误差是 1.24,说明不是单纯的 baseline 问题

2. cy 参数异常

对于 640×352 分辨率:

  • 理论 cy = 352/2 = 176
  • 你的 cy = 185.25(偏高 9 像素)

这会导致垂直方向深度计算偏差。


解决方案

方案 1:使用正确的标定文件(推荐)

# 1. 查找 MIPI 相机的原始标定文件
find /opt -name "*calib*" -o -name "*stereo*" | grep -E "\.(yaml|json)"

# 2. 对比两个文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

# 3. 如果参数不一致,复制正确的标定文件
sudo cp /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml \
        /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

方案 2:手动校正 baseline

根据你的误差比例 1.24 进行校正:

sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 原值
baseline: 0.069816

# 校正值(增大 baseline 让深度计算变小)
baseline: 0.0866  # 0.069816 * 1.24

原理depth = (baseline × fx) / disparity,baseline 越大,同样视差下计算的深度越小。

方案 3:多点测试验证

在修改参数前,先测试多个距离点确认误差规律:

实际距离 测量距离 误差比例
0.62m 0.77m 1.24
1.00m ? ?
2.00m ? ?
# 快速测试脚本
ros2 topic echo /depth/image_raw --once | grep -A 5 "data:"

快速验证步骤

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

# 2. 修改 baseline
sudo sed -i 's/baseline: 0.069816/baseline: 0.0866/' \
         /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

# 3. 重启节点
ros2 node kill /stereonet_model_node
ros2 launch hobot_stereonet hobot_stereonet.launch.py

# 4. 再次测试 62cm 处的深度值

预期结果

校正后误差应该:

  • 0.6m 处: ±3-5cm
  • 1.0m 处: ±5-8cm
  • 2.0m 处: ±10-15cm

如果仍然不准

请补充以下信息到原帖:

  1. 1m 和 2m 处的实测对比数据
  2. 完整的 stereo.yaml 文件内容
  3. mipi_cam 的 calib_params.yaml 内容

这样可以判断是:

  • 标定文件不匹配
  • 模型本身近距离精度限制
  • 还是需要更深度的参数调优

参考相关帖子: