关于深度精度测试是否需要目标板
结论
分两种情况:
| 目的 | 是否需要棋盘格 | 说明 |
|---|---|---|
| 验证当前标定是否准确 | 用棋盘格做极线标定测试 | |
| 重新标定相机 | 采集棋盘格图像生成新参数 | |
| 日常测距使用 | 但需要确保标定参数正确 |
当前问题分析
你提到 0.5-4m 测距不准,结合之前持续的 top is not left image 错误,核心问题很可能是左右相机识别错误导致深度计算完全错误。
解决顺序:
- 先解决左右识别问题(极线标定)
- 再测试深度精度
步骤 1:用棋盘格验证极线对齐(必须做)
# 1. 准备棋盘格:11x8 角点,方格边长 6cm
# 2. 在 0.5m, 1m, 2m, 3m 距离分别测试
cd /opt/tros/humble/share/hobot_stereonet/config/
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
判断标准:
| 极线对齐结果 | 说明 | 下一步 |
|---|---|---|
<= 1px = 95%+ |
标定准确 |
直接测试深度精度 |
<= 1px = 50%- |
左右识别错误或标定不匹配 |
交换通道参数或重新标定 |
<= 2px = 99%+ |
可接受 |
直接测试深度精度 |
步骤 2:如果极线对齐差,重新标定
# 1. 采集 20+ 张棋盘格图像(不同距离、角度)
bash run_stereo.sh --calibration_mode True \
--save_dir /home/sunrise/calib_images \
--mipi_image_width 1280 \
--mipi_image_height 1088 \
--mipi_channel 2 \
--mipi_channel2 0
# 2. 执行标定
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
# 3. 使用新标定文件启动
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
步骤 3:深度精度测试(不需要棋盘格)
标定验证通过后,用普通物体测试深度精度:
# 1. 启动 stereonet
ros2 launch hobot_stereonet stereonet_model_web_visual_v2.5_int16_544_448_96.launch.py ...
# 2. 在 0.5m, 1m, 2m, 3m, 4m 放置平面物体(墙面、纸箱等)
# 3. 用尺子测量实际距离
# 4. 对比深度图输出值
# 查看深度话题
ros2 topic echo /StereoNetNode/stereonet_depth
可接受误差范围:
| 距离 | 误差范围 |
|---|---|
| 0.5m | ±2cm |
| 1m | ±3cm |
| 2m | ±5cm |
| 3m | ±8cm |
| 4m | ±10cm |
深度精度优化参数
如果极线对齐正确但精度仍差,调整以下参数:
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 \
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
常见精度问题原因
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 整体偏大/偏小 | 基线距离参数错误 | 检查标定文件 baseline |
| 跳变严重 | 场景纹理不足 | 增加环境纹理或启用滤波 |
| 边缘噪点多 | 极线对齐差 | 重新标定 |
| 近距离不准 | 超出标定范围 | 避免<30cm 使用 |
建议
立即执行:
- 准备棋盘格(11x8,6cm 方格)
- 运行极线标定测试(步骤 1)
- 根据结果决定是否需要重新标定
棋盘格获取:
- 打印:OpenCV 棋盘格 PDF
- 或购买:淘宝搜索"相机标定棋盘格"
参考帖子:
- RDK-X5 双目深度算法精度差 - 详细调试过程
- [132GS MIPI 双目相机][RDK X5][如何自行标定相机] - 标定流程
先解决极线对齐问题,再谈深度精度! 有测试结果请更新帖子。