[Calibration] Kalibr Camera Calibration
1. Install Kalibr
https://github.com/ethz-asl/kalibr/wiki/installation
$ 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
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
권장되는 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]