相机校准

概述

本教程展示如何获取单目相机的标定参数。

要求

1- 使用操作系统的包管理器安装相机校准解析器、相机信息管理器并启动测试 Ament Cmake:

sudo apt install ros-<ros2-distro>-camera-calibration-parsers

sudo apt install ros-<ros2-distro>-camera-info-manager

sudo apt install ros-<ros2-distro>-launch-testing-ament-cmake

2- 图像管道需要从工作区中的源代码构建:

git clone b <ros2-distro> git@github.com:ros-perception/image_pipeline.git

另外,请确保您拥有以下内容:

  • 尺寸已知的大棋盘。本教程使用 7x9 棋盘,方格大小为 20 毫米。 校准使用棋盘格的内部顶点点,因此“8x10”棋盘使用内部顶点参数“7x9”,如下例所示。 具有设定尺寸的棋盘格可以从`此处下载 <https:// calib.io/pages/camera-calibration-pattern-generator>`_.

  • 光线充足、没有障碍物和其他检查板图案的区域

  • 单目相机通过 ROS 发布图像

教程步骤

1- 在 GUI 中启动终端

2- 启动适用于您的特定相机的 ROS 驱动程序。

3- 确保相机正在通过 ROS 发布图像。这可以通过运行来测试:

ros2 topic list

4-这将向您显示所有已发布的主题,确保有一个 image_raw 主题 /camera/image_raw。要确认它是真实主题并实际发布,请检查主题 hz:

ros2 topic hz /camera/image_raw



5-启动相机标定节点

ros2 run camera_calibration cameracalibrator --size 7x9 --square 0.02 --ros-args -r image:=/my_camera/image_raw -p camera:=/my_camera

相机名称:

-c, --camera_name
        出现在校准文件中的相机名称


棋盘选项:

您必须将一个或多个棋盘指定为一对 --size 和 --square 选项。

  -p PATTERN, --pattern=PATTERN
                    calibration pattern to detect - 'chessboard','circles', 'acircles','charuco'
  -s SIZE, --size=SIZE
                    chessboard size as NxM, counting interior corners (e.g. a standard chessboard is 7x7)
  -q SQUARE, --square=SQUARE
                    chessboard square size in meters

ROS 通信选项:

 --approximate=APPROXIMATE
                    allow specified slop (in seconds) when pairing images from unsynchronized stereo cameras
 --no-service-check
                    disable check for set_camera_info services at startup

校准优化器选项:

 --fix-principal-point
                    fix the principal point at the image center
 --fix-aspect-ratio
                    enforce focal lengths (fx, fy) are equal
 --zero-tangent-dist
                    set tangential distortion coefficients (p1, p2) to
                    zero
 -k NUM_COEFFS, --k-coefficients=NUM_COEFFS
                    number of radial distortion coefficients to use (up to
                    6, default 2)
 --disable_calib_cb_fast_check
                    uses the CALIB_CB_FAST_CHECK flag for findChessboardCorners

    这将打开一个校准窗口,突出显示棋盘格。


6- 为了获得良好的校准,您需要在相机框架中移动棋盘,以便:

  • 相机视野的左、右、上、下棋盘格

    ◦ X bar - left/right in field of view

    ◦ Y bar - top/bottom in field of view

    ◦ Size bar - toward/away and tilt from the camera

    • 棋盘格充满整个视野

    • 棋盘向左、右、上、下倾斜(倾斜)



7- 当棋盘围绕校准侧栏上的 4 个条移动时,长度会增加。当 4 个条全部呈绿色并且有足够的数据可用于校准时,“校准”按钮将亮起,单击它即可查看结果。校准大约需要一分钟时间。



8- 校准完成后,保存和提交按钮会亮起,您还可以在终端中看到结果。





9-按保存按钮查看结果。数据保存到“/tmp/calibrationdata.tar.gz”

10-要使用校准文件,请解压calibration.tar.gz

tar -xvf 校准.tar.gz

11-在文件夹中,可以使用用于校准的图像以及“ost.yaml”和“ost.txt”。您可以使用包含相机驱动程序指示的校准参数的 yaml 文件。