RaspberryPi4にROS melodicをインストール

#はじめに
RaspberryPi4にROSをインストールした時の記事（22年1月時点）です。
ROSをRaspberryPi4にインストールするにあたり、使用OSがUbuntu20.04 LTSであればROS（Noetic）をインストール方法がインターネット上に豊富に公開されており、「sudo apt-geto install ～」コマンドをいくらか入力することで簡単にインストールできます。

しかしながら、今回は以下2つの課題があったために今回はUbuntu20.04 LTS上のROSインストールとせず、RaspberryPi OS 32bit『Buster』にてROSをインストールしていきます。

課題1
RaspberryPi4にUbuntu20.04LTSを適用した場合、RaspberryPiのGPIOを制御するためのライブラリである「wiringPi」が完全に動作しません。具体的には、GPIOをHigh/Low簡単に切り替える程度に一部動作はできるものの、ラズベリーパイのもつSPI（Serial Peripheral Interface）を動作させることができませんでした。今回はROSを用いたシステム上でSPIも動かすことを目指します。

課題2
将来的にrviz等のGUIツールでROSで構築したシステムをデバッグしたいため、Ubuntu20.04LTSを適用する場合は必然的にDesktop版となりますが、RaspberryPi4にUbuntu20.04LTS Desktop版をインストールすると起動時の立ち上がり時間が非常に遅いです。

以上を踏まえ、RaspberryPi4AにはRaspberryPi OS 32bit『Buster』を適用し、ROS（Melodic）をインストールしてみたので覚書として記載します。なお、22年1月時点のRaspberry Pi OSの最新版は『Bullseye』ですが、これだと ROS（Melodic）をうまくインストールできるかわからなかったので、1つ古い『Buster』を採用しています。

#ROS（Melodic）のインストール手順
RaspberryPi OSにてROSをインストールする場合、必要なパッケージをビルドしていく必要がある上、ビルドするための環境自体のインストールから必要となり険しいです。

特に以下2つのサイトを参考に手順を踏みました。
http://forestofazumino.web.fc2.com/ros/ros_install.html 
http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Melodic%20on%20the%20Raspberry%20Pi 

###ROSをaptレポジトリに追加

```php:実施手順（推奨）
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu raring main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget http://packages.ros.org/ros.key -O - | sudo apt-key add –
$ sudo apt-get update
$ sudo apt-get upgrade
```
ROSのインストール手順を色々調べていると以下のようにしてレポジトリ追加している手順も結構あり、はじめはこれらを使っていましたが、公開鍵を設定するapt-keyコマンドが全然通りませんでした。何回かapt-keyコマンド打ってたらすごく稀に通りますが、断念しました。参考に記載します。

```php:実施手順（非推奨）
$ 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://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$ sudo apt-get update
$ sudo apt-get upgrade
```
###pipとツールのインストール
Raspberrypi OSの場合、ROSインストールに必要な後に出てくるツール類はpipを用いないとインストールできませんでした。
更に、python-pipをインストールしようとするとできず、python3-pipをインストールを推奨されましたが、これをインストールしてしまうと、python2と3のライブラリが競合して（?）以降の手順でwstool等が動かなくなったので要注意。

```php:実施手順
$ sudo apt-get install python-pip
$ sudo pip install rosdistro
$ sudo pip install wstool
```

###セットアップツールのインストール

```php:実施手順
$ cd ~/Downloads
$ wget https://pypi.python.org/packages/source/s/setuptools/setuptools-1.1.6.tar.gz
$ tar xvf setuptools-1.1.6.tar.gz
$ cd setuptools-1.1.6
$ sudo python setup.py install  
```

上記コマンド群がダメな場合は以下です。

```php:実施手順（上記コマンド群がダメな場合）
$ sudo apt-get install setuptools
```

###各種ツールのインストール

```php:実施手順
$ sudo apt-get install python-stdeb
$ sudo pip install rosdep
$ sudo pip install rosinstall-generator
$ pip install -U rospkg
$ sudo apt-get install python-rosdep python-rosinstall-generator build-essential
```

###rosdep初期化

```php:実施手順
$ sudo rosdep init
$ rosdep update
```
###catkin Workspaceの作成

```php:実施手順
$ mkdir -p ~/ros_catkin_ws
$ cd ~/ros_catkin_ws
```

###インストール：Desktop: ROS, rqt, rviz, and robot-generic libraries
pipでちゃんと各ツールがインストールできていれば問題ないと思います。
LiDARで取得した点群情報を後々にrvizを使ってGUIで表示させたいので、ここではDesktop版をインストールしています。

```php:実施手順
$ rosinstall_generator desktop --rosdistro melodic --deps --wet-only --tar > melodic-desktop-wet.rosinstall
$ wstool init src melodic-desktop-wet.rosinstall
```

###依存関係の解決
RaspberryPi OSに『Buster』を採用していれば問題ないと思います。

```php:実施手順
$ cd ~/ros_catkin_ws
$ rosdep install -y --from-paths src --ignore-src --rosdistro melodic -r --os=debian:buster
```

###ビルド
RaspberryPi OSに『Buster』を採用していれば問題ないと思います。

```php:実施手順
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
$ source /opt/ros/melodic/setup.bash
$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
```

これにてROSはインストール完了！