RDK X5 视频、扫描,建模,为什么显示满屏距离标识,没有物体识别呢?正常建模应该是怎么样的

问题升级分析

你已经完成了所有常规排查步骤,问题仍然存在。这说明这是一个深层次的硬件/软件匹配问题。让我提供一个系统性的最终排查方案。


核心问题定位

根据你的反馈:

  • :white_check_mark: 所有 MIPI 通道组合都试过了 (0+2, 2+0, 0+1, 1+0)
  • :white_check_mark: 已升级到 stereonet 2.5.9
  • :white_check_mark: 物理交换线缆也试过了
  • :white_check_mark: 确认左边摄像头图像正确
  • :cross_mark: 但仍报错 top is not left image

这说明问题不在通道配置,而在标定参数与相机实际输出的匹配上。


最终排查方案

步骤 1:验证相机 EEPROM 中的标定参数

# 1. 查看相机 EEPROM 信息
dmesg | grep -A 20 "stetreo calibration"

# 2. 查看启动时加载的标定参数
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_544_448_96.launch.py \
  mipi_image_width:=1280 \
  mipi_image_height:=1088 \
  mipi_channel:=2 \
  mipi_channel2:=0 \
  calib_method:=none \
  mipi_gdc_enable:=True 2>&1 | grep -E "fx|fy|baseline|FOV"

重点检查

  • EEPROM 中的 baseline 是否与标定文件一致(应约 0.079m)
  • fx/fy 是否不为 0

步骤 2:单独验证左右图像输出

# 1. 启动相机节点(不启动 stereonet)
source /opt/tros/humble/setup.bash
ros2 run mipi_cam mipi_cam_node \
  --ros-args \
  -p image_width:=1280 \
  -p image_height:=1088 \
  -p channel:=2 \
  -p channel2:=0 \
  -p gdc_enable:=true \
  -p device_mode:=dual

# 2. 在另一个终端查看话题
ros2 topic list | grep image

# 3. 查看图像信息
ros2 topic echo /image_combine_raw --field width,height,encoding --once

用浏览器访问板子 IP:8080,截图保存左右图像,然后:

  • 交换通道参数
  • 再次截图
  • 对比两次图像是否确实交换了

步骤 3:使用相机内置标定参数(不依赖外部文件)

# 创建自定义标定文件,使用 EEPROM 中的参数
cat > /home/sunrise/eeprom_calib.yaml << EOF
%YAML:1.0
---
image_width: 1280
image_height: 1088
left_camera_matrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [656.7575224009456, 0, 636.3995967335052, 0, 656.3766938297126, 540.4756754786636, 0, 0, 1]
left_distortion_coefficients: !!opencv-matrix
   rows: 1
   cols: 8
   dt: d
   data: [-0.32990876095880534, 0.13662699921032978, -0.00013531813117594095, -9.84710031787936e-05, -0.02937890519777009, 0.00014050652399494757, 4.560677311111928e-05, 4.667085000242849e-05]
right_camera_matrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [659.0957261498398, 0, 632.5403313828651, 0, 658.9494113212542, 539.3174440945205, 0, 0, 1]
right_distortion_coefficients: !!opencv-matrix
   rows: 1
   cols: 8
   dt: d
   data: [-0.33648211988088883, 0.14640319389383946, -9.945169177922777e-06, -0.0002291888331273915, -0.034067021404055015, -4.29001168046378e-05, -0.00023103725828151024, 0.00012545114191076973]
R: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [0.9999953142616191, -0.002907409016669017, 0.0009583462919259559, 0.0029068591885358154, 0.9999956099808883, 0.0005746204042934068, -0.0009600127413120272, -0.0005718319340480337, 0.999999375691693]
T: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [-0.079168011922606, 0.0002710668686210683, 0.00333092179027396]
EOF

# 使用新标定文件启动
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_544_448_96.launch.py \
  mipi_camera_calibration_file_path:=/home/sunrise/eeprom_calib.yaml \
  mipi_image_width:=1280 \
  mipi_image_height:=1088 \
  mipi_channel:=2 \
  mipi_channel2:=0 \
  calib_method:=none \
  mipi_gdc_enable:=True

步骤 4:执行极线标定验证(关键步骤)

# 1. 进入 stereonet 配置目录
cd /opt/tros/humble/share/hobot_stereonet/config/

# 2. 运行极线标定检查
bash run_stereo.sh --epipolar_mode True \
  --chessboard_per_rows 11 \
  --chessboard_per_cols 8 \
  --chessboard_square_size 0.06 \
  --mipi_image_width 1280 \
  --mipi_image_height 1088 \
  --mipi_channel 2 \
  --mipi_channel2 0

# 3. 查看标定结果
# 检查输出的极线对齐百分比
# <= 1px 应 > 95%
# <= 2px 应 > 99%

如果极线对齐结果差,说明标定参数与相机不匹配,需要重新标定。


步骤 5:重新标定相机(终极方案)

# 1. 准备棋盘格(11x8,方格 6cm)
# 2. 采集 20+ 张不同角度的棋盘格图像
bash run_stereo.sh --calibration_mode True \
  --save_dir /home/sunrise/calib_images \
  --mipi_image_width 1280 \
  --mipi_image_height 1088

# 3. 执行标定
bash run_stereo.sh --calibration_mode True \
  --chessboard_per_rows 11 \
  --chessboard_per_cols 8 \
  --chessboard_square_size 0.06 \
  --save_calib True \
  --calib_save_path /home/sunrise/new_sc132gs_calib.yaml

# 4. 使用新标定文件启动
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_544_448_96.launch.py \
  mipi_camera_calibration_file_path:=/home/sunrise/new_sc132gs_calib.yaml \
  mipi_image_width:=1280 \
  mipi_image_height:=1088 \
  mipi_channel:=2 \
  mipi_channel2:=0 \
  calib_method:=none

关于测距不准的问题

深度精度问题与左右图像识别问题是关联的。如果左右图像识别错误,深度计算会完全错误。

解决顺序

  1. 先解决 top is not left image 错误
  2. 再测试深度精度
  3. 如果仍有精度问题,调整以下参数:
# 深度精度优化参数
ros2 launch hobot_stereonet ... \
  speckle_filter_enable:=1 \
  max_speckle_size:=100 \
  max_disp_diff:=1 \
  pcl_filter_enable:=1 \
  grid_size:=0.05 \
  render_max_disp:=96 \
  render_z_range:=5.0

需要提供的信息

如果以上步骤仍无法解决,请提供以下信息以便进一步分析:

# 1. 极线标定结果截图
# 2. dmesg 中相机初始化完整日志
dmesg | grep -A 50 "sc132gs"

# 3. 当前使用的完整启动命令和日志前 50 行
# 4. 深度测试数据(实际距离 vs 测量距离,至少 5 个点)

参考资源

资源 链接
stereonet 2.5.9 发布页 GitHub Releases
SC132GS 适配文档 官方文档
社区标定教程 [132GS MIPI 双目相机][RDK X5][如何自行标定相机]
深度精度调试 RDK-X5 双目深度算法精度差

建议

优先执行步骤 4(极线标定验证),这能直接判断标定参数是否匹配。如果极线对齐结果差,直接重新标定(步骤 5)是最彻底的解决方案。

如果所有步骤都无效,可能是相机模组硬件问题,建议联系相机供应商确认左右相机定义是否与标定文件一致。