Docker上のROS2 Foxy環境でNavigation2を動かす

# はじめに

以前ubuntu20.04上のROS2 Foxy環境にTurtlebot3のシミュレーション環境とNavigation2をインストールしてNavigation2を動かす記事を書きました。

https://qiita.com/porizou1/items/d63a41fc1e478dfa5ab6

執筆時現在Navigation2 ドキュメントのGetting Startedの方法でTurtlebot3パッケージをインストールして簡単にNavigation2が動かせるようになっていたので、今回はubuntu20.04環境がない方向けにDocker上にROS2 Foxy環境を構築してNavigation2を実行する方法を書きます。

https://navigation.ros.org/getting_started/index.html



# 動作環境

Dockerが動く環境であればubuntuでもMacでもWindowsでも何でも可。
Docker自体のインストール方法については省略します。


https://qiita.com/zaki-lknr/items/db99909ba1eb27803456

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ja


# docker-ros2-desktop-vncでROS2環境の構築

Docker上のROS2 Foxy環境構築にはTiryohさんが公開している
`docker-ros2-desktop-vnc`を使用します。

こちら`ubuntu-desktop-lxde-vnc`を使ってブラウザ上でGazeboやrvizも動くGUIのROS2環境がコマンド1行で構築できる非常に便利なリポジトリです。

https://github.com/Tiryoh/docker-ros2-desktop-vnc

Dockerが使える環境で以下のコマンドを実行

```bash
$ docker run -p 6080:80 --shm-size=512m tiryoh/ros2-desktop-vnc:foxy
```

最初はImageのダウンロードをするので時間がかかります。(全部で4.8GBくらい)
以下実行後画面

```bash
docker run -p 6080:80 --shm-size=512m tiryoh/ros2-desktop-vnc:foxy
Unable to find image 'tiryoh/ros2-desktop-vnc:foxy' locally
foxy: Pulling from tiryoh/ros2-desktop-vnc
a70d879fa598: Pull complete 
c4394a92d1f8: Pull complete 
10e6159c56c0: Pull complete 
54ce6fc330e9: Pull complete 
1956e2222f9d: Pull complete 
1c994628a0c6: Pull complete 
e56a311ab0d9: Pull complete 
```

ダウンロードが終わったらブラウザを開いて、以下アドレスにアクセス

```bash
http://127.0.0.1:6080/
```

こんな感じの画面になります。

![Screenshot from 2021-04-30 18-20-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399606/0bc4242d-2981-c59b-21b8-98962c52e861.png)



# ROS2とGazeboの動作確認

左下メニューの`System Tools` → `LXTerminal`からターミナル起動


![Screenshot from 2021-04-30 18-31-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399606/d616ae20-4788-77b3-4cbf-6d768e625ea5.png)

適当なGazeboデモを実行

```bash
$ gazebo /opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_camera_demo.world 
```

Gazeboが起動してモデルが動いていれば成功

![Screenshot from 2021-04-30 20-33-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399606/8554f1a6-ed5c-8151-4410-f03a730823ca.png)

# Navigation2とTurtlebot3パッケージのインストール

Navigation2のインストール

```bash
$ sudo apt install ros-foxy-navigation2
$ sudo apt install ros-foxy-nav2-bringup
```

Turtlebot3パッケージのインストール

```bash
$ sudo apt install ros-foxy-turtlebot3*
```

Turtlebot3の環境変数の設定

```bash
source /opt/ros/foxy/setup.bash
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/foxy/share/turtlebot3_gazebo/models
```

# Navigation2の実行

以下を実行してTurtlebot3 GazeboワールドとNavigation2を起動
最初はモデルの読み込みに時間がかかります。

```bash
$ ros2 launch nav2_bringup tb3_simulation_launch.py
```

rviz2とGazeboが起動したらあとはNavigation2ドキュメント通り
rviz2上で`2D Pose Estimate`をクリックして地図上の位置をドラックして初期位置を指定、
`Navigaton2 Goal`をクリックして地図上の移動したい場所をドラックしてゴールを指定。

Gazebo上のモデルが指定したゴールに向かって動き出せば成功です。

![Screenshot from 2021-04-30 20-53-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399606/a0c1c73a-2421-7db7-3f08-bc3bbc482e13.png)


# 参考



https://memoteki.net/archives/2955#Docker


https://navigation.ros.org/getting_started/index.html


https://qiita.com/karaage0703/items/957bdc7b4dabfc6639da