realsense camera D435i에 대한 착각

처음에 D435i를 봤을 때 렌즈가 많아 보여서 당연히 stereo카메라인 줄 알았습니다. 그런데 realsense viewer와 rviz를 실행시켜 보았을 때 젤 오른쪽에 있는 렌즈만 카메라라는 것을 알게 되었습니다. 즉 monocular 카메라였던 것입니다. 카메라 종류를 착각하는 바람에 camera calibration을 실행시키는데 오래 걸렸네요...

 

 

왼쪽에서 첫 번째 렌즈와 세 번째 렌즈는 적외선을 내보내서 stereo방식으로 거리를 측정하는 데에 쓰입니다. 맨 오른쪽 렌즈를 제외하고는 depth정보를 받아들이는 데 사용하고 맨 오른쪽 렌즈는 RGB 카메라입니다. D435i는 이름에서 알 수 있듯이 imu 센서도 포함하고 있습니다. 

 

※imu센서: 관성을 측정하여 최종적으로 구하고자 하는 값은 물체가 기울어진 각도를 정확하게 측정하는 것


1. realsense 실행시키기

github.com/IntelRealSense/realsense-ros

 

IntelRealSense/realsense-ros

Intel(R) RealSense(TM) ROS Wrapper for D400 series, SR300 Camera and T265 Tracking Module - IntelRealSense/realsense-ros

github.com

이 사이트를 따라 하면 됩니다.

roscore를 실행시킨 후 마지막에 아래의 코드를 실행시키고 $ rviz를 하면 됩니다.

 

$ roslaunch realsense2_camera rs_camera.launch

 

토픽이 다르면 rviz 에서 카메라가 뜨지 않는데 이는 $ rostopic list를 통해 확인할 수 있습니다.

저는 토픽이 /camera/color/image_raw 였기 때문에 아래와 같이 토픽을 설정해 주었습니다.

rviz에서 왼쪽 하단에 Add라는 버튼을 누르고 By topic에서 color 누르고 image를 클릭 후 ok 하면 왼쪽 하단에 화면이 나올 것입니다.

 


2. Camera Calibration

wiki.ros.org/camera_calibration

 

camera_calibration - ROS Wiki

kinetic melodic noetic   Show EOL distros:  EOL distros:   electric fuerte groovy hydro indigo jade lunar diamondback: Only showing information from the released package extracted on Unknown. No API documentation available. Please see this page for in

wiki.ros.org

이 사이트를 따라라 하면 됩니다. d435i이기 때문에 monocular tutorial을 따라 했습니다.

calibration도 쉽지 않네요... tutorial그대로 따라 하는데 왜 자꾸 오류가 나는지..ㅠㅠ

 

  •  첫 번째 오류: rosdep error
ERROR: Rosdep cannot find all required resources to answer your query
Missing resource camera_calibration
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/yehjin/catkin_ws/src
ROS path [2]=/opt/ros/melodic/share

  해결방안:

$ sudo apt-get install ros-kinetic-image-pipeline
$ rosdep install camera_calibration

 

  •  두 번째 오류: cv_bridge error

해결방안:

$ git clone -b melodic --single-branch https://github.com/ros-perception/vision_opencv.git

 

  • 세 번째 오류: service error

 

service를 찾을 수 없다는 오류가 떴습니다.

 

  해결방안:

 

$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera --no-service-check

 

위의 코드로 바꿨더니 에러가 생기지 않았습니다. 사이트에 있는 건데 왜 빨리 발견 못했을까요..ㅎ

 

  • 두 번째 오류: topic error

 

 

어떤 것을 실패했다면서 display에 아무것도 뜨지 않았습니다. 이건 위의 코드에서의 토픽과 내 토픽이 달랐기 때문이더라고요.

 

해결방안:

 

 

토픽을 사진의 표시된 것으로 바꾸고 나니까 실행이 됐습니다.

이 두 개의 오류를 고치고 나서야 드디어 성공! 캘리브레이션이 잘 되기 위해서는 종이가 평평한 곳에 아주 밀착되어있어야 합니다.

그래서 저는 아래와 같이 벽에 한 후 종이를 고정하고 카메라를 움직이는 것보다 카메라를 고정하고 종이를 움직이는 것이 대부분 사용하는 것이란 걸 알고 다시 시도했습니다.

 

 

calibrate 버튼을 누르면 아래와 같이 calibrtaion결과를 알려줍니다.

 

 

체스판을 위의 사진처럼 인식하였고 카메라를 여러 각도와 거리로 옮겨가면서 체스판을 인식하게 하여 67개의 sample을 이용해서 calibration을 해보았습니다.

나온 결과를 저장하고 싶으면 display창에 commit 버튼을 누르고 save를 누르면 젤 아래에

 

('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

 

이와 같은 문장이 나오는데 /tmp/ 저 부분이 저장된 경로를 의미합니다.

tar.gz는 압축파일인데 이를 압축 해제하면 calibration 할 때 사용한 이미지들을 볼 수 있습니다.

 

# tmp폴더에 들어가서 tar -zxvf [파일이름] -C [압축해제할 위치]
yehjin@yehjin-900X3L:/tmp$ tar -zxvf calibrationdata.tar.gz -C ~/catkin_ws

글을 마치면서

아직 토픽에 대해 익숙하지 않다는 것을 알게 되었습니다. ros공부를 좀 더 해야겠네요..

 

* 참고

hs929 kr 님의 블로그
https://mushr.io/tutorials/realsense/

 

+ Recent posts