分析你的内参数据
从日志看到的关键参数:
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
如果仍然不准
请补充以下信息到原帖:
- 1m 和 2m 处的实测对比数据
- 完整的 stereo.yaml 文件内容
- mipi_cam 的 calib_params.yaml 内容
这样可以判断是:
- 标定文件不匹配
- 模型本身近距离精度限制
- 还是需要更深度的参数调优
参考相关帖子: