この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
カフェチームの山本です。
現在、カフェではコンピュータビジョン用のカメラとして、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を利用することができました。