相机校准

概述

本教程演示了如何获取单目相机的校准参数。

要求

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、每个方格尺寸为20mm的棋盘。校准使用棋盘的内部顶点,因此"8x10"棋盘使用下面示例中的内部顶点参数"7x9"。 可以从`此处 <https://calib.io/pages/camera-calibration-pattern-generator>`_ 下载具有指定尺寸的棋盘。

  • 一个光线充足、没有遮挡物和其他棋盘图案的区域

  • 通过ROS发布图像的单目摄像头

教程步骤

1- 在图形用户界面中启动终端

2- 为您特定的摄像头启动ROS驱动程序。

3- 确保相机通过ROS发布图像。可以通过运行以下命令进行测试:

ros2 topic list

4- 这将显示所有发布的主题,请确保存在一个图像主题 /camera/image_raw。为确认其为真实主题并正在发布,请检查主题的频率:

ros2 topic hz /camera/image_raw


../../_images/ROS2_topic_hz.png

5- 启动相机标定节点

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

Camera Name:

-c, --camera_name
        name of the camera to appear in the calibration file


Chessboard Options:

You must specify one or more chessboards as pairs of --size and--square options.

  -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 Communication Options:

 --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

Calibration Optimizer Options:

 --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

    This will open a calibration window which highlight the checkerboard.

../../_images/window1.png

6- 为了获得良好的标定结果,您需要在相机视野中移动棋盘格,使其满足以下要求:

  • 相机的左侧、右侧、顶部和底部的棋盘格视野

    ◦ X 轴移动 - 在视野中左右移动

    ◦ Y bar - 视野顶部/底部

    ◦ 大小调整 - 从相机方向上向前/向后倾斜

  • 填满整个视野的棋盘格

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


../../_images/calibration.jpg

7- 当棋盘格在校准边栏上移动时,4个条形图的长度会增加。当所有4个条形图变为绿色且有足够的数据进行校准时,校准按钮将亮起。点击它查看结果。校准需要大约一分钟的时间。


../../_images/greenbars.png

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


../../_images/calibration_complete.png


../../_images/calibration_parameters.png

9- 点击保存按钮查看结果。数据将保存到"/tmp/calibrationdata.tar.gz"

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

tar -xvf calibration.tar.gz

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