#目標
ROS:Kineticをインストールして、LSD-SLAMをビルドする。
これをやりたくてめちゃくちゃ試行錯誤しました(大変だった...)。なかなかKineticでビルド成功したことについて、日本語でまとめられているサイトがなかったので自分でメモ的にまとめました。私のように苦しんでいる人の助けになれば嬉しいです。拙いところがあると思いますがご容赦ください。
手っ取り早く知りたい方は、LSD-SLAMのビルド手順まで飛ばして読んでください。
英語が得意な人は参考にしたサイトまで飛んでくと早いです。
#環境
OS Ubuntu16.04LTS 64bit 日本語版
メモリ 16GB
プロセッサ Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
グラフィック msi GeForce GTX 1060 6GB (製品型番: GeForce® GTX AERO ITX 6G OC)
重要: OpenCVがインストールされていない
#注意!!
LSD-SLAMを動かすのにOpenCVが必要みたいな記事を見て、前もってインストールを行わないでください。
あとで地獄のようなエラーに陥ります。もし、参考にしたい場合は下の方に載せたので見てみてください。
OpenCVがもう入ってしまっている方は、
・アンインストール
・OpenCVが干渉しないような仮想空間でビルド
するか、もしくはOpenCVが入っている環境でもうまく動くやり方を探してください(もし知っている人がいれば教えてください)。
私は、手っ取り早く済ませたかったのでUbuntu16.04をクリーンインストールしました。
#LSD-SLAMのビルド手順
###1. ROS:kineticのインストール
以下サイトの手順どおりにインストールを行ってください。
http://wiki.ros.org/kinetic/Installation/Ubuntu
英語が苦手だったり、サイトに飛ぶのが面倒な人は以下を一行づつ入力していってください。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
source /opt/ros/kinetic/setup.bash
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
これでROSはインストールできました。
###2. LSD-SLAMをビルド
必要な依存環境などをインストールします。
sudo apt install libsuitesparse-dev libqglviewer-dev-qt4 ros-kinetic-libg2o
sudo ln -s /usr/lib/x86_64-linux-gnu/libQGLViewer-qt4.so /usr/lib/x86_64-linux-gnu/libQGLViewer.so
公式で配っているLSD-SLAMだとビルドできないので、
以下のようにしてこちらのサイトから、Ubuntu16.04用にコードが書き換えられたものをクローンします。
mkdir -p ros_workspace/src
cd ros_workspace
git clone https://github.com/kevin-george/lsd_slam.git src/lsd_slam
catkin_make
これでビルド成功するはずです。
PythonがAnacondaの方は、lpthreadsがないだとか、Python Moduleの"em"がないと怒られたりするらしいですが
pip install catkin_pkg
pip install rospkg
pip install empy
で解決するみたいです。間違っても、empyではなくemをインストールしないでください。
###3. セットアップ
これではまだパスが通ってないので、バッシュの中に書き込みます。
echo "source ~/ros_workspace/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
###4. ためしに動かしてみる
rosrun lsd_slam_viewer viewer
としてうまく動けばオッケーです。
#参考
##LSD-SLAMのビルドで起きるエラー
私はROSの対象となる(LSD-SLAMをクローンした)ディレクトリでcatkin_makeや、rosmakeした時、だいたいこんな感じのエラーが起きました。
.....
collect2: error: ld returned 1 exit status
make[3]: *** [../bin/videoStitch] Error 1
make[3]: Leaving directory /home/userx/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/build' make[2]: *** [CMakeFiles/videoStitch.dir/all] Error 2 make[2]: Leaving directory/home/userx/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/build'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/yudi/rosbuild_ws/package_dir/lsd_slam/lsd_slam_viewer/build'
とか
.....
/opt/ros/kinetic/share/mk/cmake.mk:7: ターゲット ‘all’ のレシピで失敗しました
のような感じです。これらは、どうもOpenCV関連で起こるエラーみたいで、CMakeFiles.txtやCMakeLists.txtにいろいろ書き込んでみたりしましたが直りませんでした。
##ROSを入れなおした時のエラー
ここを参考にして解決しました。
ROSアンインストールして、その後再インストール時に、
$sudo rosdep init
ERROR: default sources list file already exists:
/etc/ros/rosdep/sources.list.d/20-default.list
Please delete if you wish to re-initialize
のようなエラーが出ますが、sudo rm -rf /etc/ros/rosdep/sources.list.d/*
と入力すれば、うまく行きました。
##オマケ: 自分がトライしてみたが結果的に直らなかったサイト
自分はできなかったですが、誰かの参考になれば嬉しいです。
・github系
https://github.com/tum-vision/lsd_slam/issues
(LSD-SLAMをビルドする際などで出てきたエラーに対しての解決方法であったりいろいろな考察)
・個人ブログ系
https://medium.com/@j.zijlmans/lsd-slam-bc80ae01a1bb
(一応、Ubuntu16.04で動くようにコードを書き換えてくれたらしいが私はエラーが出た)
http://mohsaad.com/2017/07/17/Installing-ROS-With-OpenCV/
(違うversionのOpenCVならビルドできるかも?と思った)