linux|ROS单目相机标定

camera_calibration/Tutorials/MonocularCalibration - ROS Wiki
说明:本教程介绍使用camera_calibration的cameracalibrator.py节点在 ROS 上使用原始图像校准单目相机。
1. 在开始之前 确保您具备以下条件:

  • 具有已知尺寸的大型棋盘。本教程使用 108 毫米正方形的 8x6 棋盘。校准使用棋盘的内部顶点,因此“9x7”棋盘使用内部顶点参数“8x6”,如下例所示。
  • 一个光线充足的 5m x 5m 区域,没有障碍物并检查板图案
  • 通过 ROS 发布图像的单目相机
USB相机驱动 安装usbcam
sudo apt-get install ros-noetic-usb-cam

查看接入的USB摄像头的设备号
ls /dev/video*

修改launch文件,设置USB摄像头的编号
roscd usb_cam cd launch sudo gedit usb_cam-test.launch

修改的参数
启动摄像头
roslaunch usb_cam usb_cam-test.launch

2.相机内参标定 首先获取依赖项并编译驱动程序。
$ rosdep install camera_calibration

确保您的单目相机通过 ROS 发布图像。让我们列出主题以检查图像是否已发布:
$ rostopic list

这将显示所有已发布的主题,检查是否有image_raw主题。大多数 ROS 相机驱动程序提供的默认主题是:
/camera/camera_info /camera/image_raw

如果您有多个摄像头或在其自己的命名空间中运行驱动程序,您的主题名称可能会有所不同。
运行校准节点 要开始校准,您需要加载将要校准的图像主题:
$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera

这将打开校准窗口,该窗口将突出显示棋盘:
linux|ROS单目相机标定
文章图片

如果它没有打开窗口,请尝试以下参数:
--no-service-check

3.1 双棋盘
New in D
从 Diamondback 开始,您将能够使用多种尺寸的棋盘格来校准相机。
要使用多个棋盘格,请为其他棋盘提供多个--size和--square选项。确保电路板具有不同的尺寸,以便校准系统可以区分它们。

4. 移动棋盘 为了获得良好的校准,您需要在相机框架中移动棋盘格,以便:
  • 相机视野左侧、右侧、顶部和底部的棋盘格
    • X 条 - 视野中的左/右
    • Y 条 - 视野中的顶部/底部
    • 尺寸栏 - 朝向/远离和倾斜相机
  • 棋盘格填满整个视野
  • 棋盘向左、右、上和下倾斜(倾斜)
在每一步,保持棋盘静止,直到图像在校准窗口中突出显示。
linux|ROS单目相机标定
文章图片

当您四处移动棋盘时,您会看到校准侧边栏上的三个条形长度增加。当CALIBRATE按钮亮起时,您有足够的数据进行校准,可以单击CALIBRATE查看结果。
校准可能需要大约一分钟。窗户可能是灰色的,但请稍等,它正在工作。
linux|ROS单目相机标定
文章图片

校准结果 校准完成后,您将在终端中看到校准结果,在校准窗口中看到校准后的图像:
linux|ROS单目相机标定
文章图片

成功的校准将导致现实世界中的直边在校正后的图像中显得笔直。
校准失败通常会导致空白或无法识别的图像,或不保留直边的图像。
校准成功后,您可以使用校准窗口顶部的滑块来更改校正图像的大小。比例为 0.0 意味着图像的大小使校正后的图像中的所有像素都有效。校正后的图像没有边框,但原始图像中的一些像素被丢弃。比例为 1.0 意味着原始图像中的所有像素都是可见的,但校正后的图像具有黑色边框,原始图像中没有输入像素。
D =[-0.33758562758914146, 0.11161239414304096, -0.00021819272592442094, -3.029195446330518e-05] K =[430.21554970319971, 0.0, 306.6913434743704, 0.0, 430.53169252696676, 227.22480030078816, 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 =[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0] # oST version 5.0 parameters[image]width 640height 480[narrow_stereo/left]camera matrix 430.215550 0.000000 306.691343 0.000000 430.531693 227.224800 0.000000 0.000000 1.000000distortion -0.337586 0.111612 -0.000218 -0.000030 0.0000rectification 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000projection 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000

如果您对校准感到满意,请单击COMMIT将校准参数发送到相机进行永久存储。GUI 退出,您应该在控制台中看到“将校准数据写入...”。
创建一个 yml 文件 Camera Calibration Parser帮助您创建一个 yml 文件,您可以使用camera_info_url参数加载几乎所有 ros 相机驱动程序。

校正图像 简单地加载校准文件并不能纠正图像。要进行整改,请使用image_proc 包。

【linux|ROS单目相机标定】

    推荐阅读