回答你的关键问题
GDC 校准参数与左右目顺序的关系
是的,GDC 校准参数与左右目顺序直接相关!
如果左右目接反了,GDC 校正时会:
- 用左目的内参去校正右目图像
- 用右目的内参去校正左目图像
- 导致 rectified 图像的内参与实际不匹配
这就是深度误差 10 倍的根本原因!
右边传感器 EEPROM 乱码是否正常
正常! 从社区案例 34255 确认:
i2c bus: 4, EEPROM FLAG: SC230AI ✅ 正常识别
i2c bus: 6, EEPROM FLAG: ⚠️ 乱码(不影响使用)
官方 SC230AI 模组的第二个通道 EEPROM 读取乱码是已知现象,不影响图像采集和深度计算。
为什么默认标定文件反而更好
这说明 stereo.yaml 中的默认参数可能恰好匹配了当前的 resize 比例!
分析:
| 配置 | 内参来源 | 深度效果 |
|---|---|---|
| MIPI calib_params.yaml | 640x480 原始参数 | |
| stereo.yaml 默认值 | 可能是 640x352 参数 |
解决方案
方案 1:确认 stereo.yaml 的默认参数(推荐)
# 查看当前 stereo.yaml 内容
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 对比 MIPI 标定文件
cat /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml
如果 stereo.yaml 默认值效果更好,说明它匹配了 640x352 的分辨率。
方案 2:让 GDC 输出匹配模型输入
# 使用 640x352 启动相机(无需 resize)
source /opt/tros/humble/setup.bash
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
mipi_image_width:=640 \
mipi_image_height:=352 \
device_mode:=dual \
mipi_channel:=2 \
mipi_channel2:=0
# 启动 StereoNet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.4_int16_usb_cam.launch.py
观察日志,应该不再出现:
input image size not match model input size, need resize
方案 3:手动计算正确的内参
如果必须用 640x480 输出,需要按比例缩放内参:
sudo vim /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 原始内参(640x480):
# fx=261, fy=255, cx=318, cy=225
# 缩放后内参(640x352):
# scale = 352/480 = 0.733
# fx = 261 * 0.733 = 191
# fy = 255 * 0.733 = 187
# cx = 318 (不变)
# cy = 225 * 0.733 = 165
intrinsics: [191.0, 187.0, 318.0, 165.0]
验证步骤
# 1. 查看 stereo.yaml 默认值(效果好的那个)
cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml
# 2. 记录内参值
# [fx, fy, cx, cy, baseline]
# 3. 实测深度
# 1m 处物体 → 应显示 0.9-1.1m
# 2m 处墙面 → 应显示 1.8-2.2m
总结
| 问题 | 答案 |
|---|---|
| GDC 校准与左右目顺序 | 直接相关,接反会导致内参错配 |
| EEPROM 乱码 | 正常现象,不影响使用 |
| 默认标定更好 | 说明默认参数匹配了当前分辨率 |
| 深度误差 10 倍 | 内参与分辨率不匹配导致 |
建议: 既然默认标定文件效果更好,就用 stereo.yaml 的默认配置,配合 640x352 分辨率 启动相机,避免 resize。
把 stereo.yaml 的内容和实测结果补充到 原帖,这样官方技术支持能确认参数是否正确!![]()