X5平台双目立体视觉模型,输出的深度图分辩率可选择么

针对您关于“双目相机模组内置的标定文件或者参数如何获取”的问题,结合社区已有案例和官方机制,解答如下:


:white_check_mark: 核心结论:官方模组标定参数存储在 EEPROM 中,系统自动读取

RDK X5 官方配套的 MIPI 双目相机模组(如 230AI)出厂时已完成标定,标定参数(内参、外参、畸变系数等)直接存储在模组板载的 EEPROM 芯片中。

  • 无需手动获取文件:在使用官方推荐的启动命令(如 hobot_stereonetmipi_cam)时,驱动程序会自动通过 I2C 总线读取 EEPROM 中的标定数据,并在内存中完成图像矫正和深度计算。
  • 默认配置文件路径:虽然日志中常出现 calib_params.yaml 的路径提示(如 /opt/tros/humble/lib/mipi_cam/config/calib_params.yaml),但这通常是备用配置文件。对于官方模组,系统优先使用 EEPROM 中的参数,因此即使该文件缺失或报错 无法打开标定参数文件,通常也不影响功能(可忽略)。

:hammer_and_wrench: 如何查看/验证标定参数?

虽然系统自动调用,但如果您需要查看具体的标定数值(如焦距 $f_x, f_y$、光心 $c_x, c_y$、基线 $baseline$ 等),可以通过以下方式获取:

方法一:通过 ROS2 话题查看(推荐)

在运行双目相机节点后,订阅 /camera_info 或相关话题,即可看到程序读取到的标定参数。

步骤:

  1. 启动相机节点(使用官方命令):

    ros2 launch mipi_cam mipi_cam_dual_channel.launch.py
    

    或者启动立体视觉节点:

    ros2 launch hobot_stereonet stereonet_model_web_visual_v2.launch.py
    
  2. 查看 CameraInfo 消息
    打开新终端,运行:

    ros2 topic echo /left_camera/camera_info
    # 或者
    ros2 topic echo /right_camera/camera_info
    # 有些配置下可能是 /stereo_camera/camera_info
    

    输出示例

    header: ...
    width: 640
    height: 352
    distortion_model: "plumb_bob"
    D: [0.0, 0.0, 0.0, 0.0, 0.0]  # 畸变系数(已矫正则为0)
    K: [fx, 0.0, cx, 0.0, fy, cy, 0.0, 0.0, 1.0]  # 内参矩阵
    R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]  # 旋转矩阵
    P: [fx, 0.0, cx, Tx, 0.0, fy, cy, Ty, 0.0, 0.0, 1.0, 0.0]  # 投影矩阵(含基线信息)
    

    :light_bulb: 关键点P 矩阵中的 TxTy 分量与焦距相关,可推算出基线距离(Baseline)。

方法二:通过日志查看

在启动 hobot_stereonet 节点时,日志中会打印读取到的标定参数。

查找关键词

sub rectified fx: ..., fy: ..., cx: ..., cy: ..., base_line: ...

示例日志(来自社区帖子):

[stereonet_model_node-2] [WARN] [StereoNetNode]: => sub rectified fx: 537.179688, fy: 477.493011, cx: 505.432953, cy: 211.237625, base_line: :0.070611

这表明:

  • 焦距 $f_x \approx 537$, $f_y \approx 477$
  • 光心 $(c_x, c_y) \approx (505, 211)$
  • 基线距离 $baseline \approx 0.0706$ 米(70.6mm)

方法三:手动读取 EEPROM(高级用户)

如果节点无法启动,您可以尝试通过 I2C 工具直接读取模组 EEPROM 数据(需知道具体地址和数据结构,通常不推荐,除非官方模组损坏需恢复)。

# 检测 I2C 设备(通常在 bus 4 或 6)
i2cdetect -y -r 4
i2cdetect -y -r 6

:warning: 注意:EEPROM 数据是二进制格式,没有官方解析工具很难直接读懂,建议优先通过 ROS2 话题获取解析后的参数。


:red_question_mark: 常见问题解答

1. 报错 无法打开标定参数文件 calib_params.yaml 怎么办?

  • 原因:程序试图加载默认配置文件,但官方模组优先使用 EEPROM 参数。
  • 解决直接忽略。只要您的模组是官方正品且接线正确,该报错不影响功能。
  • 验证:运行 ros2 topic echo /left_camera/camera_info,如果有数据输出,说明标定参数已正确加载。

2. 使用非官方/自定义双目相机,没有 EEPROM 怎么办?

  • 必须手动标定:您需要使用棋盘格标定法获取内参和外参。
  • 生成配置文件:将标定结果保存为 YAML 文件(参考 OpenCV 标定格式),并修改 launch 文件指向该路径。
  • 参考案例:社区帖子 【摄像头】【RDKX5】为自定义的双目摄像头增加校准参数 讨论了如何为自定义相机添加标定支持。

3. 标定参数不对导致深度图效果差?

  • 检查模组:确认是否为官方模组,排线是否松动。
  • 重新标定:如果是自组相机,需重新标定。
  • 调整参数:在 launch 文件中手动覆盖 camera_info_url 参数指向正确的 YAML 文件。

:books: 参考资源


:light_bulb: 总结建议

场景 操作建议
使用官方模组 无需操作,忽略 calib_params.yaml 报错,系统自动从 EEPROM 读取
查看标定数值 运行节点后,使用 ros2 topic echo /camera_info 或查看启动日志
使用自定义相机 需自行标定并生成 YAML 文件,修改 launch 配置加载
深度图效果异常 先检查排线和供电,再确认标定参数是否被正确加载(通过 topic 验证)

如果您需要具体的标定 YAML 文件模板或标定操作教程,请告诉我,我可以为您提供详细步骤! :blush: