MRPT는 Mobile Robot Programming Toolkit의 약자로 2d/3d SLAM, localization, video feature tracking, camera calibration 등 로봇 공학에서 많이 쓰이는 여러 기능을 제공하는 툴킷이다. ROS 패키지로도 지원됨.
자세한 설명은 https://docs.mrpt.org/reference/latest/index.html 참고.
여러 툴들 중에서 camera calibration 툴이 사용하기 굉장히 쉽고 간편해서 소개함.
sudo apt-get update -y
sudo apt-get install -y mrpt-apps
위 명령으로 설치 안될 시 아래와 같이 설치
sudo add-apt-repository ppa:joseluisblancoc/mrpt-stable
sudo apt-get update
sudo apt-get install libmrpt-dev mrpt-apps
camera-calib
실행하면 다음과 같은 창이 나오는데, 좌측 중앙부분 Checkerboard detection parameter를 사용자가 설정해주면 된다.
Number of inner corners:
체커보드 내부 코너의 개수
아래 그림에서는 In_X=8, In_Y=6이다.
Size of quads:
체커보드 한 변의 실제 길이(mm)
파라미터를 설정하고 상단의 Add image(s)를 눌러 칼립용 이미지들을 추가해준다.
그 다음 하단의 Calibrate 버튼을 누르면 아래처럼 intrinsic parameter과 distortion parameter가 추출된다.
distortion coefficient matrix dist는 opencv의 형식과 같은 [k1, k2, p1, p2, k3, k4, ...] 이다.
이 창을 조금 올려보면 아래처럼 몇개의 이미지가 valid한지, 즉 In_X*In_Y개의 코너가 모두 검출되었는지 확인 할 수 있는데, 이미지 안에 체커보드가 다 안 담겼다거나, In_X, In_Y 개수가 잘못 설정되었는지를 이를 통해 확인 할 수 있다.
추가로, 칼립용 이미지를 취득할 땐 보통 20~30장 정도로 다양한 방면과 거리에서 체커보드를 촬영하면 되는데 이때 최대한 사이드나 코너(사방)에 걸치게 찍은 이미지가 포함되어 있는게 좋다. 아래는 내가 사용한 이미지셋이다.
참고: k3 쓰고 안쓰고 undistortion 성능 차이가 육안상 꽤 심하게 남. 웬만하면 k3까지 쓰도록 하자!
p1, p2는 오히려 보통 크기가 작기때문에 (1e-3이하) 0으로 놔도 그렇게 티가 안남.