連載記事

  1. NVIDIA Jetson Nano 2GBプレビューキットのセットアップ
  2. NVIDIA JetPack SDK対応のROS 2 Dockerイメージ作成

前回までの記事で、Jetson Nano 2GBのためのROS 2 FoxyのDocker実行環境を整備しました。 前回の記事のアップデートとして、先日Jetson Nano 2GBに正式対応したJetPack 4.4.1がリリースされていたので、そちらに対応するように記事の内容を修正しました。合わせてご覧ください。

ROS 2対応のディープラーニングデモのセットアップ(Docker上で)

前回もお世話になったNVIDIA Jetsonの開発者Dustin FranklinさんのレポジトリにROS 2対応のディープラーニングデモがすでにあります。

https://github.com/dusty-nv/ros_deep_learning

物体認識、物体検出、セマンティックセグメンテーションまでカバーしており、さまざまな学習モデルに対応しています。個人で用意した学習モデルを使うのでなければ、画像処理ならこれを使うだけで事足りそうです。

ただ、これをDockerコンテナで動かそうとビルドしてみたのですが、残念ながらエラーが出てビルドを完遂することができませんでした。深追いできていませんが、CUDAのライブラリのセットアップが足りないかバージョン違いが原因のようです。

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppicc_LIBRARY (ADVANCED)
    linked by target "jetson-utils" in directory /workspace/src/jetson-utils

数時間悪戦苦闘してみたのですが、結局解決できませんでした。これ以上は時間の無駄なので、諦めてネイティブ環境で動かすことに変更します。 ここまでDockerでROS 2 Foxyを動かそうと頑張ってきたのですが、残念なお知らせです。

ROS 2対応のディープラーニングデモのセットアップ(ネイティブで)

気を取り直して、一から上記パッケージをビルドするために、ROS 2 Eloquent環境をセットアップします。 現在のJetson Nano 2GBのネイティブ環境はUbuntu 18.04相当なので、ROS 2 Foxyではなく、ROS 2 Eloquentを使うことにしました。

ROS 2 Eloquentのインストール

公式サイトの手順に則って、ROS 2 Eloquentをインストールします。

https://index.ros.org/doc/ros2/Installation/Eloquent/Linux-Install-Debians/

RViz2などのGUIアプリケーションをJetson Nano 2GB上で動かすことはないため、僕は ros-eloquent-ros-base をインストールしました。ついでに次節で必要になるパッケージもインストールしておきます。

sudo apt install ros-eloquent-ros-base \
                 ros-eloquent-vision-msgs \
                 ros-eloquent-launch-xml \
                 ros-eloquent-launch-yaml \
                 python3-colcon-common-extensions

jetson-inferenceのインストール

README.mdに沿って、jetson-inferenceをインストールします。このとき、学習モデルのダウンロードの選択肢がポップアップしますが、僕はデフォルト設定で進みました。

https://github.com/dusty-nv/ros_deep_learning#jetson-inference

ros_deep_learningパッケージのビルド

最後にROS 2対応のディープラーニングデモのパッケージをビルドして完成です。

mkdir ~/ros/eloquent/src && cd ~/ros/eloquent/src
git clone https://github.com/dusty-nv/ros_deep_learning
cd ~/ros/eloquent
colcon build
source install/local_setup.bash

動作確認

動作確認のために、ウェブカメラをJetson Nano 2GBに接続して動画撮影を行いました。

$ ros2 launch ros_deep_learning video_viewer.ros2.launch input:=v4l2:///dev/video0 output:=file://my_video.mp4

inputoutput引数を変更することで、CSI接続のカメラ入力やウィンドウ出力などを選べるようになっており、非常によくできています。

https://github.com/dusty-nv/jetson-inference/blob/master/docs/aux-streaming.md#input-streams

カメラストリーミングのノードと動画保存のためのノードが動いています。GPU支援が効いていることも jtop から見て取れます。素晴らしい。

長くなってきたので、肝心のディープラーニングデモのテストは次回に持ち越します。