> For the complete documentation index, see [llms.txt](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/razdel-3/kalibrovka-kamery.md).

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

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

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

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

![](/files/-M28IIXcZyAkNMD6SAs3)

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

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

![](/files/-M28IhoG9G_k6AHl0dyq)

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

![](/files/-M28J7g0UTwgxTMfrljo)

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

![](/files/-M28JIbfQW9qy-kJPE03)

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

После успешной калибровки вы видите слайдер вверху окна калибровки для изменения размера ректифицированного изображения. Scale = 0 означает что изображение отображено таким образом, что отражаются все точки ректифицированного изображения. У ректифицированного изображения нет чёрного бордюра, но некоторые точки оригинального изображения – исключены. Scale = 1.0 – означает, что все точки оригинального изображения видны, но ректифицированное изображение имеет чёрные края там, где нет соответствующих точек на оригинальном изображении.\\

\
&#x20;Пример выдачи параметров калибровки в окно терминала:

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

```

&#x20;По нажатии кнопки **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> .
