팀 프로젝트

C-2345 자세 제어 4족보행 로봇 #8 (ROS 8강-카메라 캘리브레이션 실습)

InculPark 2021. 8. 21. 21:49
반응형

●8강

https://www.youtube.com/watch?v=IIlvF9c8Wzw 

 

이번 강의는 여러 카메라, LDS, IMU, 모터등을 ROS로 사용해보는 실습이었는데 실습 준비물이 컴퓨터 웹캠 하나 밖에 없어서 실습 #3 (카메라 캘리브레이션) 밖에 못했다....

 

 

●Keyword

-Camera calibration, LDS

 

 

 

 

●Study

강의는 여러 센서와(카메라와 플레이스테이션 컨트롤러도 포함) 모터를 ROS에서 바로 사용할 수 있도록 패키지와 정보가 ROSwiki에 올라와 있고 몇개를 보는 것으로 시작해서 실습을 하다 끝났다.

 

 

 

 

카메라 캘리브레이션

강의에선 자세히 다루지 않았기에 몇개 글을 찾아보았다.

 

https://kr.mathworks.com/help/vision/ug/camera-calibration.html

 

What Is Camera Calibration? - MATLAB & Simulink - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

 

https://darkpgmr.tistory.com/32

 

카메라 캘리브레이션 (Camera Calibration)

카메라 캘리브레이션 (camera calibration)은 영상처리, 컴퓨터 비전 분야에서 번거롭지만 꼭 필요한 과정중의 하나입니다. 본 포스팅에서는 카메라 캘리브레이션의 개념, 카메라 내부 파라미터, 외

darkpgmr.tistory.com

 

내가 이해하기로는

 

 

1. 카메라 켈리브레이션(Camera calibration)이란 간단하게 카메라의 초점, 위치 등의 정보(parameter, 변수)를 얻어내는 작업이다.

 

 

2. parameter에는 extrinsic과 intrinsic이 있는데 extrinsic은 카메라 외부의, 즉 카메라 본체와 세계(피사체) 사이의 상대적 거리, 위치, 기울기에 대한 정보를 포함하고 있고 intrinsic은 카메라 내부의, 초점, 오차(skew coefficient) 등을 포함하고 있다.

 

 

3. 이 parameter들을 이용해 2차원으로 나타난 이미지 파일에서 3차원의 정보(위치, 거리)등을 계산할 수 있고 또 이미지의 왜곡이나 뒤틀림을 보정할 수 있다.

 

 

대강은 뭔지 알 거 같다.

 

 

일단은 이 정도만 이해하고 나중에 본격적으로 영상처리를 해야할 때 위 사이트에 있는 식과 이론을 다시 공부해야 겠다.

 

 

엄청 어려운 식이나 과정이 있는 거 같진 않고 공학수학 때 배운 내용이랑 검색을 조금만 하면 충분히 이해할 수 있을 거 같은 정도이다.

 

 

우선은 ROS에 초점을 두자.

 

 

 

 

강의와 ppt에선 실습에 대한 자세한 설명이 있지는 않아서 wiki와 블로그를 참고했다.

 

http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration

 

camera_calibration/Tutorials/MonocularCalibration - ROS Wiki

Note: This tutorial assumes that you have completed the previous tutorials: ROS Tutorials. Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of y

wiki.ros.org

 

http://vncprado.github.io/ros-usbcam-with-calibration/

 

ROS usb_cam with calibration

ROS usb_cam with calibration

vncprado.github.io

 

 

 

1. 체스판 그림 준비 (wiki에 파일 있음)

 

 

 

2. 카메라 켈리브레이션 패키지 설치

$sudo apt install ros-noetic-camera-calibration

 

 

 

3. 카메라 노드 실행

$rosrun usb_cam usb_cam_node

*당연히 roscore를 먼저 실행해준다.

 

 

 

 

4. 웹캠이 publish하는 topic이름을 찾는다. > /usb_cam/image_raw

$rostopic list

 

 

5.
$rosrun camera_calibration cameracalibrator.py --size 8x6 --sqaure 0.245 image:=/usb_cam/image_raw camera:=/camera --no-service-check

*size : 체스판 그림의 크기로 nxn칸으로 입력

 

*sqaure : 체스판 그림의 한칸의 길이를 미터단위로 입력

      └wiki에서 인쇄한 그림은 0.108이라 나와있었는데 내가 인쇄한 건 재보니까 0.245였다. 인쇄 과정에서 사이즈가 바뀌었나??

*image:=에는 4에서 확인한 이미지 topic을 입력한다.

 

*camera:=뭔지 모르겠다.... 막 바꿔도 정상 작동한다....

 

*--no-service-check : 이 부분을 안 넣으면 service not found라는 오류가 발생한다. 얘를 넣어 service 찾는 과정 자체를 안하게 한다.

 

 

성공적으로 실행하고 체스판을 카메라에 비추면 p_x, p_y, p_size, skew가 찍힌다.

 

 

이후 체스판을 움직여보고 구부려 보고 하면 저 값들이 계속 바뀌다가 오른쪽의 바가 모두 초록색으로 바뀌면 CALIBRATE버튼이 활성화 된다.

 

 

*p_x : 체스판의 상대적 x위치 (좌우)

 

*p_y : 체스판의 상대적 y위치 (상하)

 

*p_size : 체스판의 크기 (이 크기를 바탕으로 카메라와 체스판 사이의 수직 거리를 계산할 듯)

 

*skew : 구부린 정도(많이 구부릴 수록 이 값이 커졌다.)

 

 

 

 

우선 실습 자체는 잘 끝났다.

 

 

아직 카메라 캘리브레이션과 이 패키지의 사용법을 잘은 모르지만 아마 체스판을 카메라에 대고 계속 움직여서 sample이 모이면 그걸 토대로 카메라의 위치와 영점조절(?)을 하는 것 같다.

 

 

어디까지나 내 추측이다. 완전히 틀렸을 가능성이 더 높다... 

 

 

재밌다.

 

 

실습할 센서가 없는 관계로 8강은 이렇게만 하고 넘어간다..

 

 

 

 

 

===============================================================================

정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.

틀린 내용이 있을 수 있습니다.

틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다.   : )

===============================================================================

반응형