SLAM/Calibration

[Calibration] Kalibr Camera Calibration

페트론 2020. 4. 23. 21:35

1. Install Kalibr

https://github.com/ethz-asl/kalibr/wiki/installation

 

ethz-asl/kalibr

The Kalibr visual-inertial calibration toolbox. Contribute to ethz-asl/kalibr development by creating an account on GitHub.

github.com

 

$ sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-indigo-vision-opencv ros-indigo-image-transport-plugins ros-indigo-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev

$ sudo pip install python-igraph --upgrade

$ cd ~/catkin_ws/src

$ git clone https://github.com/ethz-asl/Kalibr.git

$ cd ~/catkin_ws

$ catkin build kalibr -DCMAKE_BUILD_TYPE=Release -j4

$ source ~/catkin_ws/devel/setup.bash

 

kalibr 는 calibration 을 위한 다양한 툴을 제공한다. 여기에는 camera calibration, multi-camera calibration, camera-imu calibration 등 다양한 기능이 존재한다. 

 

2. create .yaml file

https://github.com/ethz-asl/kalibr/wiki/calibration-targets

 

ethz-asl/kalibr

The Kalibr visual-inertial calibration toolbox. Contribute to ethz-asl/kalibr development by creating an account on GitHub.

github.com

 

calibration 을 위한 target data 를 생성한다. 

내 경우에는 8x6 크기의 25mm x 25mm checkerboard 를 이용하므로 다음 명령어를 통해 생성해준다.

( Kalibr 는 checkerboard, Aprilgrid, Circlegrid 이용이 모두 가능하다. )

$ cd ~/catkin_ws/src/Kalibr/aslam_offline_calibration/kalibr/python
$ mkdir cfg
$ cd cfg
$ nano chckerboard.yaml

 

다음 내용을 입력한 뒤 저장해준다. ( 값은 본인의 checker board에 따라 결정하면 된다. )

target_type: 'checkerboard' #gridtype
targetCols: 6               #number of internal chessboard corners
targetRows: 8               #number of internal chessboard corners
rowSpacingMeters: 0.025      #size of one chessboard square [m]
colSpacingMeters: 0.025      #size of one chessboard square [m]

 

3. check image topic hz

아래 명령어를 통해 camera 를 실행시키고 image topic 의 hz 를 확인한다.

$ roslaunch realsense2_camera rs_camera.launch
$ rostopic hz /camera/color/image_raw

rostopic hz /camera/color/image_raw

권장되는 rate는 약 20 rate 이며, 내 경우엔 약 26 rate를 갖는다.

4. change image hz

이야기 했듯이, 권장되는 rate는 20 이며, 이를 바꿔주기 위해 아래의 명령어를 사용하면 된다.

rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color

그러면 /color 토픽의 hz가 조정된 것을 확인할 수 있을 것이다.

4. recording image

이제 이미지를 녹화한다. 이 때, rosbag을 이용하며, 영상에는 체커보드가 존재해야 한다.

 

아래 명령어를 통해 data를 저장할 폴더를 생성해준다.

$ cd ~/catkin_ws/src/Kalibr/aslam_offline_calibration/kibr/python
$ mkdir data 
$ cd data

 

아래 명령어를 통해 카메라를 실행 시킨 뒤, recording을 시작한다.

$ roslaunch realsense2_camera rs_camera.launch

$ rosbag record /camera/color/image_raw
만일 변경된 /color 토픽을 사용한다면 아래 명령어를 사용한다.
$ rosbag record /color

 

결과파일의 이름은 "image.bag" 으로 바꾸어준다.

 

 

5. camera calibration

이제 Kalibr package 를 이용하여 calibration을 진행한다. 

이 때, 원래는 kalibr_calibrate_cameras 를 사용하려 했지만, 어째서인지 매우 안된다. 아마 내가 쓰는 카메라가 realsense d415 여서 그런 것 같다.

이를 해결하기 위하여 kalibr_calibrate_rs_cameras 를 사용하였다.

$ cd ~/catkin_ws/src/Kalibr/aslam_offline_calibration/kalibr/python

$ kalibr_calibrate_cameras --target /cfg/checkerboard.yaml --bag /data/image.bag --models pinhole-equi --topics /camera/color/image_raw
문제가 생긴다면
$ kalibr_calibrate_rs_cameras --model pinhole-equi-rs --target ~/catkin_ws/src/Kalibr/aslam_offline_calibration/kalibr/python/cfg/aprilgrid.yaml --topic /color --bag ~/catkin_ws/src/Kalibr/aslam_offline_calibration/kalibr/python/data/camera.bag --inverse-feature-variance 1 --frame-rate 30

 

드디어 결과를 얻었다.

 

LineDelay:
4.34344271982e-05
Intrinsics:
[582.14134488 592.52897853 285.85147366 172.13362103]
Distortion:
[ 0.17752626 -0.84930377  4.49538553 -6.86565543]

 

반응형