メモリ2GB版Jetson NanoでDocker内のROSを使うまで

Jetson Nano 2GB Developer Kit(メモリ2GB版Jetson Nano)でROSインストール済みのDockerイメージを用意して、コンテナ内のROSを使うまでをメモします。

この記事はROS/ROS2 Advent Calendar 2020の16日目の記事です。

目次

概要

Jetson Nano 2GB Developer Kit用JetPackでJetson Nanoを起動して、ROSインストール済みのDockerイメージをベースにdusty-nv/jetson-inferencedusty-nv/ros_deep_learningをインストールしたイメージを作成します。
メモリ4GB版でも適宜読み替えればそのまま実行できるかもしれませんが、部分的にしかメモリ4GB版では確認していないため、「メモリ2GB版Jetson NanoでDocker内のROSを使うまで」ということにしています。

使用するもの

Jetson Nano 2GB Developer Kit

あわせて読みたい
Amazon | NVIDIA Jetson Nano 2GB 開発者キット | NVIDIA | メモリ 通販 NVIDIA Jetson Nano 2GB 開発者キットがメモリストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能です。アマゾン配送商品は、通常配送無料(一部除く)。

Jetson Nano用のmicroSD

Dockerイメージを保存するので64GB以上はほしいです。

あわせて読みたい
Amazon.co.jp: サンディスク microSD 128GB UHS-I Class10 読取り最大100MB/s 【Nintendo Switch メーカー... Amazon.co.jp: サンディスク microSD 128GB UHS-I Class10 読取り最大100MB/s 【Nintendo Switch メーカー動作確認済】 SanDisk Ultra SDSQUAR-128G-EPK エコパッケージ : ...

Jetson Nano用の無線LANアダプタ

2.4GHz帯しか対応していませんが、追加でのドライバインストールせずに使えたのでおすすめです。

あわせて読みたい
Amazon | TP-Link WIFI 無線LAN 子機 11n/11g/b デュアルモード対応モデル 英語パッケージ TL-WN725N(EU) |... TP-Link WIFI 無線LAN 子機 11n/11g/b デュアルモード対応モデル 英語パッケージ TL-WN725N(EU)が無線LAN子機ストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届...

Jetson Nano用のUSB Type-Cの電源

ノートパソコンを充電するときに使っているものと同じものを使っています。

あわせて読みたい
Amazon | Anker PowerPort Atom III Slim (Four Ports)(PD 充電器 65W 4ポート USB-C)【PowerIQ3.0搭載 /... Anker PowerPort Atom III Slim (Four Ports)(PD 充電器 65W 4ポート USB-C)【PowerIQ3.0搭載 / PD対応/GaN(窒素ガリウム)採用】 iPhone iPad iPod 各種、 MacBook Air、...
あわせて読みたい
Amazon | Anker PowerLine II USB-C & USB-C 2.0 ケーブル (1.8m ブラック)【USB-IF認証取得/超高耐久/PD対... Anker PowerLine II USB-C & USB-C 2.0 ケーブル (1.8m ブラック)【USB-IF認証取得/超高耐久/PD対応】Galaxy S10 / S10+ / S9 / S9+、iPad Pro (2018, 11インチ) / iPad Ai...

Jetson Nanoに接続するカメラ

CSI接続のカメラモジュールを使います。USB接続のWebカメラでも使えると思います。

あわせて読みたい
Amazon | SainSmart IMX219 AIカメラモジュールNVIDIA Jetson Nanoボード用8MPセンサー120度FoV | SainSmar... SainSmart IMX219 AIカメラモジュールNVIDIA Jetson Nanoボード用8MPセンサー120度FoVがベアボーンPCストアでいつでもお買い得。当日お急ぎ便対象商品は、当日お届け可能で...
あわせて読みたい
Amazon | ロジクール Webカメラ C270n HD 720P ストリーミング 小型 シンプル設計 Windows Mac Chrome 対応... ロジクール Webカメラ C270n HD 720P ストリーミング 小型 シンプル設計 Windows Mac Chrome 対応 ブラック ウェブカメラ ウェブカム PC Mac ノートパソコン Zoom Skype 国...

Jetson NanoへのJetPackのインストール

JetPack 4.4.1を使用します。
NVIDIA DeveloperのJetPack SDKのページ(https://developer.nvidia.com/embedded/jetpack)によると、Jetson Nano 2GBはJetPack 4.4.1以降(JetPack 4.4.1にはL4T 32.4.4とCUDAのライブラリ等が含まれています)でしか動かないようです。

JetPack 4.4.1 includes L4T 32.4.4 with these highlights:

  • Support for Jetson Nano 2GB Developer Kit
  • All other features and benefits from L4T 32.4.3

JetPack 4.4 includes L4T 32.4.3 with these highlights:

  • Support for upgrading JetPack and L4T using debian package management tool
  • Support for Generic Timestamping Engine (GTE) for Jetson AGX Xavier and Jetson Xavier NX
  • Support for Dynamic Frequency Scaling (DFS) for Video Image Compositor (VIC) using actmon
  • SE (Security Engine) samples to demonstrate hardware backed authentication and encryption capabilities of Jetson TX2 series, Jetson AGX Xavier and Jetson Xavier NX modules
  • Utility to fuse multiple Jetson modules simultaneously
  • Option to specify APP partition size on the microSD card during initial configuration at first boot of Jetson Xavier NX and Jetson Nano Developer Kits
  • Supports Vulkan 1.2

余談ですが、JetPackとL4Tのそれぞれのバージョンの対応リストは以下のページから確認できます。

NVIDIA Developer
JetPack Archive This page includes access to previously released versions of JetPack. The latest version of JetPack is always available under the main NVIDIA JetPack product pa...

イメージのダウンロード

以下のページからJetson Nano 2GB用のJetPack4.4.1のイメージファイルをダウンロードします。6.5GBほどありました。

NVIDIA Developer
Jetson Nano 2GB Developer Kit - Get Started Find resources to build AI apps, AI robots, and more.

以下の画像はJetPack SDKのトップページのスクリーンショットです。

Jetson Nano 4GB用の jetson-nano-4gb-jp441-sd-card-image.zip とJetson Nano 2GB用の jetson-nano-2gb-jp441-sd-card-image.zip があり、Jetson Nano 2GBでは jetson-nano-4gb-jp441-sd-card-image.zip のイメージではOSが正常に起動しないようです。

また、Jetson Nano 2GBとJetson Nano 4GBではデスクトップ環境が異なるようです。以下の「デスクトップ環境の違い」に書きました。

イメージの書き込み

イメージの書き込みにはbalenaEtcherがおすすめです。
microSDカードを選択して、書き込むイメージファイルを圧縮ファイルのままドラッグ&ドロップし、「Flash」ボタンを押すだけで書き込みができます。
WindowsだけでなくmacOSとLinuxにも対応しています。

NVIDIAのGetting StartedのドキュメントでもbalenaEtcherが紹介されています。

balenaEtcherは以下のページからダウンロードできます。

あわせて読みたい
balenaEtcher - Flash OS images to SD cards & USB drives A cross-platform tool to flash OS images onto SD cards and USB drives safely and easily. Free and open source for makers around the world.

Jetson Nanoの初期設定

Jetson Nanoの電源を入れ、L4Tを起動します。

最初はEULA(End-User License Agreement)への同意やユーザ名、ホスト名の設定などがあります。
適宜設定を進めてください。

また、jtopを入れておくとJetson Nanoのステータスを確認できるのでおすすめです。

GitHub
GitHub - rbonghi/jetson_stats: 📊 Simple package for monitoring and control your NVIDIA Jetson [Orin,... 📊 Simple package for monitoring and control your NVIDIA Jetson [Orin, Xavier, Nano, TX] series - GitHub - rbonghi/jetson_stats: 📊 Simple package for monitoring ...

以下のコマンドを実行してから再起動するとjtopコマンドを使えるようになります。

sudo -H pip install -U jetson-stats

Jetson NanoのDockerの初期設定

CUDAコンパイラを扱えるようにするため、 以下のページを見ながら/etc/docker/daemon.jsonを編集し、 docker build時にもGPUへのアクセスを有効にします。

GitHub
GitHub - dusty-nv/jetson-containers: Machine Learning Containers for NVIDIA Jetson and JetPack-L4T Machine Learning Containers for NVIDIA Jetson and JetPack-L4T - GitHub - dusty-nv/jetson-containers: Machine Learning Containers for NVIDIA Jetson and JetPack-L...

Jetson Nano用にDockerイメージを作成&起動

ROSがインストールされたDockerイメージを作成します。

Dockerfileは以下のリポジトリに公開しています。

GitHub
GitHub - Tiryoh/jetson-nano-containers: Dockerfiles for Jetson Nano Dockerfiles for Jetson Nano. Contribute to Tiryoh/jetson-nano-containers development by creating an account on GitHub.

ROSがインストールされたDockerイメージ(ベースイメージ)

今回はROS Melodicのイメージをビルドすることにします。
インターネットの回線速度やmicroSDの読み書き速度にもよりますが多少時間がかかります。
20分程度かかったような気がします。

cd ~/
git clone https://github.com/Tiryoh/jetson-nano-containers.git
cd ~/jetson-nano-containers/l4t-r32.4.4/ros-melodic
sudo docker build -t ros:melodic-ros-base-l4t-r32.4.4 .

無事にビルドできたらDockerコンテナを起動します。

sudo docker run --network host -v /tmp/argus_socket:/tmp/argus_socket --runtime nvidia --rm -it ros:melodic-ros-base-l4t-r32.4.4

Dockerコンテナ内でroscoreを無事を起動できることを確認できると思います。

ここで少しdocker runのオプションについて補足します。

  • --network host
    • ホストマシン(Jetson Nano)とネットワークを共有するためのオプションです。これを有効にすることにより、ROS_IPROS_MASTER_URIについてDockerを意識せずに設定することができます。
  • -v /tmp/argus_socket:/tmp/argus_socket
    • CSIカメラの映像へDockerコンテナ内部からアクセスできるようにするためのvolumeマウントオプションです[1]NVIDIA Jetson プラットフォームでの ROS2 と AI を使用したロボットアプリケーションの実装
      NVIDIA Japan – Medium
      。CSIカメラでなくUSBカメラを使う場合は、ここは--device /dev/video0とします(ビデオデバイスの番号は環境に応じて変えてください)。
  • --runtime nvidia
    • NVIDIA Dockerを明示して実行します[2]NVIDIA Docker って今どうなってるの? (20.09 版)
      NVIDIA Japan – Medium
      。今回紹介した手順では/etc/docker/daemon.jsonを編集して常にNVIDIA Dockerを使うようにしているのでなくても大丈夫なオプションですが、うっかり初期設定を忘れてても使えるように念のためつけています。

dusty-nv/ros_deep_learningのDockerイメージ

次にNVIDIA社が公開しているHello AI WorldのROSラッパーであるdusty-nv/ros_deep_learningをインストールし、ビルドしてみます。

まずはDockerイメージを作成します。

cd ~/jetson-nano-containers/l4t-r32.4.4/ros-deep-learning-melodic
sudo docker build -t ros-deep-learning:melodic-l4t-r32.4.4 .

ビルドが終わったらDockerコンテナを起動します。

sudo docker run --network host -v /tmp/argus_socket:/tmp/argus_socket --runtime nvidia --rm -it ros-deep-learning:melodic-l4t-r32.4.4

Dockerコンテナ内で以下のコマンドを実行すると、ROSノードが起動します。
video_source.ros1.launchを起動することで/video_source/rawと言う名前でsensor_msgs/Image形式のROSトピックが配信されます。

catkin source
roslaunch ros_deep_learning video_source.ros1.launch input:=csi://0

ノートパソコンのROS_MASTER_URIROS_IPを適切に設定すると、以下の図のようにrqt_image_viewでノートパソコンからカメラ映像を確認できます。

Dockerコンテナにログインしていない別の端末でjtopを実行すると、以下の図のようにGPUを利用していることを確認できると思います。

以下のようなエラーが出て映像が配信できない場合は(Dockerコンテナ内ではなく)Jetson Nano上でnvargus-daemon.serviceをリスタートすると解決する場合があります。

[ERROR] [1608112817.619973258]: failed to capture next frame
[gstreamer] gstCamera -- onPreroll
[gstreamer] gstCamera -- map buffer size was less than max size (1382400 vs 1382407)

nvargus-daemon.serviceは以下のコマンドでリスタートできます。

sudo systemctl restart nvargus-daemon.service

今回はDockerコンテナ内でコマンドを実行してROSノードを起動しましたが、コンテナ起動時に直接ROSノードを起動することもできます。

sudo docker run --rm -t --network host -v /tmp/argus_socket:/tmp/argus_socket ros-deep-learning:melodic-l4t-r32.4.4 \
roslaunch ros_deep_learning video_source.ros1.launch input:=csi://0

今回紹介したDockerfileでビルドしたDockerイメージについて、他のJetson Nanoで動くかどうかの確認はきちんとしていませんが、手元では動くことを確認したイメージをGitHub Packagesに置いています。

まとめ(と関連情報の紹介)

Jetson Nano 2GB Developer Kit用JetPackでJetson Nanoを起動して、

の作成方法とそのイメージの起動方法を紹介しました。

その他、Jetson Nano上ではなくPC上でDokcerイメージをビルドする方法などをGitHubのREADMEには記載しています。

GitHub
GitHub - Tiryoh/jetson-nano-containers: Dockerfiles for Jetson Nano Dockerfiles for Jetson Nano. Contribute to Tiryoh/jetson-nano-containers development by creating an account on GitHub.

今回紹介したROSインストール済みのDockerイメージをベースイメージとして使うと、今回紹介したROSパッケージ以外でもDockerコンテナ内で起動できるようになります。
もしよかったら参考にしてみてください。

参考・関連ページ

あわせて読みたい
GitHub
GitHub - dusty-nv/ros_deep_learning: Deep learning inference nodes for ROS / ROS2 with support for N... Deep learning inference nodes for ROS / ROS2 with support for NVIDIA Jetson and TensorRT - GitHub - dusty-nv/ros_deep_learning: Deep learning inference nodes fo...

デスクトップ環境の比較

JetPack 4.4.1 (Jetson Nano 2GB)

LXDEがデフォルトのデスクトップ環境となっているようです。

JetPack 4.4.1 (Jetson Nano 4GB)

Unityがデフォルトのデスクトップ環境となっているようです。

JetPack 4.3 (Jetson Nano 4GB)

Unityがデフォルトのデスクトップ環境となっているようです。

この記事が気に入ったら
フォローしてね!

よかったらシェアしていただけると励みになります!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Memotekiの管理人です。このブログには学んだことや共有しておきたいことをマイペースにメモしていきます。2020年からは日記も書き始めました。

コメント

コメントする

目次