이번 포스트에서는 ORB SLAM2 패키지를 이용하여 monocular SLAM을 진행하고자 합니다.
1) 먼저 ORB-SLAM2 를 catkin_ws/src 에 다운받습니다.
# Move to catkin_ws/src
$ cd catkin_ws/src
# Download
$ git clone https://github.com/appliedAI-Initiative/orb_slam_2_ros.git
2) 이 떄 주의해야 할 사항으로는, 배포된 코드에 error가 있으므로 이를 수정해주어야 합니다
이를 위해서 먼저 orb_slam2_ros/orb_slam2/src에 접근합니다.
위의 Initializer.cc and ORBmatcher.cc를 수정해주어야 합니다.
Initializer.cc의 line 890에 접근하여, nGood를 if문 안에 다음처럼 넣어주어야 합니다
ORBmatcher.cc의 line 485에 factor를 (360.0f*factor)로 수정해주어야 합니다
3) 이후, catkin_make를 통해 빌드합니다.
$ cd ~/catkin_ws
$ catkin_make
4) Roscore를 실행시킨 이후, 가제보 시뮬레이터를 실행합니다. 이 때, 주의할 사항으로는 turtlebot_burger는 카메라가 장착되어 있지 않으므로, 반드시 turtlebot_waffle로 설정해주어야 합니다.
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch
House 맵은 textureless한 visual odometry를 가지는 경우가 많아서, ORB feature extraction이 잘 안 되는 경우가 많습니다.
5) Monocular camera를 사용하는 ORB SLAM2 노드를 실행시킵니다
$ roslaunch orb_slam2_ros orb_slam2_r200_mono.launch
ORB SLAM2는 Monocular, Stereo, RGB-D camera를 이용한 방법을 제공합니다. 아래의 표를 보면 각각에 해당하는 command가 있습니다.
본 실습에서는 Monocular camera의 Default setting으로 되어있는 Intel Realsense r200의 카메라 파라미터들이 그대로 사용합니다. 실제로는 터틀봇에는 pi_camera가 설치되어 있기에, 정확한 값을 사용하는 것은 아니라고 할 수 있겠습니다.
6) RViz를 실행시킨 이후에, /orb_slam2_mono/debug_image
을 subcribe하게 되면 아래와 같이 ORB features이 표현된 imageView를 살펴볼 수 있습니다
Point cloud를 visualize하기 위해서, Rviz에서 PointCloud2 메시지의 orb_slam2 토픽을 subsribe합니다.