Raspi4用のubuntuMATEでROS-noeticを使う



![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) ラズパイ4とubuntu20.04でROSを小気味良く使いたい人向け
<br>  


![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) NUC（小型PC）のUbuntu20.04にも同じ手順で入りました。

## やること
ラズパイ4用にubuntu20.04のMATEが出ています。
そこで64bitで動くこのOSを利用してROS-noeticを使えるようにします。
ubuntu20.04をそのままラズパイ4に入れるとちょっと重たいですが、MATEならubuntuデスクトップも若干軽くなるような気がしています。ベストな方法かどうかはわかりません。
  
ちなみにNUC（小型PC）のUbuntu20.04にも同じ手順ですんなり入りましたので、おすすめです。(2023.11.12日現在)

## そもそもMATEとROSとは
MATEはubuntuの軽量版で、デスクトップGUIが扱えます。
ROSはロボット開発のオープンソースのプラットフォームです。センサやアクチュエータなどの情報やシミュレータなどを統合的に扱えます。

## 準備物・実施環境
- PCかMac
- 16G以上のSDカード
- USBキーボード、USBマウス、HDMIディスプレイ
- ターミナルについての最低限の知識

## 参考
https://qiita.com/take4eng/items/70f167320ede46e4139c



## STEP 1 : MATEのダウンロード
https://ubuntu-mate.org/download/

こちらの「Raspberry pi 64bit...」をクリックし、次のページで「20.4.3 LTS」を選びます。そのあとは「Direct Download」などを選んでDLします。

## STEP 2 : Raspberry Pi Imagerのダウンロード

必要に応じてSDカードフォーマッターでSDカードを初期化します。(次のRaspberry Pi Imagerでもフォーマットは可能です。)

https://www.sdcard.org/ja/downloads-2/formatter-2/



次に、以下よりお使いのPC用のRaspberry Pi ImagerをDLします。

https://www.raspberrypi.com/software/

Raspberry Pi Imagerを起動し、MATEのイメージをSDカードに書き込みます。

Raspberry Pi Imagerの「CHOOSE OS」のボタンから、メニュー一番したの「Use custom」を選び、DLしたMATEのファイルを指定します。（「ubuntu-mate-20.04.1-desktop-arm64+raspi.img.xz」など。amd64+raspi...だと書き込めないので注意。）

書き込み先を「CHOOSE STRAGE」から選び、「WRITE」を押せばあとは待つだけです。

これだけでラズパイ用のubuntu20.04LTS-MATEのOS入りSDカードが出来上がります。便利。

## STEP 3 : MATEの起動

ラズパイにSDカードを入れれば起動するはずです。
MATEの指示に従い、言語、wifi、時間帯、などを選んでいきます。
最後にユーザー名とパスワードを入力し終えると、言語の設定やシステムのDLがはじまります。
かなり時間がかかります。フリーズしたのかなというほど反応がなくなりますが、放置して完了まで待ちます。

## STEP 4 : 日本語化したディレクトリ名を英語に戻しておく
参考）https://qiita.com/taiko19xx/items/d1a001bfc25245b91354

ここからターミナルで作業します。ターミナルはMATEのデスクトップ上で右クリックからでも開くことができます。

```sh:
cd ~/
```

```sh:
LANG=C xdg-user-dirs-gtk-update
```
ウィンドウが出るので、指示に従い表示を変更します。


## STEP 5 : 自動アップグレードを止めておく
参考）https://ameblo.jp/myalgia/entry-12603421320.html
自動アップグレードは大事な時に更新が始まったりしそうで怖いので止めておきます。

```sh:
sudo dpkg-reconfigure unattended-upgrades
```
```sh:
sudo reboot
```

ROSの導入前にアップグレードをするとうまくいかない可能性があるので、ここでのsudo apt upgradeはしない方が良さそうです。

## STEP 6 : ディスプレイの自動オフを解除

次のROSのインストールはかなり時間がかかり、画面が消えると進捗がわからなくなるのでディスプレイの自動オフを解除しておきます。

MATEのデスクトップの右上の歯車アイコンをクリック→「ハードウェア」→「電源管理」でシステムやディスプレイのスリープ設定で確認しないを選択します。


## STEP 7 : ROS noeticを導入する
参考先の記事の1~7までを行います。
参考）https://qiita.com/take4eng/items/70f167320ede46e4139c

```sh:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
```sh:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
```
```sh:
sudo apt update
```
```sh:
sudo apt install ros-noetic-desktop-full
```
```sh:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
```
```sh:
source ~/.bashrc
```
```sh:
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
```
```sh:
sudo rosdep init
```
```sh:
rosdep update
```

ここで、catkin buildをインストールします。(catkin_makeよりも新しい方式です)
参考）https://qiita.com/harumo11/items/ae604ba2e17ffda529c2


```sh:
sudo apt-get install python3-catkin-tools
```

ワークスペースのディレクトリを作ります。

```sh:
mkdir -p ~/catkin_ws/src
```

ワークスペースを初期化します。

```sh:
cd ~/catkin_ws
```

```sh:
catkin init
```

仕上げに再起動します。

```sh:
sudo reboot
```

## STEP 8 : ROS の起動確認

#### ROSCOREの起動
ターミナルを開いて

```sh:
roscore
```
とします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/1d8c846a-4255-3457-655e-a9c5a8b4cd7e.png" width=400/>

こんな感じの表示が出たらROSCOREは動いています。

#### turtlesimの動作をテスト

roscore用に開いたターミナルとは別の新しいターミナルを開いて下記を実行します。

```sh:
rosrun turtlesim turtlesim_node
```
すると、小さな亀がいるウィンドウがでてくるはずです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/63d4a0ec-4dc5-0359-a042-dd0795c0f2da.png" width=400/>



もう一つ別のターミナルを開いて、下記を実行します。

```sh:
rosrun turtlesim turtle_teleop_key
```
このターミナルをアクティブにしてカーソルキーを押すと、先ほどのウィンドウの亀を操作できます。

#### さらにrqt_graphも動作テスト

```sh:
rosrun rqt_graph rqt_graph
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/0c86a40d-340a-81f5-e307-816f4ceaa578.png" width=400/>
NODEとTOPICの流れの関係が可視化されます。

#### rvizも使えます

```sh:
rviz
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/24c54f8d-3d17-8420-3935-d2df2f559793.png" width=400/>
いかにも使えそうな感じですがまだ試していません。

#### gazeboも起動できます。

gazeboも起動だけならできます。

```sh:
gazebo
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/87b85a54-388f-70cf-9a17-cea821800b35.png" width=400/>

さすがに重そうです。

## STEP 9 : roscdを使えるようにします。

roscdをしたときに飛び先がさっきつくったワークスペースに来るようにします。

```sh:
echo "export ROS_WORKSPACE=$HOME/catkin_ws" >> ~/.bashrc
```
うまく書き込めない場合は sudo nano ~/.bashrc などで設定ファイルを開き、文末に「export ROS_WORKSPACE=$HOME/catkin_ws」を追記します。

```sh:
sudo reboot
```
再起動後にターミナルでroscdと打ち、~/catkin_ws に移動できれば成功です。

## STEP 10 : ファイルのバックアップ

とりあえずROSが動くSDカードができました。
かなり時間のかかる作業だったので、ここで一旦ファイルのバックアップをとっておくことをおすすめします。

以下の作業はおまけになります。


## おまけ1 : 日本語入力をいれておく

```sh:
sudo apt-get install ibus-mozc
```

```sh:
sudo reboot
```



## おまけ2 : グラフィック用メモリの割り当てを変更する

MATEをraspiに入れると初期設定ではグラフィックへのメモリが小さく、ブラウザでyoutubeを見たりすることができません。ビデオ用のメモリの割り当てができるようにしておきましょう。

まず、raspi-configを使えるようにインストールします。
参考）https://qiita.com/penguinprogrammer/items/a252676a3ce6bd1410da

```sh:
sudo nano /etc/apt/sources.list
```
開いたファイルの最後に「deb http://archive.raspberrypi.org/debian/ buster main」を記入し、Ctrl + x　でセーブして終了します。


```sh:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FA3303E
```
```sh:
sudo apt-get update
```
```sh:
sudo apt-get install raspi-config
```

```sh:
sudo apt reboot
```
再起動後に、raspi-configを立ち上げ、設定をおこないます。

```sh:
sudo raspi-config
```
メニュー画面から「4 Performance Options」→「P2 GPU Memory」を選び、
「192 192MiB for ARM, 64MiB for VideoCore」などを選択し、ビデオメモリを増やします。
最後にFinishを選び、メニュー画面から再起動をします。

再起動後にブラウザでyoutubeにアクセスし、動画が滑らかに再生できるか確認しましょう。
なお、サウンド出力は別途設定が必要になりますので、音がならない場合には各自で調べて設定してください。
この設定は適宜変更して、利用するアプリに応じてパフォーマンスが最大化されるようにしておきましょう。
（メモリが8Mあるラズパイだと安心ですね。）

## おまけ3 : ソフトウェアのアップグレード

ROSが入る前にアップグレードするとちょっと怪しい感じでしたが、ROS導入後は無事にアップグレードが通りました。ので、ここでやっておくとスッキリするかもしれません。事前のバックアップを忘れずに。

```sh:
sudo apt upgrade
```

時間はかなりかかります。


## おわりに
ubuntu専用機を持っておらず、ラズパイでubuntuとROS-noeticをつかうならデスクトップ環境もつかえるこのMATEで作るのがなにかと便利な気がします。

また、さらに快適に使いたい場合には、メモリカードからではなく、高速なUSBメモリにUSBブータブルなOSを入れ、USB3.0コネクタに挿して使えばもっとキビキビと動くかもしれません。
SDカードは16GBと32GB両方試したところ、16GBの方が動きが軽妙な気がしましたが、容量ではなくカードの品質の差かもしれません。

前にも同じような記事を書きましたが、もう２年前のものになります↓
[Qiita] [ラズパイ4/BusterにROSのmelodicを入れる](https://qiita.com/Ninagawa_Izumi/items/063d9d4910a19e9fcdec)