ROSのLSD-SLAMを動かしてみた。

###目的
TUS(ミュンヘン工科大)が公開している、ROSの単眼カメラのSLAM、LSD-SLAMを動かしてみた。

LSD-SLAM: Large-ScaleDirect Monocular SLAM
[github](https://github.com/tum-vision/lsd_slam) / [Papar](https://link.springer.com/chapter/10.1007/978-3-319-10605-2_54) / [Presen](http://videolectures.net/site/normal_dl/tag=921114/eccv2014_engel_monocular_slam_01.pdf) / [TUS-Vision Lab.](http://vision.in.tum.de/research/vslam/lsdslam?redirect=1)

###環境
Ubuntu1404 x64
ROS:Indigo
(ROS:Kineticではコンパイルできず)

###ライブラリのインストール

```
$ sudo apt-get install python-rosinstall
$ sudo apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev
```

###LSD-SLAMのインストール
catkinには対応していない。rosmakeでコンパイルする。
フォルダをrosbuild_wsからcatkin_lsdslamに変更している。

```
$ mkdir ~/catkin_lsdslam
$ cd ~/catkin_lsdslam
$ rosws init . /opt/ros/indigo
$ rosws set ~/catkin_lsdslam/package_dir -t .
$ echo "source ~/catkin_lsdslam/setup.bash">> ~/.bashrc
$ git clone https://github.com/tum-vision/lsd_slam.git lsd_slam
$ rosmake lsd_slam
```

###dynamic_reconfigureの修正

下記のエラーが起きた場合、dynamic_reconfigureのバクを修正する。

> CMake Error at /opt/ros/indigo/share/dynamic_reconfigure/cmake/cfgbuild.cmake:78 (string):
    string sub-command REPLACE requires at least four arguments.
  Call Stack (most recent call first):
    /opt/ros/indigo/share/dynamic_reconfigure/cmake/cfgbuild.cmake:99 (gencfg_cpp)
>    CMakeLists.txt:29 (include)

parameter_generator.pyの、144行目を削除する

```
$ sudo vi /opt/ros/indigo/lib/python2.7/dist-packages/dynamic_reconfigure/parameter_generator.py
```

>check_name(name)
>~~check_description(description)~~
>self.gen.fill_type(newparam)
>self.gen.check_type_fill_default(newparam, 'default', self.gen.defval[paramtype])
>self.gen.check_type_fill_default(newparam, 'max', self.gen.maxval[paramtype])
>

参考：
https://github.com/tum-vision/lsd_slam/issues/219
https://github.com/ros/dynamic_reconfigure/pull/76/files


###データセット(rosbag data)のダウンロード

```
$ wget http://vmcremers8.informatik.tu-muenchen.de/lsd/LSD_room.bag.zip
$ cd ~/catkin_lsdslam
$ unzip LSD_room.bag.zip
```

###データセット(rosbag data)で実行

```
$ roscore
$ rosrun lsd_slam_viewer viewer
$ rosbag play ~/catkin_lsdslam/LSD_room.bag
$ rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
```

![Screenshot from 2017-06-10 07:42:59.png](https://qiita-image-store.s3.amazonaws.com/0/73020/0f62756b-0540-5a9d-93b5-be9e7a9d46ee.png)

![lsd_slam.png](https://qiita-image-store.s3.amazonaws.com/0/73020/3b46d6d6-8890-56c7-afc6-56c20d2940b5.png)


###Kinect V1で実行

```
$ roslaunch freenect_launch freenect.launch
$ rosrun lsd_slam_viewer viewer
$ rosrun lsd_slam_core live_slam image:=/camera/rgb/image_color camera_info:=/camera/rgb/camera_info
```


###参考

LSD-SLAMをROSで試す1-インストールとビルドとクイックスタート @ 趣味なし奴のメモ帳
https://noshumi.blogspot.jp/2016/12/lsd-slamros1.html

LSD-SLAM: Large-Scale Direct Monocular SLAM ＠Daily Tech Blog
http://daily-tech.hatenablog.com/entry/2016/04/29/145737

第2回cv勉強会＠九州 LSD-SLAM ECCV'14 読み会 LSD-SLAM: Large-Scale Direct Monocular @ Satoshi Fujimoto,
https://www.slideshare.net/satoshibfujimoto/2cv-lsdslam

第22回画像センシングシンポジウムチュートリアル講演会　Kinect等の色距離センサを用いた点群処理と3D物体認識－ベーシックな手法と最新動向・ソフトウェアの紹介ー
https://staff.aist.go.jp/kanezaki.asako/pdf/SSII2016_AsakoKanezaki.pdf