なにかいいこと語ればいいね - はてブ出張所 -

▼元GoogleBlogger「なにかいいこと語ればいいね」(現在非公開) のはてなブログ出張所▼こちらにはプログラム・IT関連の記事をまとめています▼修了後も頑張って更新したい▼

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をコメントアウト

.xmlコメントアウトはで可能


$ 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

qiita.com


カメラキャリブレーション他ではお世話になった参考文献
http://irvs.github.io/rosbook_jp/



次回はイメージの話
質問がありましたらコメントまたはTwitterにてお願いします.