描述:本教程介绍如何使用 camera_calibration 的 cameracalibrator.py 节点在 ROS 上校准具有左右图像的立体相机。
关键词: 立体声, 相机, 校准
教程级别: 初学者
开始之前
请确保您具备以下条件:
- 一个光线充足的 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 中提供。