Ubuntu Mate 20.04 on Raspberry Pi 4 Model BでD435iの動作確認をする

# 用意した物

1. Raspberry Pi 4 Model B (メモリ4GB)
1. インターネット接続設定とUbuntu 20.04 ServerにMateを導入済みのmicroSDカード(https://qiita.com/yohama/items/0c291e31c80850c8c112
)
1. Intel Realsense D435i
1. インターネットに繋がったWiFiルータ

D435iは、まだRaspberry Piには接続しません。

# 前準備

まずはapt関係を最新の状態にしておきます。

```bash
sudo apt update && apt dist-upgrade -y
```

次に、最低限必要なパッケージを入れておきます。

```bash
sudo apt install -y python3-pip
```

必須ではありませんが、make installでインストールされるものを名前付きで管理するために、porgを入れておきます。

```bash
sudo apt install -y porg
```

D435iをRaspberryPiのUSB3ポートに直接接続する場合、経験的には供給電力が不足するせいか動作が不安定になる傾向があるので、最大出力電流を1.2Aに引き上げる設定をしておきます。

```bash
sudo sh -c "echo 'max_usb_current=1' >> /boot/firmware/usercfg.txt"
```

ここで再起動をして、ここまでの準備で行って設定を、システムに反映させます。

```bash
reboot
```

# D435iの動作確認

## librealsenseのビルドとインストール

ビルドに必要とされるもの一式を、インストールしておきます。

```bash
sudo apt install -y git cmake python3-dev libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
sudo apt install -y libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
```

次に、IntelのGitHubレポジトリからlibrealsenseをgit cloneします。

```bash
cd ~
git clone https://github.com/IntelRealSense/librealsense.git -b v2.43.0 --depth 1
```

git cloneしたディレクトリに入って、build用ディレクトリを作り、cmakeしてからビルドして、make installでインストールします。

```bash
cd librealsense
mkdir build && cd $_
cmake ../ -DFORCE_RSUSB_BACKEND=true -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true
sudo make uninstall && make clean && make -j 4
sudo porg -l -p librealsense make install
```

ビルドには1時間20分程度かかりました。

make uninstallは、すでにインストールしたものを削除してクリーンにするために実行していますが、porgを使ってmake installして名前付きで管理するなら必須ではありません。

RealsenseのデバイスをOSに認識させるために、udevの設定を追加します。

```bash
sudo cp ../config/99-realsense-libusb.rules /etc/udev/rules.d/99-realsense-libusb.rules && sudo udevadm control --reload-rules && udevadm trigger
```

D435iをUSB3端子に接続して、RealSense Viewerを起動します。

```bash
realsense-viewer
```

初回起動時は、D435iのファームウェアの更新が促されるので、更新しておきます。

また、初回起動時は3D表示モードになっています。

![realsense-viewer-initial-3Dmode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/9530a55a-9c5b-d912-ae12-db4c82a15a5c.png)

3D表示は処理が重いので、ウィンドウ右上の"2D"の文字をクリックして、2D表示に切り替えます。

![realsense-viewer-initial-2Dmode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/653d1871-7f9a-32ec-cd4f-59bce0a97efd.png)

"Stereo Module"、"RGB Camera"、"Motion Module"のそれぞれの右側にある赤色で"off"となっているスライドスイッチのアイコンをクリックして、"on"にします。

以下のような表示になれば、動作確認完了です。

![realisense-viewer-2Dmode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/739d1dfb-3be2-92c1-dd25-71c8ccb84748.png)

## pyrealsense2のビルドとインストール

すでにmake installでシステムにコピーされたファイル一式を、一旦、削除します。

```bash
sudo porg -r librealsense
```

Pythonのライブラリ込みでビルドするように、cmakeにオプションを追加して実行してからビルド＆インストールします。

```bash
cmake ../ -DFORCE_RSUSB_BACKEND=true -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true -DBUILD_PYTHON_BINDINGS=true -DPYTHON_EXECUTABLE=$(which python3)
sudo make uninstall && make -j 4
sudo porg -l -p librealsense make install
```

ビルドは10分程度で終わりました。

Pyhtonでライブラリをインポートしたときに、ビルドした共有ライブラリを読み込めるように、環境変数に/usr/lib/python3/dist-packages/pyrealsense2を追加します。

```bash
echo 'export PYTHONPATH=$PYTHONPATH:/usr/lib/python3/dist-packages/pyrealsense2/' >> ~/.bashrc
source ~/.bashrc
```

Pythonのサンプルコードに必要なライブラリを、pip3でインストールします。

```bash
pip3 install numpy
pip3 install opencv-pyhon
```

Pythonのサンプルコードを実行して、動作確認します。

```bash
cd ../wrappers/python/examples
python3 align-depth2color.py
```

以下のような表示になれば、動作確認完了です。

![example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/bfc301c9-6767-618d-fe00-01894428de19.png)

距離閾値よりも遠くにあるピクセルがグレーで塗りつぶされて、手前の物体の描画が残るようになっています。

影ができてしまっていますが、動作確認なので、ここでは気にしないでおきます。

# 参考サイト

https://demura.net/education/17957.html

https://codechacha.com/ja/change-python-version/

https://qiita.com/nv-h/items/3bd206bebf9303dd6624