stereonet自己的相机测试失败

你好!针对你的问题,我来详细解答:

:bullseye: 核心结论

是的,日志中显示的针孔标定参数会直接影响推理结果,但这些参数来自配置文件,不是你在命令行传入的参数


:clipboard: 问题分析

从你的日志可以看到关键信息:

calib file width, height: 1280, 640
model input width, height: 640, 352

问题点:

  1. 标定文件分辨率是 1280x640,但你的图像是 1280x720
  2. 日志中打印的 Kl, Kr, Dl, Dr 等参数来自配置文件,不是你在命令行传入的 camera_fx, camera_fy 等参数
  3. 你在命令行传入的内参参数可能没有被使用,系统实际使用的是配置文件中的参数

:hammer_and_wrench: 解决方案

步骤 1:找到配置文件位置

# 查找 stereonet 的配置文件
find /opt/tros/humble/share/hobot_stereonet -name "*.yaml"

通常配置文件在:

/opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

步骤 2:检查配置文件内容

cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml

你会看到类似这样的内容:

stereo0:
  cam0:
    intrinsics: [fx, fy, cx, cy]  # 这里的参数才是实际使用的
    resolution: [1280, 640]        # 分辨率可能不匹配
    distortion_coeffs: [...]

步骤 3:修改配置文件

需要修改的参数:

stereo0:
  cam0:
    intrinsics: [1775.42, 1776.80, 558.23, 410.75]  # 改成你的内参
    resolution: [1280, 720]                          # 改成你的分辨率
    distortion_coeffs: [0, 0, 0, 0]                  # 如果已矫正,设为0
  cam1:
    intrinsics: [1775.42, 1776.80, 558.23, 410.75]
    resolution: [1280, 720]
  T_cn_cnm1:  # 外参矩阵,根据你的基线计算
    - [1, 0, 0, -0.02535]  # baseline = 25.35mm
    - [0, 1, 0, 0]
    - [0, 0, 1, 0]
    - [0, 0, 0, 1]

步骤 4:重新启动

# 修改配置后重新启动
ros2 launch hobot_stereonet stereonet_model_web_visual.launch.py \
  stereonet_model_file_path:=/opt/tros/humble/share/hobot_stereonet/config/DStereoV2.2.bin \
  postprocess:=v2.2 \
  use_local_image:=True \
  local_image_path:=/root/stereo \
  need_rectify:=False \
  save_image_all:=True \
  save_dir:=./offline_result

:warning: 关键注意事项

  1. 命令行参数 vs 配置文件参数

    • 你在命令行传入的 camera_fx, camera_fy 等参数可能不会被使用
    • 实际推理使用的是 配置文件中的内参
    • 日志中打印的 Kl, Kr 就是配置文件中的参数
  2. 分辨率必须匹配

    • 配置文件中的 resolution 必须和你的图像分辨率一致(1280x720)
    • 否则会进行错误的缩放,导致深度计算错误
  3. 鱼眼相机特殊处理

    • 如果你的鱼眼相机已经做了极线矫正,distortion_coeffs 设为 [0, 0, 0, 0]
    • need_rectify:=False 是正确的

:magnifying_glass_tilted_left: 验证方法

启动后立即查看日志第一行,确认参数是否正确:

# 正确的参数应该接近你的输入:
=> rectified fx: 1775.42, fy: 1776.80, cx: 558.23, cy: 410.75, base_line: 0.02535

# 如果还是显示其他值,说明配置文件没有生效

相关资源

建议参考社区相关帖子:


总结:必须修改配置文件中的内参和分辨率,命令行参数可能不生效!

你可以先执行 cat /opt/tros/humble/share/hobot_stereonet/config/stereo.yaml 查看当前配置,然后把输出发出来,我帮你确认需要修改哪些参数。