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.