RDK GS130WI和SLAM算法

针对 GS130WI 双目相机标定 问题,由于 GS130WI 与 GS130W 在相机传感器部分相同(均为 SC132GS),标定方法可参考 GS130W/SC132GS 的流程。

:pushpin: 核心结论

GS130WI 标定分为两部分:

  1. 相机内参 + 外参标定(双目立体标定)
  2. IMU 标定(如使用 VIO 需要)

目前官方没有提供 GS130WI 专用的标定工具,需要开发者自行完成标定并生成配置文件。


:wrench: 标定步骤

步骤 1:获取原始图像

首先需要确保相机能正常出流,并获取左右目原始图像用于标定:

# 启动 MIPI 相机节点(双路输出)
ros2 launch mipi_cam mipi_cam_dual_channel.launch.py

# 或使用示例脚本获取图像
cd /app/pydev_demo/03_mipi_camera_sample
python3 mipi_camera.py

保存左右目图像到本地目录,用于后续标定。

步骤 2:使用标定工具

方案 A:使用 ROS2 标定工具(推荐)

# 安装标定工具
sudo apt install ros-humble-camera-calibration

# 启动标定节点(需要修改为订阅 GS130W 的图像话题)
ros2 run camera_calibration cameracalibrator.py \
  --size 8x6 \
  --square 0.025 \
  image:=/mipi_cam/left/image_raw \
  camera:=/mipi_cam/left

# 对右目相机重复上述步骤

方案 B:使用 OpenCV 离线标定

import cv2
import numpy as np
import glob

# 准备标定板图像
images = glob.glob('calibration_images/left/*.jpg')

# 标定参数
checkerboard = (8, 6)  # 内角点数量
square_size = 0.025    # 方格边长(米)

# 执行标定
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((checkerboard[0]*checkerboard[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:checkerboard[0], 0:checkerboard[1]].T.reshape(-1, 2) * square_size

# ... 执行标定流程,获取内参矩阵和畸变系数

步骤 3:生成标定配置文件

标定完成后,需要生成 hobot_stereonet 所需的 YAML 配置文件,格式参考:

# gc4663_calibration.yaml 或自定义文件名
left_camera:
  camera_matrix:
    rows: 3
    cols: 3
    data: [fx, 0, cx, 0, fy, cy, 0, 0, 1]
  distortion_coeffs:
    rows: 1
    cols: 5
    data: [k1, k2, p1, p2, k3]

right_camera:
  camera_matrix:
    rows: 3
    cols: 3
    data: [fx, 0, cx, 0, fy, cy, 0, 0, 1]
  distortion_coeffs:
    rows: 1
    cols: 5
    data: [k1, k2, p1, p2, k3]

stereo:
  rotation_matrix:
    rows: 3
    cols: 3
    data: [R11, R12, R13, R21, R22, R23, R31, R32, R33]
  projection_matrix_left:
    rows: 3
    cols: 4
    data: [P11, P12, P13, P14, P21, P22, P23, P24, P31, P32, P33, P34]
  projection_matrix_right:
    rows: 3
    cols: 4
    data: [P11, P12, P13, P14, P21, P22, P23, P24, P31, P32, P33, P34]

步骤 4:加载标定参数

在运行双目深度算法时加载自定义标定文件:

# 修改 launch 文件或添加参数
ros2 launch hobot_stereonet stereonet.launch.py \
  calibration_file:=/path/to/your/gs130wi_calibration.yaml

:clipboard: 关键注意事项

项目 说明
标定板 建议使用 8×6 或 9×6 棋盘格,方格边长 2-3cm
图像数量 至少 20 张不同角度、距离的标定板图像
距离范围 标定距离应覆盖实际使用范围(建议 0.5m - 3m)
IMU 标定 如需使用 VIO,还需标定 IMU 与相机的外参(较复杂)
配置文件位置 通常放在 /app/data/calibration/ 或自定义路径

:link: 相关社区资源


:warning: 重要提醒

由于 GS130WI 官方暂无 VIO SLAM 适配计划,如果您标定的目的是用于 VIO:

  1. 需要自行集成 IMU 数据(确认 IMU 型号和驱动)
  2. 需要标定 相机-IMU 外参(建议使用 Kalibr 等工具)
  3. 需要修改 hobot_vio 源码适配 GS130WI 数据流

如仅需双目深度/纯视觉 SLAM,完成相机标定即可使用。

建议将您的标定过程和结果反馈到社区,帮助其他开发者避坑!