Jetson Xavier NXでRealSense D455を使用する際のインストール方法・注意点
カフェチームの山本です。
現在、カフェではコンピュータビジョン用のカメラとして、Intel製のRealSenseというデバイス利用し、RGB画像とDepth画像を取得しています。最近、RealSense D455という新しい型番が発売されました。
今回は、このD455を、シングルボードの1つである、Jetson Xavier NXでRealSenseを動かしてみました。以前、D435iという型番のデバイスを動かしており(その際も少し躓いたのですが)、同じインストール方法ではD455を動かすことができず、ビルドの設定を変更する必要がありました。動かす際につまづいた問題点、動かすために実装した手順を共有します。
D435iを動かした際の記事は、以下です。
RealSenseデバイスを複数台接続する場合の記事も掲載していますので、こちらも合わせてご覧ください。
0.Jetson Xavier NXを準備
D435iの場合と同じです。こちらの記事の「0.Jetson Xavier NXを準備」をご覧ください。
1.RealSense用ライブラリをインストール
問題点
D435iの場合と同じく、Githubに公開されている、Jetson用にlibrealsenseをインストール・ビルドするためのスクリプトを、そのまま利用しようとしました。
JetsonHacksNano/installLibrealsense
しかし、こちらのスクリプトをそのまま利用してインストールし、pyrealsenseを利用してD455に接続しようとすると、デバイスが見つかりませんでした。
具体的には、以下の様なスクリプトを実行しても、devicesが空のリストになり、何も表示されませんでした。
import pyrealsense2 as rs ctx = rs.context() devices = ctx.query_devices() for device in devices: print(device)
原因
先程のリポジトリのスクリプトが古く、前のバージョンのlibrealsense(v2.31.0)を参照して、ビルドしていました。D455は新しい型番で、古いバージョンではサポートされてなかったことが原因のようです。
JetsonHacksNano/installLibrealsense
2020/09/10現在で最新のバージョン(v2.38.1)では、正式にサポートされているので、こちらを利用するのが良さそうです。
解決法
先程のリポジトリのビルドスクリプトを、librealsenseのバージョンを設定を修正してから実行します。
また、他にも以下の点の修正が必要でした。
CUDAをバージョン合わせる
Jetson Xavier NX(JetPack 4.4)には、CUDA10.0がなく、CUDA10.2がインストールされているため、パスを変更します。
(もともと、Jetson Nano(JetPack 4.2)用のビルドスクリプトであるため、CUDA 10.0が指定されています)
CMakeにオプションを追加
デフォルトでは、python(Python2.7)用にライブラリをビルドするようです。そのため、python3へのパスを指定する必要があります。
オプションについては、公式のリポジトリで解説されています。
CMakeをバージョン更新する
Jetsonには、cmakeの3.10がインストールされていたのですが、これだと上でオプションを追加しても、python(Python2.7)用にビルドされてしまうようです。なので、バージョンをアップデートする必要があるようです。
これに関しては、以下のissueで議論されている内容を参考にしました。
pyrealsense2 on python3 Jetson Xavier NX · Issue #6980 · IntelRealSense/librealsense
install Realsense on Jetson Xavier agx · Issue #7078 · IntelRealSense/librealsense
インストールできた方法
CMakeの更新
以下のようにして、CMakeを更新します。(CMakeのバージョンはより新しいものでも問題ないと思います。)
cd ~ mkdir buildCMake cd buildCMake sudo apt-get install libssl-dev wget https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2.tar.gz tar xvf cmake-3.17.2.tar.gz cd cmake-3.17.2 sudo ./bootstrap # 結構待つ(数十分~1時間程度) sudo make -j5 sudo make install # cd ~ # rm -r -f buildCMake/
(実行後は、その時点で開いているターミナルでは、CMakeのパスがずれるため、実行エラーになるので、再度開き直す必要があります。)
librealsense・pyrealsenseのインストール
ターミナルで以下のコマンドを実行し、インストール・ビルドします。先ほどの解決法を踏まえ、途中でスクリプトファイルを修正しています。
終了すると、/usr/local/lib/python3.6/pyrealsense2/ にpython用のライブラリ(pyrealsense2)が出力されます(他のライブラリもインストールされます)。
# cd ~ git clone https://github.com/JetsonHacksNano/installLibrealsense cd installLibrealsense sh ./installLibrealsense.sh nano ./buildLibrealsense.sh ------------以下のように変更------------ LIBREALSENSE_VERSION=v2.31.0 → LIBREALSENSE_VERSION=v2.38.1 # D455を利用するため。v2.31.0ではサポート外。 NVCC_PATH=/usr/local/cuda-10.0/bin/nvcc → NVCC_PATH=/usr/local/cuda-10.2/bin/nvcc # Xavier NX(JetPack 4.4)には、CUDA10.2がインストールされているため # CUDA10.0はインストールされてない、Nano(JetPack 4.2)にはある "time " を消す # timeコマンドがあると、not foundという旨のエラーになる /usr/bin/cmake ../ -DBUILD_EXAMPLES=true -DFORCE_LIBUVC=true -DBUILD_WITH_CUDA="$USE_CUDA" -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS=bool:true → /usr/bin/cmake ../ -DBUILD_EXAMPLES=true -DFORCE_LIBUVC=true -DBUILD_WITH_CUDA="$USE_CUDA" -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=/usr/bin/python3 # Python3用のライブラリを出力させる(デフォルトではpython(Python2.7)用が出力されてしまう) -------------------------------------- sh ./buildLibrealsense.sh # 結構待つ(数十分) # cd ~ # rm -r -f ./installLibrealsense # rm -r -f ./librealsense
出力されたライブラリを移動します。(もしくはパスを追加しても良いかもしれません)。
sudo cp /usr/local/lib/python3.6/pyrealsense2/py* /usr/local/lib
2.確認
RealSense D455を接続した状態で、以下のPythonスクリプト実行し、D455のデバイスが表示されればOKです。
import pyrealsense2 as rs ctx = rs.context() devices = ctx.query_devices() for device in devices: print(device)
まとめ
Jetson Xavier NXでRealSense D455をPythonで動かすために、公開されているリポジトリのスクリプトを利用しました。D455を利用するには、指定されているバージョンが古いなどの問題がありました。スクリプトの設定を修正してから実行することで、正しくインストールでき、D455を利用することができました。