docker-compose upで立ち上がるROSのシミュレータと開発環境

#はじめに
ROSには良くできたシミュレータが多数あるものの、公式パッケージになっておらず自分でコンパイルする必要があったり、apt-get installするだけではすんなりと動かなかったり、、、と、自宅学習や授業・セミナーなどで利用する際に、インストールとセットアップで時間を取られてしまうことが多かったと思います。

そこでdockerさえインストールしてあれば、docker-compose upコマンド一発でシミュレータと開発環境が立ち上がるようにしたのが本プロジェクトです。

以前からVSCodeのdevcontainerの仕組みを使って立ち上がる各種設定済みのROS開発環境を公開していたのですが、各種シミュレータも立ち上げられるようにしました。

レポジトリはこちら:
https://github.com/devrt/ros-devcontainer-vscode

#使いかた

##dockerのインストール

以下の各方法でdockerをインストールしてください。

**Windowsの場合**

正式リリースされた、WSL2版のDocker for Windowsをインストールするのがおすすめです。

WSLでは、デフォルトでは利用プロセッサ数が少ないので、コマンドプロンプトで以下のコマンドを入力し、

```shell
notepad %UserProfile%\.wslconfig
```

メモ帳が開いたら以下の内容をコピー・アンド・ペーストしてセーブしてください。

```
[wsl2]
processors=2
swap=0
```

processorsにはWSLに割り当てたいCPUコア数を指定します。大きめの値を設定するとシミュレーションが早くなります。

開発環境はリモートサーバ上で立ち上げてWindowsからアクセスすることもできます（快適に動くのでおすすめです）。
その場合は「Linuxの場合」を参照してください。

**Macの場合**

以下のURLからDocker DesktopのMac版をダウンロードしてインストールしましょう。
https://hub.docker.com/editions/community/docker-ce-desktop-mac/

**Linuxの場合**

以下のコマンドでdockerとdocker-composeをインストールしてください。
apt-getでインストールできるdockerとdocker-composeは古いので、必ず以下のコマンドでインストールされる最新版を利用してください（Ubuntu 20.04であればapt-getでインストールされるdockerとdocker-composeでも動くそうです thanks to @uytrewq12345さん）。

```shell
$ curl -fsSL https://get.docker.com/ | sh
$ compose_version=$(curl https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
$ sudo curl -L https://github.com/docker/compose/releases/download/$compose_version/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
```

##シミュレータの選択と立ち上げ

まずは、レポジトリをチェックアウトしてください:

```shell
$ git clone https://github.com/devrt/ros-devcontainer-vscode.git
$ cd ros-devcontainer-vscode
```

`select-simulator.sh`スクリプトを起動するとシミュレータの選択画面が表示されます:

```shell
$ ./select-simulator.sh
```

選択が完了したら`docker-compose up`で開発環境を立ち上げましょう:

```shell
$ docker-compose up
```

初回起動時はシミュレータと開発環境がダウンロードされるので、起動までにしばらく時間がかかります。
しばらく待って環境が立ち上がったら、以下の各URLを開いてみてください。

シミュレータ画面
http://localhost:3000

Web IDE
http://localhost:3001

Juypter notebook
http://localhost:3002

リモートサーバでdocker-compose upしている場合は、localhostの部分をサーバのIPアドレスで置き換えてください。

#収録しているシミュレータ一覧

##入門者向け

###devrt/simulator-turtlesim

ROS入門者がまずは動かしてみるべきシミュレータです。
/cmd_velトピックにメッセージをpublishするとカメが動きます。TFの仕組みについても学習できます。

ライセンス: BSD
一次配布元URL: http://wiki.ros.org/turtlesim

###devrt/simulator-rrbot

URDFファイルの作成や、ros_controllerの学習ができます。
はじめはアームがブラブラしていますが、コントローラを有効にすると、しゃっきり制御がかかります。

ライセンス: BSD
一次配布元URL: http://gazebosim.org/tutorials/?tut=ros_control

##中級者向け

###devrt/simulator-turtlebot-flatland
box2dを使った軽量な2Dシミュレータです。
ROSのナビゲーションスタック（AMCLとmove_base）の学習ができます。

ライセンス: BSD
一次配布元URL: https://github.com/avidbots/turtlebot_flatland
[![turtlebot-flatland](http://img.youtube.com/vi/X7ENwUDyxfY/0.jpg)](http://www.youtube.com/watch?v=X7ENwUDyxfY)
https://www.youtube.com/watch?v=X7ENwUDyxfY

###devrt/simulator-panda-arm
Franka Emika社のPandaアームのシミュレータです。
Pandaアームは素直な自由度配置とトルク制御可能な関節を持っており、MoveIt!のチュートリアルで良く使われています。

ライセンス: BSD + Apache 2.0
一次配布元URL: http://docs.ros.org/melodic/api/moveit_tutorials/html/index.html

##上級者向け

###devrt/simulator-turtlebot3
TurtleBot3用のレーシングステージです。

ライセンス: Apache 2.0
一次配布元URL: https://github.com/ROBOTIS-GIT/turtlebot3
[![turtlebot3-autorace](http://img.youtube.com/vi/5fZmuPxMZz0/0.jpg)](http://www.youtube.com/watch?v=5fZmuPxMZz0)
https://www.youtube.com/watch?v=5fZmuPxMZz0

###devrt/simulator-ariac
産業用ロボットを使ったシミュレーション競技会（ARIAC）のステージです。

ライセンス: Apache 2.0
一次配布元URL: http://gazebosim.org/ariac
[![osrf-ariac](https://i.vimeocdn.com/video/643115776_640.webp)](https://vimeo.com/224134238)
https://vimeo.com/224134238

###devrt/simulator-vrx
海洋ロボットを使ったシミュレーション競技会（Virtual RobotX）のステージです。

ライセンス: Apache 2.0
一次配布元URL: https://github.com/osrf/vrx
[![osrf-vrx](http://img.youtube.com/vi/0Q2ehhmSz0Q/0.jpg)](http://www.youtube.com/watch?v=0Q2ehhmSz0Q)
https://www.youtube.com/watch?v=0Q2ehhmSz0Q

###devrt/simulator-uuv
無人潜水艇のシミュレータです。

ライセンス: Apache 2.0
一次配布元URL: https://uuvsimulator.github.io/
[![osrf-vrx](http://img.youtube.com/vi/6V_TR9i0k1Q/0.jpg)](http://www.youtube.com/watch?v=6V_TR9i0k1Q)
https://www.youtube.com/watch?v=6V_TR9i0k1Q

#他のシミュレータを使いたい

以下のURLでパッケージ化のリクエストを受け付けています。
https://github.com/devrt/simulator-index/issues

Dockerfileの書き方がわかる人は、自分でパッケージ化にもチャレンジしてみてください。simulator-indexへのpull requestもお待ちしています。
https://github.com/devrt/simulator-template

#うまく動かなかったら

こちらにissueを書いてください。開発者は日本人なので、日本語で大丈夫です。
https://github.com/devrt/ros-devcontainer-vscode/issues