ROS camera_calibration

Este pacote do ROS permite a calibração de cameras monooculares e estereoscopicas e está documentado no seguinte link:

http://wiki.ros.org/camera_calibration

É necessário instalar o software para adquirir, e visualizar, as imagens na camera para serem processadas no ROS os dois pacotes necessários são os seguintes

O pacote camera_calibration instala-se facilmente com o seguinte comando:

sudo apt install ros-kinetic-camera-calibration

Existem dois tutoriais que descrevem os processos de calibração monocular e estereoscopico disponiveis no seguinte link:

http://wiki.ros.org/camera_calibration/Tutorials

Apenas experimentei a calibração monocular e o processo decorreu conforme a seguinte descriçao.

Após preparar uma cartolina de grande formato com o padrão descrito com quadrados de 90 mm, executei o programa de calibração com o comando:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.09 image:=/usb_cam/image_raw camera:=/usb_cam --no-service-check

Andei com o quadro de um lado para o outro a sua frente, em vários ângulos de orientação, e em várias posições no mesmo plano vertical.

Sempre que as linhas e os pontos batiam certo ia acrescentando umas linhas no terminal. Até que o botão save ficou disponível.

Cliquei no save. E durante várias horas nada aconteceu. O top do pi indicava que os processos do calibration ocupavam + de 200% do cpu.  Estava assim quando me fui embora, e assim estava quando cheguei. Os outros botões nunca ficaram disponíveis.

Interrompi o processo com ctrl+C e dediquei-me um bocado a olhar para o que estava no terminal.

A parte final do output aparentava ser o resultado da calibração, só que o programa, se não crachou, ficou de algum modo com um funcionamento anómalo, e assim nunca deu hipotese de gravar os resultados.

No entanto o formato com que os dados eram apresentados não eram exactamente o que eu estava a espera para um yaml.

Uma nova vista de olhos ao tutorial que estou a seguir e perto do fim (ponto 6) fala sobre o node camera_calibration_parsers, e procedi da seguinte forma:

Copiei o bloco de texto, conforme exibido nesse tutorial, para um ficheriro de texto com o nome camcal.ini.

instalei o pacote que o contem este programa com o seguinte comando:

sudo apt install kinetic-image-common

e executei-o de modo a proceder a conversão com o comando:

rosrun camera_calibration_parsers convert camcal.ini camcal.yaml

Depois de verificar copiei o ficheiro resultante para o sitio e nome adequado.

mkdir ~/.ros/camera_info
cp camcal.yaml /home/ubuntu/.ros/camera_info/head_camera.yaml

Voltei a lançar o node usb_cam, e queixou-se do nome da camera que está no ficheiro. qualquer coisa do tipo: [head_camera] does not match name narrow_stereo in file.

Para resolver o problema bastou alterar o nome da camera de narrow_stereo para head_camera no ficheiro yaml.

Feito! Camera calibrada. Video no rviz.