Intel® RealSense™ Depth Camera D435i を使ってみる(2)

前回は、Intel® RealSense™ Depth Camera D435i をWindows 10で使用するところまでの内容でした。今回は、D435iをRaspberryPi 4 で使ってみようと思います。(SDKサンプルを実行するのは次回の予定です)

環境の確認

  • Raspberry Pi 4 Model B 4GB
  • Intel® RealSense™ Depth Camera D435i

手順

手順については公式githubに掲載されていましたので、これに従います。https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_raspbian.md

”These steps are for D435 with Raspberry Pi3 and 3+.”という事ですので、Raspberry Pi4では若干変更が必要でした。

また、環境によっては、以下の手順でも何らかのエラーが発生するかもしれません(特にビルド周り)。うまく行かない場合はエラーメッセージなどを手がかりに検索してみてください。

Check versions

インストール時の環境は以下の通りでした。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

$ uname -a
Linux raspberrypi 5.4.51-v7l+ #1327 SMP Thu Jul 23 11:04:39 BST 2020 armv7l GNU/Linux

$ sudo apt update;sudo apt upgrade
$ sudo reboot
$ uname -a
Linux raspberrypi 5.4.51-v7l+ #1327 SMP Thu Jul 23 11:04:39 BST 2020 armv7l GNU/Linux

$  gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/8/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 8.3.0-6+rpi1' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1) 

$ cmake --version
cmake version 3.13.4

Add swap

初期値だと少ないので、2048まで増やしておきましょう。

$ sudo vim /etc/dphys-swapfile
CONF_SWAPSIZE=2048

$ sudo /etc/init.d/dphys-swapfile restart swapon -s

Install packages

$ sudo apt-get install -y libdrm-amdgpu1 libdrm-amdgpu1-dbg libdrm-dev libdrm-exynos1 libdrm-exynos1-dbg libdrm-freedreno1 libdrm-freedreno1-dbg libdrm-nouveau2 libdrm-nouveau2-dbg libdrm-omap1 libdrm-omap1-dbg libdrm-radeon1 libdrm-radeon1-dbg libdrm-tegra0 libdrm-tegra0-dbg libdrm2 libdrm2-dbg
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ libdrm-amdgpu1-dbg が見つかりません
E: パッケージ libdrm-exynos1-dbg が見つかりません
E: パッケージ libdrm-freedreno1-dbg が見つかりません
E: パッケージ libdrm-nouveau2-dbg が見つかりません
E: パッケージ libdrm-omap1-dbg が見つかりません
E: パッケージ libdrm-radeon1-dbg が見つかりません
E: パッケージ libdrm-tegra0-dbg が見つかりません
E: パッケージ libdrm2-dbg が見つかりません

”なんちゃら-dbg”のパッケージが無いようなので、-dbg関連を抜いてみます。

$ sudo apt-get install -y libdrm-amdgpu1 libdrm-dev libdrm-exynos1 libdrm-freedreno1 libdrm-nouveau2 libdrm-omap1 libdrm-radeon1 libdrm-tegra0 libdrm2

エラーは表示されませんでしたので、とりあえずは大丈夫なのかなと判断しました。次に進みます。

$ sudo apt-get install -y libglu1-mesa libglu1-mesa-dev glusterfs-common libglu1-mesa libglu1-mesa-dev libglui-dev libglui2c2

$ sudo apt-get install -y libglu1-mesa libglu1-mesa-dev mesa-utils mesa-utils-extra xorg-dev libgtk-3-dev libusb-1.0-0-dev

update udev rule

librealsense を入手します。

$ cd ~
$ git clone https://github.com/IntelRealSense/librealsense.git
$ cd librealsense
$ sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ 
$ sudo udevadm control --reload-rules && udevadm trigger 

update cmake version (if your cmake is 3.7.2 or before 3.11.4)

※既にCMAKEのバージョンが3.13.4のため、ここはパスします。

set path

$ vim ~/.zshrc
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

$ source ~/.zshrc

install protobuf

ここはgithubの手順だとうまく行かなかったので、別の手順でprotocolbuffersをインストールしました。ビルドに時間が掛かりますが気長に待ちましょう。

$ sudo apt install autoconf automake libtool curl
$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protobuf-all-3.7.1.tar.gz
$ tar -zxvf protobuf-all-3.7.1.tar.gz
$ cd protobuf-3.7.1
$ ./configure
$ make 
$ make check
$ sudo make install

$ cd python
$ export LD_LIBRARY_PATH=../src/.libs

$ python3 setup.py build --cpp_implementation 
$ python3 setup.py test --cpp_implementation
$ sudo python3 setup.py install --cpp_implementation

$ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
$ export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3

$ sudo ldconfig

$ protoc --version
libprotoc 3.7.1

$ sudo reboot

install tbb

$ cd ~
$ wget https://github.com/PINTO0309/TBBonARMv7/raw/master/libtbb-dev_2018U2_armhf.deb
$ sudo dpkg -i ~/libtbb-dev_2018U2_armhf.deb
$ sudo ldconfig
$ rm libtbb-dev_2018U2_armhf.deb

install OpenCV

既にOpenCVがインストールされている環境なので、ここはパスしました。

install RealSense SDK/librealsense

ビルドに時間が掛かりますが気長に待ちましょう。

$ cd ~/librealsense
$ mkdir  build  && cd build
$ cmake .. -DBUILD_EXAMPLES=true -DCMAKE_BUILD_TYPE=Release -DFORCE_LIBUVC=true
$ make -j1
$ sudo make install

install pyrealsense2

python3 環境なので、for python3 を実行しました。ビルドで時間が掛かりますが気長に待ちましょう。

$ cd ~/librealsense/build

for python3
$ cmake .. -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=$(which python3)

$ make -j1
$ sudo make install

add python path
$ vim ~/.zshrc
export PYTHONPATH=$PYTHONPATH:/usr/local/lib

$ source ~/.zshrc

change pi settings (enable OpenGL)

$ sudo apt-get install python-opengl
$ sudo -H pip3 install pyopengl
$ sudo -H pip3 install pyopengl_accelerate
$ sudo raspi-config
"7.Advanced Options" - "A7 GL Driver" - "G2 GL (Fake KMS)"

最後にOSを再起動します。

$ sudo reboot

Realsense をつなぎます

ターミナルを開いて、realsense-viewerを実行します。

$ realsense-viewer

無事にRealSense Viewerが起動しました。この画面は3Dで表示しています。

ちゃんと立体的に撮影されていますね。

人形を縦に配置してみます。

真正面からだと重複するので、見下ろす角度で撮影しました。

ずらして配置してみます。

2Dも問題なく表示されました。

Raspberry Pi でIntel® RealSense™ Depth Cameraが使えると、いろいろと使ってみたいシーンが広がりますね。

次回はRealSense SDKのサンプルか、OpenVINOと組み合わせる内容を試してみたいと思います。

おまけ

本記事で使った”座る人”はhttps://www.thingiverse.com/thing:796261 から借用し、FlashForge Creator PROで印刷しました。