ORB-SLAM を導入する
LSD-SLAMは導入できた.
今度はORB-SLAMを導入する.
【OS】Ubuntu 14.04 LTS
【ROS】ROS indigo
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libsuitesparse-dev
$ sudo apt-get install libblas-dev
$ sudo apt-get install liblapack-dev
$ sudo apt-get install libeigen3-dev
$ git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM
$ gedit ~/.bashrc
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/ubuntu/ORB_SLAM
最後に追記
$ cd ~/ORB_SLAM/Thirdparty/g2o/
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make
$ cd ~/ORB_SLAM/Thirdparty/DBoW2/
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make
$ cd ~/ORB_SLAM/
$ gedit manifest.xml
opencv2をコメントアウト
$ mkdir build
$ cd build
$ cmake .. -DROS_BUILD_TYPE=Release
[rosbuild] Building package ORB_SLAM
[rosbuild] Error from directory check: /opt/ros/indigo/share/ros/core/rosbuild/bin/check_same_directories.py /home/ubuntu/ORB_SLAM
1
Traceback (most recent call last):
File "/opt/ros/indigo/share/ros/core/rosbuild/bin/check_same_directories.py", line 46, in
raise Exception
Exception
CMake Error at /opt/ros/indigo/share/ros/core/rosbuild/private.cmake:102 (message):
[rosbuild] rospack found package "ORB_SLAM" at "", but the current
directory is "/home/ubuntu/ORB_SLAM". You should double-check your
ROS_PACKAGE_PATH to ensure that packages are found in the correct
precedence order.
Call Stack (most recent call first):
/opt/ros/indigo/share/ros/core/rosbuild/public.cmake:177 (_rosbuild_check_package_location)
CMakeLists.txt:4 (rosbuild_init)
-
- Configuring incomplete, errors occurred!
See also "/home/ubuntu/ORB_SLAM/build/CMakeFiles/CMakeOutput.log".
は…?もしかしてROS_PACKAGE_PATHが通ってない?
$ echo $ROS_PACKAGE_PATH
/home/ubuntu/ros/indigo/package_dir:/home/ubuntu/ros_catkin_ws/indigo/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks:/home/ubuntu/ORB_SLAM
うん?いや,通っているぞ?
github.com
あきらめて一度再起動する.
$ sudo reboot
$ cd ORB_SLAM/build/
$ cmake .. -DROS_BUILD_TYPE=Release
$ make
あれ?通った?なんで?
まあいいや,とにかく無事に導入できたようなのでテストする.
$ roscore
デフォルトでは以下の通り
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml
PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE を表しているらしい.
Loading ORB Vocabulary. This could take a while.
Vocabulary loading failure: This is not a correct text file!
Wrong path to vocabulary. Path must be absolut or relative to ORB_SLAM package directory.
Falied to open at: /home/ubuntu/ORB_SLAM//Data/ORBvoc.txt
おっと,Data/ORBvoc.txt.tar.gz解凍を忘れていた.
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml /camera/image_raw:=/image_raw
$ rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
$ rosrun uvc_camera uvc_camera_node
RVIZで見る.
$ rosrun rviz rviz -d Data/rviz.rviz
FixedFrame=ORB_SLAM/World
Add→By topic→→/ORB_SLAM/Map/Maker
LSD_room.bagを入れてテストする
$ wget http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip
$ unzip LSD_room.bag.zip
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml /camera/image_raw:=/image_raw
$ rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
$ rosbag play LSD_room.bag /image_raw:=/camera/image_raw
できた.
正確にトラッキングできていないようなら,カメラキャリブレーションすればいい.
$ sudo apt−get install ros−indigo−camera−calibration
$ rosrun uvc_camera uvc_camera_node set_camera_info:=/camera/set_camera_info
$ rosrun camera_calibration cameracalibrator.py --size 10x7 --square 0.024 image:=/image_raw
印刷設定によっては --square 0.023 もある.とりあえず定規を使って正確に.
[image]
width
640
height
480
[narrow_stereo]
camera matrix
642.312297 0.000000 326.922975
0.000000 640.587748 226.561341
0.000000 0.000000 1.000000
distortion
0.045102 -0.149298 0.001217 -0.001112 0.000000
rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
projection
642.660889 0.000000 325.975378 0.000000
0.000000 641.689636 226.420144 0.000000
0.000000 0.000000 1.000000 0.000000
('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')
で,これをどこに置けばいいんだ?
/Date/settings.yaml にそれっぽい記述がある.
$ gedit ~/ORB_SLAM/Data/settings.yaml
# Camera Parameters. Adjust them!
# Camera calibration parameters (OpenCV)
Camera.fx: 609.2855
Camera.fy: 609.3422
Camera.cx: 351.4274
Camera.cy: 237.7324
# Camera distortion paremeters (OpenCV) --
Camera.k1: -0.3492
Camera.k2: 0.1363
Camera.p1: 0.0
Camera.p2: 0.0
コピーして自分用に書き換える.
$ cp ~/ORB_SLAM/Data/settings.yaml ~/ORB_SLAM/Data/settings_default.yaml
$ gedit ~/ORB_SLAM/Data/settings.yaml
# Camera Parameters. Adjust them!
# Camera calibration parameters (OpenCV)
Camera.fx: 642.3123
Camera.fy: 640.5877
Camera.cx: 326.9230
Camera.cy: 226.5613
# Camera distortion paremeters (OpenCV) --
Camera.k1: 0.04510
Camera.k2: -0.1493
Camera.p1: 0.001217
Camera.p2: -0.001112
うまく行っているかどうかは正直わからない….
カメラキャリブレーションさえ精度よく求められていれば…
参考リンク
noshumi.blogspot.jp
カメラキャリブレーション他ではお世話になった参考文献
http://irvs.github.io/rosbook_jp/
次回はイメージの話
質問がありましたらコメントまたはTwitterにてお願いします.