问题根因已定位
从日志中看到关键错误:
[stereonet_model_node-1] [WARN]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] :
[0.000000, 0.000000, 312.265194, 442.958544, nan, 0.000000]
[stereonet_model_node-1] [ERROR]: => Haven't received any camera info from topic /image_combine_raw/right/camera_info
问题:
fx=0, fy=0→ 焦距为 0(无效)baseline=nan→ 基线距离无效- 右目 camera_info 缺失
- StereoNetNode 因参数无效而崩溃
结论:相机标定参数缺失,导致无法计算深度和点云。
解决方案
方案 1:使用官方 GS132 标定文件(推荐)
GS132 双目相机应该有出厂标定参数。检查标定文件是否存在:
# 查找标定文件
find /opt/tros -name "*.yaml" | grep -i calib
find /opt/tros -name "*gs132*"
find /opt/tros -name "*stereo*" -type f | head -20
查看 stereonet launch 文件,确认标定文件路径:
cat /opt/tros/humble/share/hobot_stereonet/launch/stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py | grep -i calib
方案 2:手动指定标定参数启动
如果找不到标定文件,可以手动指定 GS132 的典型参数:
source /opt/tros/humble/setup.bash
# 启动相机(带标定参数)
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
channel:=0 \
channel2:=2 \
camera_info_url_left:="" \
camera_info_url_right:=""
# 启动 StereoNet(指定标定参数)
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py \
camera_fx:=500.0 \
camera_fy:=500.0 \
camera_cx:=320.0 \
camera_cy:=220.0 \
baseline:=0.06
GS132 典型参数参考:fx≈500, baseline≈60mm(需根据实际相机调整)
方案 3:重新运行标定流程
按照官方文档进行标定:
# 参考文档:https://developer.d-robotics.cc/rdk_doc/Robot_development/boxs/spatial/hobot_stereonet
# 1. 采集标定图像
ros2 launch hobot_stereonet stereo_calib_collect.launch.py
# 2. 执行标定
ros2 launch hobot_stereonet stereo_calib.launch.py
# 3. 生成标定文件
# 标定完成后会生成 calib.yaml
验证步骤
# 1. 启动后检查节点是否存在
ros2 node list | grep StereoNet
# 2. 检查相机 info 话题
ros2 topic echo /image_combine_raw/left/camera_info --once
ros2 topic echo /image_combine_raw/right/camera_info --once
# 3. 确认 fx, fy, baseline 不为 0
ros2 topic echo /StereoNetNode/stereonet_depth/camera_info --once
# 4. 测试点云数据
ros2 topic echo /StereoNetNode/stereonet_pointcloud2 --once
相关社区资源
搜索更多 GS132 标定相关话题:
问题根因已定位
从日志中看到关键错误:
[StereoNetNode]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] :
[0.000000, 0.000000, 312.265194, 442.958544, nan, 0.000000]
[StereoNetNode]: => Haven't received any camera info from topic /image_combine_raw/right/camera_info
核心问题:
- 标定参数缺失:
fx=0, fy=0, baseline=nan(无效值) - 右目 camera_info 丢失:StereoNet 收不到右目标定信息
- AWB OTP 数据异常:全部是
65535(相机 EEPROM 读取失败)
这导致 StereoNet 节点无法计算深度,最终崩溃退出。
解决方案
方案 1:加载官方标定文件(推荐)
GS132 官方相机应该有预置标定文件。检查并加载:
# 1. 查找标定文件
find /opt/tros -name "*calib*.yaml" -o -name "*132gs*.yaml"
# 2. 查看 mipi_cam 配置目录
ls -la /opt/tros/humble/lib/mipi_cam/config/
# 3. 如果有 calib.yaml,修改启动脚本加载它
# 编辑 run_stereo.sh 或启动命令,添加标定文件路径
方案 2:使用 custom 模式加载标定
参考社区案例 #34406:
# 创建标定文件(需要官方提供或使用标定工具生成)
# 格式参考:/opt/tros/humble/share/hobot_stereonet/config/calib_example.yaml
# 启动时指定标定模式
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py \
calib_method:=custom \
stereo_calib_file_path:=/path/to/your/calib.yaml
方案 3:检查相机连接和 EEPROM
AWB OTP 数据全为 65535 说明相机 EEPROM 读取失败:
# 1. 重新插拔 MIPI 排线,确保连接牢固
# 2. 检查 I2C 通信
i2cdetect -y 4 # GS132 通常在 I2C bus 4
i2cdetect -y 6
# 3. 查看相机是否被正确识别
dmesg | grep -i "sc132gs\|mipi\|camera"
# 4. 重启相机服务
sudo systemctl restart hobot-camera
方案 4:使用官方 run_stereo.sh 脚本
不要手动启动,使用官方脚本(会自动处理标定):
# 进入示例目录
cd /opt/tros/humble/share/hobot_multimedia_samples/stereo_depth/
# 查看脚本内容,确认标定配置
cat run_stereo.sh
# 运行脚本(根据相机类型选择参数)
bash run_stereo.sh --mipi_channel 0 --mipi_channel2 2
立即执行以下命令诊断
# 1. 查找标定文件
find /opt/tros -name "*.yaml" | grep -i "calib\|stereo\|132"
# 2. 检查相机配置目录
ls -la /opt/tros/humble/lib/mipi_cam/config/
# 3. 查看当前启动的 launch 文件内容
cat /opt/tros/humble/share/hobot_stereonet/launch/stereonet_model_web_visual_v2.5_int16_usb_cam.launch.py | grep -A5 -B5 "calib"
# 4. 检查 I2C 设备
i2cdetect -y 4
参考社区资源
| 话题 | 内容 |
|---|---|
| 双目 MIPI 深度 Demo 离线标定文件使用问题 | 标定文件格式和加载方法 |
| 基于官方 132GS MIPI 双目相机运行双目 Demo 报错 | GS132 类似问题讨论 |
| 自定义标定 SC230ai 段错误 | 标定文件加载注意事项 |
关键提示
没有有效的标定参数(fx, fy, baseline),StereoNet 无法计算点云。这是设计行为,不是 bug。
请优先:
- 确认是否有官方标定文件
- 联系相机供应商获取 GS132 标定参数
- 或使用官方标定工具重新标定
把上述诊断命令的输出发出来,可以进一步帮你定位标定文件位置。