Jetson Xavier NXでRealSense D455を使用する際のインストール方法・注意点

2020.09.10

カフェチームの山本です。

現在、カフェではコンピュータビジョン用のカメラとして、Intel製のRealSenseというデバイス利用し、RGB画像とDepth画像を取得しています。最近、RealSense D455という新しい型番が発売されました。

今回は、このD455を、シングルボードの1つである、Jetson Xavier NXでRealSenseを動かしてみました。以前、D435iという型番のデバイスを動かしており(その際も少し躓いたのですが)、同じインストール方法ではD455を動かすことができず、ビルドの設定を変更する必要がありました。動かす際につまづいた問題点、動かすために実装した手順を共有します。

D435iを動かした際の記事は、以下です。

Jetson Xavier NXでRealSense D435iを使用する際のインストール方法・注意点・実装コード

RealSenseデバイスを複数台接続する場合の記事も掲載していますので、こちらも合わせてご覧ください。

Jetson Xavier NXでRealSenseを使用する際のインストール方法・注意点・実装コード(2台編)

Jetson Xavier NXでRealSenseを使用する際のインストール方法・注意点・実装コード(4台編)

0.Jetson Xavier NXを準備

D435iの場合と同じです。こちらの記事の「0.Jetson Xavier NXを準備」をご覧ください。

Jetson Xavier NXでRealSense 435iを使用する際のインストール方法・注意点・実装コード

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)では、正式にサポートされているので、こちらを利用するのが良さそうです。

IntelRealSense/librealsense

解決法

先程のリポジトリのビルドスクリプトを、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へのパスを指定する必要があります。

オプションについては、公式のリポジトリで解説されています。

IntelRealSense/librealsense

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を利用することができました。