こんにちは。kora です。
以前、時間をかけて Raspberry Pi 上で ROS 2 Humble 向けの RealSense 環境を構築しましたが、今ではありがたいことにビルド済みのパッケージがリリースされています。ですが、利用できる librealsense2 のパッケージが 2 種類存在し、どちらをインストールすればいいのか迷ったので調査しました。
公開されている librealsense2 のバイナリパッケージ
2023 年 2 月現在、大きく分けて 2 種類のパッケージが公開されています。
- Ubuntu 22.04 対応の librealsense2 (v2.53.1) (2022 年 12 月リリース)
- ROS 2 Humble 用パッケージ ros-humble-librealsense2 (v2.51.1) とそのラッパー ros-humble-realsense2-camera (4.51.1) (ソースは 2022 年 9 月、バイナリは 2022 年 11 月リリース)
これらの違いについて、以下にまとめます。
RealSense のバックエンド
まず前提として、librealsense2 をビルドする際はプラットフォームや OS に合わせて適切なバックエンドを選択することが推奨されています。Ubuntu ではバックエンドに V4L か RSUSB (libusb) を選択できます。 Back End Recommended Configuration
- 基本的には V4L の方が高速で安定です。ただしカーネルパッチをあてないと取得できないデータや利用できない機能があります。D435i Motion Module Hardware Timestamps using LIBUVC #5212
- libusb はパッチが不要でカーネルバージョンに依存しませんが、複数台のRealSenseを使う用途には向きません。D415 depth sensor streams seem to have stopped working – defective device? #10787
公式から提供されているパッケージがどちらのバックエンドでビルドされているかは公開されていないのですが、GitHub の Issue を見るに以下のようです。role of catkin package librealsense2 #1073
- librealsense2 パッケージは V4L
- ros-<distro>-librealsense2 パッケージは RSUSB (libusb)
Ubuntu 各バージョンのサポート状況
Ubuntu 16.04 〜 22.04 のサポート状況について調査しました。ROS のディストリビューションは ROS 1 Kinetic 〜 Noetic、ROS 2 Dashing 〜 Humble を対象としました。プラットフォームは x86 (amd64) と arm64 のみ記載しています。
※1 バイナリの提供はなし。ソースからビルドすれば利用可能。ARM ubuntu20 distribution #11380 Release to apt repository for ubuntu focal / arm64 #9040
※2 ros-dashing-realsense2-camera はバイナリの提供はなし。代わりにros-dashing-realsense-ros2-camera が利用できるがこちらは現在開発停止。
カーネルパッチの当て方
librealsense2 パッケージは V4L でビルドされているため、多くの場合カーネルパッチが必要になります。カーネルパッチのあて方は環境によって異なります。
- プラットフォームが x86 かつ OS が Ubuntu で、パッケージマネージャを使ってインストールする場合、librealsense2-dkms をインストールすることでカーネルパッチが適用されます。
-
JetPack 4.4.1以降のカーネルには一部のカーネルパッチが適用済みになっているようです。Release 2.43.0 NVidia Jetson – User Notification
そのためパッチをあてなくても、一部機能が使えなかったりワーニングが出る以外はおおむね動作します。ただし、フル機能を使用したい場合は GitHub リポジトリに用意されたカーネルパッチを適用するスクリプトを実行する必要があります。Param ‘/camera/rgb_camera/power_line_frequency’ #1776 - Raspberry Pi の場合、RSUSB (libusb) が推奨されているので、基本的にパッチをあてることはないようです。
CUDA サポート状況
librealsense のビルド時に CUDA サポートが有効なら GPU を利用できますが、この対応状況も異なるようです。 Installing Driver (and SDK) from ROS Dependency with CUDA Support for Jetsons #2303 Latest Release (v2.51.1) Does NOT Have CUDA Enabled #10911
- librealsense2の x86 バイナリは CUDA サポートなし
- librealsense2の arm64 バイナリは CUDA サポートあり
- ros-<distro>-librealsense2は CUDA サポートなし
なお、librealsense2 SDK は OpenGL によるアクセラレーションにも対応していますが、realsense2-camera のラッパーでは活用されていないようなのでここでは取り上げていません。 D455 on Jetson Xavier very slow #2396 Installing Driver (and SDK) from ROS Dependency with CUDA Support for Jetsons #2303
まとめ
ビルド済みパッケージに関してはあまりまとまった情報がなく、GitHub の Issue から情報をかき集めてくる形になりました。ここにある情報が全て正しいとは限りませんが、おおよその雰囲気は見て取れたかなと思います。
今回の研修の開発環境は、Raspberry Pi (arm64 版の Ubuntu 22.04) のため、librealsense2 のビルド済みパッケージは現在利用できません。ですが、利用する RealSense は 1 台のみなので、バックエンドは RSUSB (libusb) で問題なく、カーネルパッチは不要です。NVIDIA 製 GPU は搭載されていないので CUDA サポートも要らないということになります。従って、Raspberry Pi (arm64 版の Ubuntu 22.04) に 1 台だけ接続するのであれば、ビルド済みの ros-humble-librealsense2 と ros-humble-realsense2-camera を使用すれば良いという結論になりました。