Jetson NanoのROSでRealsense R200を使う


|環境|
|-|
|JetsonNano|
|Ubuntu 18.04LTS|
|ROS melodic|

はじめまして。h_tajiriです。
今回、Qiitaで記事を書くのが初めてなので、至らない部分もあると思いますが宜しくお願いします。

#前書き

私はUbuntuとかROSははっきり言って初心者なのですが、突然自作ロボットでVisualSLAMやりたいなあと思い立って、勉強がてら先月Jetson Nanoを購入しました。色々調べていくうちにORB_SLAM2と言うというソフトとRealsenseにたどり着きました。そこで、RealsenseをAmazonで探し始めたのですが、これが2-3万円ととても高い(学生なので)。そこでヤフオクを徘徊して調べていると2500円のRealsenseを発見してしまい、衝動買いしました。しかし買った後に気付いたのですが、私が購入したRealsenseはR200という型番で既に販売を終了している古い機種でネットに記事が殆ど転がっていませんでした。初心者殺しですね。

#JetsonNanoにROSをインストールする

からあげさんのこの記事通りにインストールしました。https://qiita.com/karaage0703/items/aa54e086f0a2f165d3e9
インストールするとROS melodicが使えるようになります。

あとメモリ不足でビルドに失敗することが結構あるので、SWAPファイル(仮想メモリ？)を作成します。またまたから揚げさんの記事を参考にしました。https://qiita.com/karaage0703/items/b14c249aa33112669ee4

```
$ git clone https://github.com/JetsonHacksNano/installSwapfile
$ cd installSwapfile
$ ./installSwapfile.sh
```
これで6Gのスワップファイルが作成されます。

#RealsenseR200を使えるようにする
Ros indigoだとRealsense r200,f200,sr300のRosパッケージがつかえるのですがJetsonNanoのROSはmelodicなので導入方法が分からず仕舞いでした。
先に結論から言うと librealsenseのlegacyブランチとrealsense_cameraのindigo-develブランチ両方をROSのワークスペースのsrcフォルダにクローンして、ビルドしてあげると動きました。またビルド方法ですがcatkin buildでビルドするとなぜかパッケージが使えなかったのですがcatkin_makeでビルドすると動きました。もちろん依存パッケージ等もインストールしないといけないのでそれらについても書いていきます。

ちなみにRealsense r200,f200,sr300はこれからやるやり方で使えますが、D435やD415,T265は使えませんので、またまたまたから揚げさんの記事https://qiita.com/karaage0703/items/cb9bbe1b4f2504f8ad0d を参考にして頂ければと思います。

## 依存パッケージのインストール
この二つのページを参考にしました。
https://github.com/IntelRealSense/realsense-ros/tree/indigo-devel
https://github.com/IntelRealSense/librealsense/tree/legacy

```
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install libglfw3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libssl-dev
sudo apt-get install ros-melodic-rgbd-launch
```

## librealsenseのクローン
筆者はROSのワークスペースはcatkin_wsと言う名前にしています。
からあげさんの記事を参考にした人なら同じようにcatkin_wsが作られているはずです。
実はこれが一番つまずいたところなのですが、殆どの記事では、liblreasenseをRosワークスペースに入れずにmake&make installでビルドしてインストールしています。しかしそうするとrealsense_cameraパッケージがRosで使えませんので、catkin_ws/srcに入れてあげましょう。

```
cd ~/catkin_ws/src
git clone -b legacy https://github.com/IntelRealSense/librealsense.git
```
最後にまとめてビルドするのでとりあえず置いときましょう。

## realsense_camera(rosパッケージ)のクローン
その前に下準備してあげます。

```
nano ~/.bashrc または vi ~/.bashrc
# 以下の1行を追記
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
```

やっとROSパッケージをクローンします。
ブランチ名にindigoって入ってますが使えます。これに気付かず私は悪戦苦闘しました。

```

cd ~/catkin_ws/src
git clone -b indigo-devel https://github.com/IntelRealSense/realsense-ros.git
```

クローンしたらrealsenseと言うフォルダがsrcの中に出来ていますので、その中にあるrealsense_cameraというフォルダをcatkin_ws/srcの直下に移動させてあげます。たぶん移動しなくてもそのまま使えるとおもうのですが一応移動させました。

## ビルドする
私はcatkin_makeでビルドしました。catkin build でビルドすると何故か、パッケージが読み込まれないという問題に直面したからです。既にcatkin buildでビルドしてしまったことがある人は, catkin cleanコマンドを実行した後にcatkin_makeコマンドを実行するとビルドできます。

```
cd ~/catkin_ws
catkin clean
catkin_make
```
とやってあげるとビルドが始まります。しかし私の場合realsense_cameraパッケージのビルドでエラーが出てしまいました。

以下を実行してあげるとビルドが出来るようになりました。理由は分かりません。

```
rosdep update
rosdep install --skip-keys=librealsense --ignore-src --from-path -i src -y -r
```

改めてビルドします。

```
cd ~/catkin_ws
catkin_make
catkin_make install
source ~/.bashrc
```
これでうまくいくと思います。うまくいかなかったらごめんなさい。

## udevルールのコピー
realsensをe読み込むために必要なようです。

```
sudo cp /~catkin_ws/src/librealsense/config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
```

## 起動して確認してみる


```
ターミナル1
roscore
ターミナル2
roscd realsense_camera
roslaunch realsense_camera r200_nodelet_rgbd.launch
ターミナル3
rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 \map camera_link 100 &
rosrun rviz rviz -d $(rospack find realsense_camera)/rviz/realsenseRvizConfiguration1.rviz
```

たぶんこれでrviz上で表示できるはずです。
パッケージが見つからない的なのが表示されたら

```
rospack profile
source ~/.bashrc
または
source ~/catkin_ws/devel/setup.bash
```
を実行してからもう一度試してみてください。
以上で終わりです。
ちなみにrosを使わずにrealsense r200を使う方法もありますが使い道が分からないので割愛します。参考文献に乗せておきます。

# 参考文献
https://github.com/IntelRealSense/realsense-ros/tree/indigo-devel
https://github.com/IntelRealSense/librealsense/tree/legacy
https://jsk-recognition.readthedocs.io/en/latest/install_realsense_camera.html
https://github.com/IntelRealSense/realsense-ros/issues/386
http://twinklesmile.blog42.fc2.com/blog-entry-86.html?sp
https://zigsow.jp/item/305465/review/327086
http://yura2.hateblo.jp/entry/2016/03/04/RealSense_R200%E3%81%AE%E6%96%B0%E3%81%97%E3%81%84ROS%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%28realsense_camera%29%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86
https://qiita.com/karaage0703/items/aa54e086f0a2f165d3e9
https://qiita.com/karaage0703/items/b14c249aa33112669ee4