Калибровка камеры

Система ROS содержит специальный пакет, предназначенный для калибровки камеры. Подробнее о нём можно прочитать по ссылке http://wiki.ros.org/camera_calibration . Ниже мы рассмотрим последовательность действий для калибровки монокулярной камеры. Перед началом калибровки камеры необходимо подготовить шаблон чёрно-белой плоской «шахматной доски» с известным размером квадратов. В нашем примере используется шахматная доска 9 х 7 квадратов размером 108 мм. Также нужно обеспечить публикацию изображений с камеры через ROS. Установка программы осуществляется с помощью команды:

rosdep install camera_calibration

Убедитесь, что камера публикует изображения через ROS с помощью команды rostopic list. По умолчанию большинство камер ROS предоставляют топики /camera/camera_info и /camera/image_raw.

Для начала процесса калибровки в параметрах нужно указать топики камеры и размеры шахматной доски. Калибровка запускается следующей командой:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera

Данная команда открывает окно калибровки, в котором обозначаются распознанные углы шахматной доски:

Если окно не открылось – попробуйте в команду запуска калибровки добавить параметр --no-service-check

Если углы шахматной доски не обозначены цветными квадратами – убедитесь, что количество внутренних углов в шахматной доске соответствует размеру, указанному в параметрах команды. Чтобы получить правильные результаты калибровки – нужно переместить шахматную доску по всем углам камеры: вверх, вниз, вправо, влево, ближе/дальше от камеры:

После каждого перемещения подержите доску на месте, пока не отобразится подсветка углов в окне калибровки. По мере перемещения три индикатора отображают накопление необходимого объёма данных для калибровки: X – перемещений вправо-влево, Y – перемещений вверх/вниз, Size – перемещений ближе/дальше от камеры. Когда загорится кнопка Calibrate – это означает, что накоплено достаточно данных для калибровки, Вы можете нажать Calibrate и посмотреть результат. Калибровка может занять около минуты. Окно может стать серым, но нужно подождать, пока выполнится калибровка.

По завершении калибровки вы увидите её результаты в окне терминала и откалиброванное изображение в окне калибровки:

В результате успешной калибровки на откорректированном изображении все прямые линии реального мира должны также стать прямыми. В результате плохой калибровки обычно получаются пустые или кривые изображения, или изображения с непрямыми линиями.

После успешной калибровки вы видите слайдер вверху окна калибровки для изменения размера ректифицированного изображения. Scale = 0 означает что изображение отображено таким образом, что отражаются все точки ректифицированного изображения. У ректифицированного изображения нет чёрного бордюра, но некоторые точки оригинального изображения – исключены. Scale = 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
640

height
480

[narrow_stereo/left]

camera matrix
430.215550 0.000000 306.691343
0.000000 430.531693 227.224800
0.000000 0.000000 1.000000

distortion
-0.337586 0.111612 -0.000218 -0.000030 0.0000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
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 параметры калибровки будут отправлены камере для постоянного хранения (запишутся в yaml файл, указанный при инициализации камеры, в нашем примере - fe130_320_01.yaml). Окно GUI закрывается, в консоли отображается сообщение «writing calibration data to …». С помощью инструмента Camera Calibration Parser (http://wiki.ros.org/camera_calibration_parsers) можно создать yml – файл, который можно использовать практически с любым драйвером камеры ROS с помощью параметра camera_info_url. Подробнее про калибровку камеры можно прочитать по ссылке: http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration .

Last updated