根据你的日志和已尝试的方案,问题比通道接反更复杂。让我分析关键信息:
核心问题定位
你的日志中有两个关键警告被忽略了:
[WARN] [mipi_cap]: Target FOV 0.00° out of valid range [86.84°, 143.17°]
[WARN] [mipi_cap]: Use default alpha=0.0 (target FOV invalid)
以及 stereonet 节点初始化时的参数:
[camera_fx, camera_fy, camera_cx, camera_cy, baseline, doffs]: [0, 0, 0, 0, 0(m)0]
这说明:相机内参完全没有正确加载!
问题根因
1. 标定文件路径问题
你的启动命令中:
mipi_camera_calibration_file_path:=/opt/tros/humble/lib/mipi_cam/config/SC132gs_dual_calibration.yaml
但日志显示:
config_file_path is /opt/tros/humble/lib/mipi_cam/config/
注意:路径末尾缺少了文件名! 这导致系统使用了默认的空参数(全 0)。
2. FOV 为 0 的原因
因为内参全是 0,计算出的视场角(FOV)也是 0,超出了有效范围 [86.84°, 143.17°],系统只能使用默认值 alpha=0.0,导致极线校正失败。
解决方案
步骤 1:检查标定文件是否存在
# 确认标定文件存在
ls -la /opt/tros/humble/lib/mipi_cam/config/SC132gs_dual_calibration.yaml
# 查看文件内容(确认不是空文件)
cat /opt/tros/humble/lib/mipi_cam/config/SC132gs_dual_calibration.yaml
如果文件不存在,需要从相机厂商获取或使用官方默认文件。
步骤 2:修正启动命令
关键修改:确保路径完整且正确
source /opt/tros/humble/setup.bash
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_544_448_96.launch.py \
mipi_camera_calibration_file_path:=/opt/tros/humble/lib/mipi_cam/config/SC132gs_dual_calibration.yaml \
mipi_image_width:=1280 \
mipi_image_height:=640 \
mipi_image_framerate:=10.0 \
mipi_gdc_enable:=True \
mipi_rotation:=0.0 \
mipi_cal_rotation:=0.0 \
mipi_channel:=2 \
mipi_channel2:=0 \
calib_method:=none \
save_result_flag:=True \
save_dir:=/home/sunrise/stereonet_result_baseline \
save_freq:=1 \
save_total:=1 \
save_stereo_flag:=True \
save_origin_flag:=False \
save_disp_flag:=True \
save_uncert_flag:=False \
save_depth_flag:=True \
save_visual_flag:=True \
save_pcd_flag:=True
步骤 3:验证内参是否加载成功
启动后,重点检查日志中是否还有以下信息:
正确的标志:
[WARN] [StereoNetNode]: => sub rectified [fx, fy, cx, cy, baseline(m), doffs] : [287.429561, 473.413395, 285.964228, 223.091902, 0.079239, 0.000000]
错误的标志(你当前的情况):
[camera_fx, camera_fy, camera_cx, camera_cy, baseline, doffs]: [0, 0, 0, 0, 0(m)0]
Target FOV 0.00° out of valid range
步骤 4:如果标定文件确实有问题
参考社区教程重新标定:[132GS MIPI 双目相机][RDK X5][如何自行标定相机]
快速标定流程:
# 1. 采集棋盘格图像
bash run_cam.sh --calibration_mode true
# 2. 执行标定
bash run_stereo.sh --epipolar_mode True \
--chessboard_per_rows 11 \
--chessboard_per_cols 8 \
--chessboard_square_size 0.06 \
--save_calib True \
--calib_save_path /home/sunrise/my_calibration.yaml
# 3. 使用新标定文件启动
ros2 launch hobot_stereonet ... \
mipi_camera_calibration_file_path:=/home/sunrise/my_calibration.yaml
关于"满屏距离标识,没有物体识别"
这是正常现象!你运行的是深度测距程序(hobot_stereonet),不是物体识别程序。
- 深度测距:输出每个像素的距离值(就是你看到的满屏数字)
- 物体识别:需要运行 YOLO 等检测模型(如
hobot_object_detection)
如果你需要同时做深度 + 识别,需要:
- 先修复深度测距的标定问题
- 再启动物体检测节点
- 进行数据融合
下一步行动
请按以下顺序操作:
- 检查标定文件是否存在且有效
- 修正启动命令中的路径
- 重新启动并确认内参加载成功(日志中 fx/fy 不为 0)
- 测试深度精度
如果仍有问题,请提供:
cat /opt/tros/humble/lib/mipi_cam/config/SC132gs_dual_calibration.yaml的内容- 修正后的完整启动日志
相关参考帖子: