ROS 카메라 캘리브레이션 수행하기
오늘은 ROS melodic에서 카메라를 calibration하는 과정을 설명하려고 합니다. 카메라 영상을 어떻게 사용하는지에 따라 캘리브레이션이 필요할 때가 있는데요. 어떻게 하는지 간단히 보여드릴까 합니다.
roscore를 실행하고~
사용하시는 카메라를 기동하면 됩니다. 저는 최근에 개발에 참여한 R1mini의 ROS 패키지에서 카메라를 기동하는 명령을 사용하면 됩니다. 아무튼 카메라를 기동하구요~
카메라 영상이 잘 들어오는 rqt_image_view로 확인합니다.
그리고 rostopic list로 영상의 토픽이름을 확인합니다.
제 경우는 jetson 카메라를 실행했기 때문에 /main_camera/image_raw가 토픽 이름입니다.
이제 위 링크에서 체크보드를 받습니다. 저 체크 보드 파일은 ROS 위키의 카메라 캘리브레이션 문서에서 가져왔습니다.
저 화살표에 표시된 교차점의 갯수를 확인하면 가로8개 세로 6개입니다. 그게 size입니다. 8x6이죠~
이제 한 칸의 길이를 확인합니다. 2.8cm로 보이네요. 그게 square 옵션에 들어갈 값입니다. 0.028~
이제 rosrun 명령으로 camera_calibration 패키지의 cameracalibrator.py 노드를 size와 square 옵션을 주고, image와 camera 옵션에는 아까 확인한 토픽이름을 각각 지정합니다.
실행했는데 위 그림처럼 service not found라는 메세지가 나타나면, set_camera_info라는 서비스가 지원되지 않는다는 것인데요.
그냥, 없어도 되니까, 위 그림처럼 --no-service-check 라고 다시 달아줍니다.
이제 저런 창이 나타날거구요~
아까 프린트해둔 체크보드를 들고 카메라 앞에서 가로 세서, 위 아래로 천천히 움직여 줍니다. 좌우, 아래 위로 기울여도 주고, 멀리 가까이 움직여도 줍니다.
조금 열심히~^^
그러면 오른쪽 상단의 상황이~
저렇게 모두 녹색바(bar)로 바뀌면 calibrate라는 버튼이 활성화됩니다.
그 버튼을 누르면 됩니다.^^
저는 이 과정을 jetson nano에서 수행했기 때문에 터미널에서 보면 calibration 하는데 시간이 조금 걸립니다.
그렇게 조금 기다리면 저렇게~
캘리브레이션 결과가 나오는데요. 저 터미널의 결과를 긁어서, 사용하면 됩니다. 보통 pkg에 보면 camera.yaml이나 config라는 단어가 들어간 yaml 파일이 있는데요. 그 파일을 열어서 상황에 맞게 덮어쓰면 됩니다.^^.