前回は、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で印刷しました。
フリーのITエンジニア(何でも屋さん)。趣味は渓流釣り、サッカー観戦、インラインホッケー、アイスホッケー、RaspberryPiを使った工作など。AI活用に興味があり試行錯誤中です。