(2021.2.9 Pythonラッパー(pyrealsense2)を使うを追記)
目的
Raspberry Pi で RealSense (L515)を扱いたい。
できるならmatadata, 加速度・ジャイロセンサーも使いたい(UVC
Backendでなくて)。
このため、Raspberry
Piのkernelにpatchを適用・ビルドし、RealSenseが動作する(realsense-viewerが実行できる)ところまでを確認した。
このブログでは、ビルド手順以外でつまったところ、補足的な内容を残す。
やった〜🎉🎉🎉💯💯💯
— nb.o (@Nextremer_nb_o) February 5, 2021
Raspberry Pi 4の64 bit OSでRealSense L515が動いた〜✌️✌️✌️
kernelにパッチをあてて、librealsenseをビルドしたので加速度もジャイロセンサーも認識している〜👍👍👍
もちろん、FORCE_RSUSB_BACKEND=OFF
kernelビルドひさびさで大変だった😇 pic.twitter.com/gE0YbXL9AR
リファレンス
以下を参考にした。
-
Raspbian(RaspberryPi3) Installation - librealsense
-
Linux Ubuntu Installation - librealsense
-
Raspberry Pi 4でkernelを更新してD435iを動かす - Qiita
-
realsense_raspberry4.patch - Delicode / librealsense
-
Announcement: Raspberry Pi 4 Model B with two USB 3 ports now available
#4272 - librealsense
- Kernel building - Raspberry Pi Documentation
1.はRaspberry Piのインストールガイドであるが、UVC_BACKENDでの手順。
RealSenseのラズパイ向けのインストールガイドを見ると
— nb.o (@Nextremer_nb_o) January 31, 2021
Super PINTOさんのリポジトリが出てくる。びっくり。https://t.co/05kOMBC4vc
2, 4, 5.はRaspberry Pi のkernelにpatchを適用するものだが、当時のkernel
バージョンは4.x系で、現在のバージョン(5.x系)ではうまくいかない。
あ!librealsenseのraspberry pi 4 向けのパッチだ!https://t.co/zp3nWaNQiE
— nb.o (@Nextremer_nb_o) February 4, 2021
ビルド
ビルド手順については、Githubのリポジトリにアップしたのでそちらを参照。
つまったこと
とくにつまったことを記載する。
kernel pathの作成
librealsenseにあるpatchは以下だが、そのままRaspberry
Piのkernel(5.10.13)には適用できなかった。
おそらく、最新のkernel ソースの変更に伴うものであると推測。
このため、上記のpatchをもとにRaspberry Piのkernelに適用できるpatchを作成した。
Raspberry Pi OS 64 bitのkernel ビルド
最初、Raspberry Pi上でのkernelのソースビルドを実行しようとした。
以下は公式ドキュメントの手順。
しかし、いざビルドを行うとエラーとなって実行できない。。。
どうやら、Raspberry Pi OS 64 bitでのkernel ビルドはできないとのこと。
(公式ドキュメントもよく読むとクロスコンパイルの手順はあるけど、64
bitのRaspberry Pi上でのビルド手順はない。。。)
このため、Host PCでのクロスコンパイルを行うこととした。
WSL(Windows Subsystem for Linux)でビルドするとSDカードに書き込みできない...
Raspberry PiのkernelはWSLのUbuntu上でクロスコンパイルが可能(実際できた)。
しかしながら、SDカードへ書き込む際に問題が発生する。
rootsf(ext4)への書き込みが必要だが、Windowsが認識できないためマウントできず書き込めない。。。
結局、Fedora 33(のvirt-managerで動かしているUbuntu)から書き込みを行った。
ただ、WSL2ではext4もマウントできるようなので、上記は私の認識不足かもしれない。。。
librealsenseのビルド
依存関係のあるライブラリの一つにlibapriltag(オプション)がある。
これをインストールしてlibrealsenseをビルドするとビルドエラーとなる。このため、インストールせずにビルドした。
/usr/bin/ld: CMakeFiles/rs-pose-apriltag.dir/rs-pose-apriltag.cpp.o: in function `apriltag_manager::apriltag_pose_destroy(apriltag_pose_t*)': /home/pi/librealsense-2.41.0/examples/pose-apriltag/rs-pose-apriltag.cpp:106: undefined reference to `matd_destroy' /usr/bin/ld: /home/pi/librealsense-2.41.0/examples/pose-apriltag/rs-pose-apriltag.cpp:106: undefined reference to `matd_destroy' /usr/bin/ld: CMakeFiles/rs-pose-apriltag.dir/rs-pose-apriltag.cpp.o: in function `main': /home/pi/librealsense-2.41.0/examples/pose-apriltag/rs-pose-apriltag.cpp:76: undefined reference to `tag36h11_create()' /usr/bin/ld: /home/pi/librealsense-2.41.0/examples/pose-apriltag/rs-pose-apriltag.cpp:92: undefined reference to `tag36h11_destroy(apriltag_family*)' /usr/bin/ld: CMakeFiles/rs-pose-apriltag.dir/rs-pose-apriltag.cpp.o: in function `apriltag_manager::detect(unsigned char*, rs2_pose const*) const': /home/pi/librealsense-2.41.0/examples/pose-apriltag/rs-pose-apriltag.cpp:123: undefined reference to `estimate_pose_for_tag_homography(apriltag_detection_info_t*, apriltag_pose_t*)' /usr/bin/ld: /home/pi/librealsense-2.41.0/examples/pose-apriltag/rs-pose-apriltag.cpp:161: undefined reference to `matd_create' collect2: error: ld returned 1 exit status make[2]: *** [examples/pose-apriltag/CMakeFiles/rs-pose-apriltag.dir/build.make:92: examples/pose-apriltag/rs-pose-apriltag] エラー 1 make[1]: *** [CMakeFiles/Makefile2:1919: examples/pose-apriltag/CMakeFiles/rs-pose-apriltag.dir/all] エラー 2 make[1]: *** 未完了のジョブを待っています....
32 bit版(Raspberry Pi OS)は?
おそらく、kernelビルドもうまくいくはずだが、試していない。
余力があれば試してみる。
Pythonラッパー(pyrealsense2)を使う(2021.2.9追記)
Pythonでpyrealsense2はimportできるのだが、いざAPIを呼び出すとエラーになることが分かった。
あれーーー?
— nb.o (@Nextremer_nb_o) February 8, 2021
もしかしてpythonモジュールできてない???
AttributeError: module 'pyrealsense2' has no attribute 'pipeline'
$ python3 Python 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. <<< import pyrealsense2 as rs <<< pipeline = rs.pipeline() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'pyrealsense2' has no attribute 'pipeline' <<< quit()
原因はライブラリへのPathが通っていないと推測。
/usr/lib/python3/dist-packages/pyrealsense2/配下にある
- pybackend2.cpython-37m-aarch64-linux-gnu.so
- pyrealsense2.cpython-37m-aarch64-linux-gnu.so
が、Pathが通っていないためと推測。
このため、.bashrcにPYTHONPATHを追加することで無事呼び出せることが確認できた。
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3/dist-packages/pyrealsense2/
0 件のコメント:
コメントを投稿