Raspberry Pi 4 で Turtlebot3 を動かす (Raspbian Buster + ROS Melodic)

この記事では Raspberry Pi 4 に Raspbian Buster + ROS Melodic をセットアップして、 Turtlebot3 を動かす方法を紹介します。

[Turtlebot3 の e-Manual](http://emanual.robotis.com/docs/en/platform/turtlebot3/overview/) の手順が Raspbian Stretch + ROS Kinetic と少し古いバージョンだったのですが、なるべく新しいバージョンを使いたくゼロからセットアップしたので、その手順をまとめました。

## 用意するハードウェア

- Raspberry Pi 4 (4GB)
- microSD 16GB以上
- Turtlebot3 Burger
- (必要に応じて)マウス・キーボード・モニター

## Raspbian Buster のセットアップ

ここに関しては以下のような良い記事がたくさん出ているので割愛します。セットアップの際にモニターとかキーボードを繋ぎたくない人は、SSH の有効化と Wi-Fi 情報の設定を自動で行えるよう、microSDに `ssh` と `wpa_supplicant.conf` ファイルを配置しておくのがポイントです。(特に Raspberry Pi 4 は microHDMI 端子になったため、ケーブルを持っていない方が多いのではないかなと思います)

- [【Buster対応】Raspbianのインストールと最強の初期設定](https://jyn.jp/raspbian-setup/)

## ROS Melodic と Turtlebot3 パッケージのセットアップ

ROS の基本的なパッケージと、Turtlebot3 用のパッケージをインストールします。手順は以下の記事を参考にしました。

- [ラズパイ4/BusterにROSのmelodicを入れる](https://qiita.com/Ninagawa_Izumi/items/063d9d4910a19e9fcdec)

今回インストールするROSパッケージは以下の通りです。これらはメタパッケージなので、実際には100個以上のROSパッケージがインストールされます。そのため Raspberry Pi 4 でビルドすると1時間くらいはかかります。ちなみに Raspberry Pi 3 B+ でビルドしようとしたところ、メモリ不足のためか何度試しても途中で落ちてしまいました。

- `ros_comm`: ROS のフルバージョンから GUI ツールを除いた、コアパッケージ + コマンドラインツールのパッケージ
- `navigation`: ロボットの自律移動などを行うためのパッケージ
- `turtlebot3`, `turtlebot3_msgs`: Turtlebot3 用の ROS パッケージ

### ROS のパッケージリポジトリの追加

```bash
sudo sh -c 'echo "deb  http://packages.ros.org/ros/ubuntu  $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
```

### ビルドのためのパッケージのインストール

```bash
sudo apt install python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
```

### rosdep の初期化

```bash
sudo rosdep init
rosdep update
```

### 作業用ディレクトリの作成

以下のディレクトリはビルド用のワークスペースで、ビルドされたパッケージ群は最終的に `/opt/ros/melodic` 以下にインストールされます。

```bash
mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws
```

### wstool を使ってインストールするパッケージ群のリストを作成

先ほど説明した ros_comm, turtlebot3 などのパッケージを rosinstall_generator の引数として指定します

```bash
rosinstall_generator ros_comm navigation turtlebot3 turtlebot3_msgs --rosdistro melodic --deps --wet-only --tar > melodic-turtlebot3-wet.rosinstall
wstool init -j4 src melodic-turtlebot3-wet.rosinstall
```

### パッケージのダウンロード、ビルド、インストール

100個以上のパッケージを順にビルドしていくので、１時間くらい時間がかかります。気長に待ちましょう。

```bash
rosdep install -y --from-paths src --ignore-src --rosdistro melodic -r --os=debian:buster
sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic -j2
```

### シェルの起動時に ROS のセットアップを行うようにする

```bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```

## 動作確認

さて、ここまで問題なく進めばROSのインストールは完了したので、あとは動作確認です。Raspberry Pi 4 を Turtlebot3 に搭載し、ケーブル等を接続します。OpenCR の電源を入れておきましょう。

### roscore の起動

roscore は立ち上げっぱなしにする必要があるので、これ以降のコマンドを実行する場合は別のターミナルを開くか roscore をバックグラウンドで実行しましょう。

```bash
roscore
```

### Turtlebot3 bringup の実行

コマンドを実行後に、赤文字でエラーなどが出ていないかを確認しましょう。

```bash
roslaunch turtlebot3_bringup turtlebot3_core.launch
```

### Turtlebot3 を動かす

さらに別のターミナルから、リモートコントロールのノードを実行します。

```bash
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
```

w, a, x, d などのキーを入力し、Turtlebot3 が動くことが確認できたら、無事動作確認は完了です！

## まとめ

この記事では Raspberry Pi 4 に Raspbian Buster + ROS Melodic をセットアップして、 Turtlebot3 を動かす方法を紹介しました。ROS パッケージのビルド周りは時間がかかってしんどいので、Ubuntu が使えるなら、おとなしく Ubuntu を選んでおいた方が無難ですね。

時代はもう ROS 2 だと思うので、 ROS 2 での動かし方もまた機会があったら紹介したいと思います。

### 免責事項

投稿内容は個人的な意見であり、所属する企業を代表するものではありません。