Jetson NanoにROSをインストールする方法

![20190603031221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/f2e44c2e-be21-e94f-9a40-da56770a99ef.png)

# Jetson NanoにROSをインストールする方法
　Jetson Nanoでロボットを制御したりしたいので、ロボット制御によく使われるミドルウェアのROS（Robot Operating System）をインストールします。

　以下のブログ記事を参考に、Jetson Nanoの基本的なセットアップは実施しておいてください。ディープラーニング関係のソフトのセットアップまでは不要です。

https://karaage.hatenadiary.jp/entry/2019/04/29/073000

　JetPack 4.2.2以前を想定していますが、JetPack 4.4でも動作を確認しています。

　ただし、JetPack 4.4を使用している場合は、あらかじめ以下コマンドを実行してシンボリックリンクをはっておいてください。OpenCVが4.x系になったための対応です。

```sh
$ sudo ln -s /usr/include/opencv4/ /usr/include/opencv
```

　ROSのインストールは、以下のSTEREOLABSというメーカのサイトを参考にしました。STEREOLABSはZEDというステレオカメラを作っているメーカーです。NVIDIAのGPU・Jetson・ROSに積極的に対応しているメーカーです。Jetson NanoでのROSのセットアップ方法を公開しているのもそういう理由からでしょう。

[Getting Started with ROS on Jetson Nano](https://www.stereolabs.com/blog/ros-and-nvidia-jetson-nano/)

　今回は、以下の点を変更しています。

- ZEDのステレオカメラは使わないので後半のステレオカメラ関係のセットアップを省略
- ビルドシステムとして、catkin_makeでなくcatkin buildを使用（好みです）
- セットアップをスクリプト化

　スクリプトにしたので、以下3行を実行すれば待っているだけでROSがインストールできます。インストールは時間がかかります（數十分程度）

```sh
$ git clone https://github.com/karaage0703/jetson-nano-tools
$ cd jetson-nano-tools
$ ./install-ros-melodic.sh
```

　また、自分の場合、何故か最後のcatkin_wsでのビルドに失敗していました。ビルドに失敗していたら、以下の通りWSを作ってやりなおせばOKと思います。

```sh
$ source ~/.bashrc
$ rm -rf ~/catkin_ws
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin init
$ catkin build
$ source ~/.bashrc
```


## apt(apt-get) updateのエラーに関して（補足）
　セキュリティー関係で認証keyが変更になったようです（2019年6月頃）。updateでエラーが出る場合は、以下2行のコマンドで古いキーを削除して新しいキーを入れ直しましょう。

```sh
$ sudo apt-key del 421C365BD9FF1F717815A3895523BAEEB01FA116
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
```

　冒頭で紹介した、インストールスクリプトのキーは修正済みなので、これからスクリプト使ってアップデートする人は、上記の作業は不要です。

参照元：[apt update fails / cannot install pkgs: key not working?](http://answers.ros.org/question/325039/apt-update-fails-cannot-install-pkgs-key-not-working/)


　もっと簡単な方法としては、[tiryho](https://twitter.com/tiryoh)さん作成の以下のスクリプト1行実行するだけでもOKです。

```sh
$ curl -SsfL git.io/ros-gpg-key-update | sh
```

参照元：[ros_gpg_key_update(GitHub)](https://github.com/Tiryoh/ros_gpg_key_update)


## Jetson NanoでのROS動作確認
　ROSのインストールが完了したら、動作確認をしましょう。

　ターミナルを開いて、以下実行します。

```sh
$ roscore
```

　次に、新しいウィンドウでターミナルを開き、以下実行します。

```sh
$ rosrun turtlesim turtlesim_node
```

　以下のようなカメさんの画面が表示されたらOKです。
![20190603031221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/f2e44c2e-be21-e94f-9a40-da56770a99ef.png)


　以下でRvizというROSの可視化ソフトを起動してみましょう。

```sh
$ rosrun rviz rviz
```

　素早く立ち上がります。Rvizはかなり重いソフトなのでRaspberry Piだと起動しなかったりします。Jetson Nanoのパワーが体感できますね。


![20190603031227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/9392555c-80bb-78eb-ee5d-4dfb4d11e31e.png)


## まとめ
　Jetson NanoにROSを入れてみました。Ubuntuなので、特に苦労することなくすんなりインストールできますね。

　ROSを使えば、ROSに対応している色々なデバイスやロボットを制御することができます。身近なところだと、ルンバなどが面白いかもしれませんね。以前、ラズパイでルンバをROSで制御したことがあるので、参考までに紹介します。まだ試せていませんが、Jetson Nanoでも同じ要領で同じことができるはずです。ただ、恐らくルンバの電源では電力不足なので、電源は別から供給する必要があると思います。

[ルンバをRaspberry Piを使ってROSでコントロールできるように改造してみた（半田付け無しでOK）](https://karaage.hatenadiary.jp/entry/2017/05/12/073000)

　ロボット用の3Dカメラとしては、STEREOLABSのZEDのステレオカメラも良いのですが、個人で買うには高いので安く小型で高性能な、Intel Realsense D415/D435がおすすめです。こちらは、別途セットアップ記事を書く予定です。


## 参考リンク
[JetsonNano2GB,GR-ROSEを使ってフォロを動かす](https://qiita.com/motoms/items/1a1167736c6150712d94)
Jetson Nano 2GBでも本記事の内容をもとにROSをインストールできるようです

## 関連記事
https://qiita.com/karaage0703/items/b14c249aa33112669ee4

https://qiita.com/karaage0703/items/604ff6e0a8287aa0dce7

## 変更履歴
- 2022/02/14 リンク追記
- 2020/11/16 参考リンク追加
- 2020/06/05 JetPack 4.4での動作確認に関して追記