如何校准立体相机

描述:本教程介绍如何使用 camera_calibration 的 cameracalibrator.py 节点在 ROS 上校准具有左右图像的立体相机。

关键词: 立体声, 相机, 校准

教程级别: 初学者
 

开始之前

请确保您具备以下条件:

  • 具有已知尺寸的大棋盘 (8x6) 或棋盘 (7x6)。本教程使用一个 8x6 的棋盘,方块为 108 毫米

  • 一个光线充足的 5m x 5m 区域,没有障碍物和检查板图案
  • 通过 ROS 发布左右图像的立体摄像头(如果要使用两个独立的摄像头作为立体摄像头,则必须确保图像具有相同的时间戳)

注意:棋盘大小是指内部角的数量,如 OpenCV 文档中所述(即 8x6 棋盘包含 9x7 个方格)

编译

首先获取依赖项并编译驱动程序。

$ rosdep install camera_calibration
$ rosmake camera_calibration

相机发布

确保您的立体摄像头通过 ROS 发布左右图像。让我们列出一些主题,以检查图像是否已发布:

$ rostopic list

这将向您显示所有已发布的主题,检查是否有左右image_raw主题:

  • /my_stereo/left/camera_info
    /my_stereo/left/image_raw
    /my_stereo/right/camera_info
    /my_stereo/right/image_raw
    /my_stereo_both/parameter_descriptions
    /my_stereo_both/parameter_updates
    /my_stereo_l/parameter_descriptions
    /my_stereo_l/parameter_updates
    /my_stereo_r/parameter_descriptions

开始校准

要开始校准,您需要加载将要校准的图像主题:

$ rosrun camera_calibration cameracalibrator.py --approximate 0.1 --size 8x6 --square 0.108 right:=/my_stereo/right/image_raw left:=/my_stereo/left/image_raw right_camera:=/my_stereo/right left_camera:=/my_stereo/left

--approximate 选项允许相机校准器处理没有完全相同时间戳的图像。目前设置为 0.1 秒。在这种情况下,只要时间戳差小于 0.1 秒,校准器就会运行而不会有问题。

这将打开校准窗口,该窗口将突出显示棋盘,在出现棋盘之前,您将不会在校准窗口中看到任何图像:

双棋盘格

D 的新功能

从 Diamondback 开始,您将能够使用多种尺寸的棋盘来校准相机。

要使用多个棋盘,请为其他棋盘提供多个 --size 和 --square 选项。确保电路板具有不同的尺寸,以便校准系统可以区分它们。

握住棋盘

确保水平握住棋盘(水平棋盘比垂直棋多)。

移动棋盘

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

  • 在视野的左右边缘检测棋盘(X 校准)
  • 在视野的顶部和底部边缘检测棋盘(Y 校准)
  • 在与相机的不同角度(“倾斜”)处检测到棋盘
  • 棋盘填充整个视野(尺寸校准)
  • 棋盘向左、向右、顶部和向下倾斜(X、Y 和尺寸校准)

当您移动棋盘时,您会看到校准侧边栏上的三个条形图的长度增加。当 CALIBRATE 按钮亮起时,您有足够的数据进行校准,可以单击 CALIBRATE 查看结果。

校准结果

校准完成后,您将在终端中看到校准结果,在校准窗口中看到校准图像:

侧边栏将显示棋盘正方形的测量精度和尺寸,在上述情况下,棋盘正方形为 111 毫米,精度为 0.31 像素。

成功的校准将导致真实世界的直边在校正后的图像中笔直地显示。

校准失败通常会导致图像空白或无法识别,或者图像无法保留直边。

通常,低于 0.25 像素的极化误差被认为是可以接受的,低于 0.1 的极化误差非常好。

您还可以使用校准窗口顶部的滑块来更改校正图像的大小,如下所示。比例为 0.0 表示调整图像大小,以便校正图像中的所有像素都有效。校正后的图像没有边框,但原始图像中的一些像素被丢弃。比例为 1.0 表示原始图像中的所有像素都是可见的,但校正后的图像具有黑色边框,其中原始图像中没有输入像素。

滑块的建议值为 0.0。

  •  

有关立体相机模型的更多详细信息 - 包括对这些结果的解释 - 请参阅http://opencv.willowgarage.com/documentation/python/camera_calibration_and_3d_reconstruction.html 和image_geometry

Left:
D =  [-0.31420196940339423, 0.091934927292188981, 0.0012952332628749881, -0.0016196264582460102]
K =  [425.19601412158482, 0.0, 308.29689772295882, 0.0, 426.02702697756899, 223.53789948448997, 0.0, 0.0, 1.0]
R =  [0.99783514664821127, 0.013543024537547797, 0.064355315242164368, -0.013644479706482148, 0.99990626305523833, 0.0011372231303031885, -0.064333881330776027, -0.0020128560018237928, 0.99792640015365552]
P =  [308.02438413775218, 0.0, 270.8484992980957, 0.0, 0.0, 308.02438413775218, 226.91282844543457, 0.0, 0.0, 0.0, 1.0, 0.0]

Right:
D =  [-0.30550530964404188, 0.082701072309439266, 0.001966752019596593, -0.0016409796174513081]
K =  [425.18741896821433, 0.0, 323.8787136811938, 0.0, 426.46867413824884, 226.19589833365407, 0.0, 0.0, 1.0]
R =  [0.99769116642055589, 0.011418153515469445, 0.066947458627553177, -0.011312576360776634, 0.99993409783500409, -0.0019559148698406695, -0.066965379581335679, 0.0011940507500265176, 0.99775458514623427]
P =  [308.02438413775218, 0.0, 270.8484992980957, -28.144333365644293, 0.0, 308.02438413775218, 226.91282844543457, 0.0, 0.0, 0.0, 1.0, 0.0]
# oST version 5.0 parameters


[image]

width
640

height
480

[narrow_stereo/left]

camera matrix
425.196014 0.000000 308.296898
0.000000 426.027027 223.537899
0.000000 0.000000 1.000000

distortion
-0.314202 0.091935 0.001295 -0.001620 0.0000

rectification
0.997835 0.013543 0.064355
-0.013644 0.999906 0.001137
-0.064334 -0.002013 0.997926

projection
308.024384 0.000000 270.848499 0.000000
0.000000 308.024384 226.912828 0.000000
0.000000 0.000000 1.000000 0.000000


# oST version 5.0 parameters


[image]

width
640

height
480

[narrow_stereo/right]

camera matrix
425.187419 0.000000 323.878714
0.000000 426.468674 226.195898
0.000000 0.000000 1.000000

distortion
-0.305505 0.082701 0.001967 -0.001641 0.0000

rectification
0.997691 0.011418 0.066947
-0.011313 0.999934 -0.001956
-0.066965 0.001194 0.997755

projection
308.024384 0.000000 270.848499 -28.144333
0.000000 308.024384 226.912828 0.000000
0.000000 0.000000 1.000000 0.000000

如果您对校准感到满意,请单击 COMMIT(在上面的图片上,此按钮具有旧名称 UPLOAD)将校准参数发送到相机以进行永久存储。

如果要保存校准参数和校准中使用的图像,请单击“保存”。所有内容都将在压缩文件夹 /tmp/calibrationdata.tar.gz 中提供。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值