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

# 前準備

## Swap領域の拡張

搭載メモリ2GB版Raspberry Pi 4ではビルド中にフリーズするので、Swap領域を拡張しておく。

```bash
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo sh -c 'echo "/swapfile\tnone\tswap\tsw\t0\t0" >> /etc/fstab'
```

## pythonコマンドのデフォルトをPython3に変更

Python2系は使わない方針なので、システムのPythonのデフォルトをPython3系になるように設定する。

```bash
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.6   2         auto mode
  1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.6   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
```

# D435iの動作確認

aptでお手軽にlibrealsense2をインストールする方法だと、距離画像と姿勢は取得できたものの、RGBカラー画像が取得できなかった。
https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md


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

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

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

IntelのGitHubレポジトリからlibrealsenseをクローンしてきて、ビルドする。

```bash
cd ~
git clone https://github.com/IntelRealSense/librealsense
git checkout -b v2.34.0 refs/tags/v2.34.0
cd librealsense
mkdir build
cd build
cmake ../ -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true
sudo make uninstall && make clean && make -j 4 && sudo make install
```

執筆時点ではv2.34.0以降だと、このあとにpyrealsense2を使おうとすると、インストールはされるのにうまく動かなかったので、v2.34.0でチェックアウトした。
https://github.com/IntelRealSense/librealsense/issues/6820

また、SDカードのSwap領域にSwapoutするためか、ビルドにはかなり時間がかかった（約3時間）。

udevの設定をコピーして、反映させる。

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

RealSense Viewerを起動する。

```bash
realsense-viewer
```

"Stereo Module"、"RGB Camera"、"Motion Module"のそれぞれの右側にある"off"を、ポインティングデバイスでクリックして、"on"にする。

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

![realsense-viewew.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/46a76c45-b183-a873-f50c-f0951be8eb1c.png)

当初、v2.36.0のrealsense-viewerで確認をしていて、起動直後にファームウェアの更新がかかっていたせいかもしれないが、v2.34.0のrealsense-viewerで起動直後に"Invalid Value in rs2_get_option"Warningのダイアログが出たり、常に"Failed to read busnum/devnum."が出力されたりする。

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

```bash
sudo apt install python-dev

cmake ../ -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true -DBUILD_PYTHON_BINDINGS=true -DPYTHON_EXECUTABLE=$(which python3)

make -j 4 && sudo make install

echo 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib' >> ~/.bashrc

source ~/.bashrc
```

ここでも、SDカードのSwap領域にSwapoutするためか、ビルドにはかなり時間がかかった（約1-2時間）。

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

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

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

![pyrealsemse2_example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/9d20a1fc-4c9a-1005-88d3-83442236b87d.png)

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

# 参考サイト
https://demura.net/education/17957.html
https://codechacha.com/ja/change-python-version/
https://qiita.com/nv-h/items/3bd206bebf9303dd6624