Computer Vision / Video Analytics

ROS、ROS 2 の AI モジュールを NVIDIA Jetson プラットフォームで高速化

Reading Time: 5 minutes

NVIDIA Jetson 開発者キットは、その使いやすさとシステムサポート、そして AI ワークロードの高速化を包括的にサポートする、ロボット工学者のための信頼されたプラットフォームです。この記事では、 NVIDIA Jetson 開発者キットにおける ROS および ROS 2 を含むオープンソースのロボット フレームワークのサポートについてご紹介します。

Diagram shows flow of work to get started with ROS and ROS 2 on the Jetson platform.
図 1. NVIDIA Jetson プラットフォームで AI の高速化を実現した ROS と ROS 2

この記事では、以下の参考資料を掲載しています。

  • ROS および ROS 2 の Docker コンテナー
  • AI を高速化する ROS と ROS 2 パッケージ
  • CUDA アクセラレーション点群ライブラリ
  • ロボット アプリケーションのための NVIDIA Isaac Sim
  • ロボティクス オープンソース: コミュニティ プロジェクト

ROS および ROS 2 のDocker コンテナー

機械学習ライブラリを備えた ROS および ROS 2 用のさまざまな Docker イメージを提供しています。お客様のご要望に応じて独自の Docker イメージを構築するための Dockerfile も提供しています。

ROS および ROS 2 の Docker イメージ

ROS 2 Foxy Fitzroy、ROS 2 Eloquent Elusor、ROS Noetic を PyTorch、NVIDIA TensorRT、DeepStream SDK などの AI フレームワークでサポートしています。 scikit-learn、numpy、pillow などの機械学習 (ML) ライブラリも搭載しています。 コンテナーには、 TensorRT で高速化された ROS 2 の AI パッケージが搭載されています。

ROS 2 Foxy、ROS 2 Eloquent、ROS Noetic with PyTorch、TensorRT の Docker イメージ:

  • DL ライブラリ: PyTorch v1.7.0、TorchVision v0.8.1、TensorRT 7.1.3
  • ML ライブラリ: scikit-learn、numpy、pillow
  • CUDA アクセラレーション ライブラリ: PyCUDA
  • 広く使われている開発者用リポジトリ: torch2trt、trt_pose
  • ROS 2 パッケージ:

表 1 に、これらの Docker イメージの pull コマンドを記載します。

Docker Images Pull command
ROS 2 Foxy with PyTorch and TensorRT $docker pull nvidiajetson/l4t-ros2-foxy-pytorch:r32.5
ROS 2 Foxy with DeepStream SDK $docker pull nvidiajetson/deepstream-ros2-foxy:5.0.1
ROS 2 Eloquent with PyTorch and TensorRT $docker pull nvidiajetson/l4t-ros2-eloquent-pytorch:r32.5
ROS 2 Eloquent with DeepStream SDK $docker pull nvidiajetson/deepstream-ros2-eloquent:5.0.1
ROS Noetic with PyTorch and TensorRT $docker pull nvidiajetson/l4t-ros-noetic-pytorch:r32.5
表 1. ROS 2 Docker イメージの Pull コマンド

ROS および ROS 2 DockerFiles

Jetson 上で異なるバージョンの ROS 2 を簡単に実行できるように、ROS 2 Eloquent、ROS 2 Foxy、 ROS Melodic、ROS Noetic 用のさまざまな Dockerfile とビルド スクリプトをリリースしました。これらのコンテナーは、ROS および ROS 2 を Jetson にインストールし、独自の ROS ベースのアプリケーションを構築するための、自動化された信頼性の高い方法を提供します。

Eloquent と Melodic は既に Ubuntu 18.04 用にビルド済みパッケージを提供しているため、Dockerfiles でこれらのバージョンの ROS をコンテナーにインストールします。一方で Foxy と Noetic は Ubuntu 20.04 用のビルド済みパッケージのみ提供されているため、コンテナー内でソースからビルドします。コンテナーを使えば、基になる OS ディストリビューションに関係なく、これらのバージョンの ROS と ROS 2 を使うことができます。

コンテナーをビルドするには NVIDIA JetPack 4.4 以降が動作する Jetson デバイス上でリポジトリをクローンし ROS ビルド スクリプトを実行します。

$ git clone https://github.com/dusty-nv/jetson-containers
$ cd jetson-containers
$ ./scripts/docker_build_ros.sh all       # build all: melodic, noetic, eloquent, foxy
$ ./scripts/docker_build_ros.sh melodic   # build only melodic
$ ./scripts/docker_build_ros.sh noetic    # build only noetic
$ ./scripts/docker_build_ros.sh eloquent  # build only eloquent
$ ./scripts/docker_build_ros.sh foxy      # build only foxy 

AI を高速化する ROS と ROS 2 パッケージ

GitHub: NVIDIA-AI-IOT/ros2_torch_trt

ROS や ROS 2 パッケージを使用して、さまざまな GPU アクセラレーテッド AI アプリケーションを実行するために必要な材料をまとめたバンドルパッケージを用意しました。物体検出、人物の姿勢推定、ジェスチャー分類、セマンティック セグメンテーション、 NVApril タグのアプリケーションがあります。

このリポジトリでは、 Pytorch と TensorRT を使った分類と物体検出のための 4 つの異なるパッケージを提供しています。このリポジトリは、 ROS2 に AI を統合するための出発点となります。パッケージの主な特徴は以下の通りです。

  • 分類には、Resnet18、AlexNet、SqueezeNet、Resnet50 など、さまざまな ImageNet の事前学習モデルから選択できます。
  • 検出には、 COCO データセットで学習した MobileNetV1 ベースの SSD が現在サポートされています。
  • TensorRT パッケージは、 GPU 上で直接推論をおこなう PyTorch モデルと比較して、推論を実行する際の大幅な高速化を提供します。
  • 推論結果は vision_msgs の形で公開されます。
  • ノードを実行すると、推論結果を視覚化したウィンドウが表示されます。
  • Jetson ベースの Docker イメージと起動ファイルが用意されているので、簡単に利用することができます。

詳しくは、「NVIDIA Jetson プラットフォームでの ROS2 と AI を使用したロボット アプリケーションの実装」をご覧ください。

深層学習ノードを高速化するための ROS と ROS 2 パッケージ

GitHub: dusty-nv/ros_deep_learning

このリポジトリには、 Jetson Nano、TX1、TX2、Xavier NX、NVIDIA AGX Xavier、TensorRT をサポートする ROS と ROS 2 用の深層学習推論ノードとカメラ/ビデオストリーミングノードが含まれています。

このノードでは、 jetson-inference ライブラリと NVIDIA Hello AI World tutorial の画像認識、物体検出、セマンティック セグメンテーションの DNN を使用しています。どちらも分類、検出、セグメンテーションのための事前学習済みネットワークがいくつか組み込まれており、ユーザーがカスタマイズした学習済みモデルを読み込むこともできます。

カメラ/ビデオ ストリーミング ノードは、以下の I/O インターフェースに対応しています。

  • MIPI CSI カメラ
  • V4L2 カメラ
  • RTP / RTSP
  • 動画と画像
  • 画像シーケンス
  • OpenGL ウィンドウ

ROS Melodic および ROS2 Eloquent をサポートしています。最新版 NVIDIA JetPack のご利用を推奨します。

ROS 2 人物姿勢推定パッケージ

GitHub: NVIDIA-AI-IOT/ros2_trt_pose

このリポジトリでは、 TensorRT を使って人間の姿勢を高速に推定します。ここでは広く採用されている NVIDIA-AI-IOT/trt_pose リポジトリを使用しています。人間のポーズを理解するため、事前学習済みモデルは、COCO データセットのカテゴリに基づいて、17 の体の部位を推論します。

ros2_trt_pose パッケージの主な特徴は以下の通りです。

  • count of personperson_id といった pose_megs をパブリッシュします。 person_id ごとに、 17 の体の部位をパブリッシュします。
  • 可視化のための Rviz2 の使用を容易にするための launch ファイルを提供します。
    • Image メッセージ
    • ビジュアル マーカー: body_jointsbody_skeleton
  • 簡単にインストールして使用することができる Jetson ベースの Docker イメージが含まれています。

詳しくは「NVIDIA Jetson プラットフォームでの ROS2 と AI を使用したロボットア プリケーションの実装」をご覧ください。

NVAprilTags を高速化する ROS 2 パッケージ

GitHub: NVIDIA-AI-IOT/ros2-nvapriltags

この ROS 2 ノードは、 NVIDIA GPU アクセラレーテッド AprilTags ライブラリを使用して、画像中の AprilTags を検出し、ポーズ、 ID および追加メタデータをパブリッシュします。 ROS2 (Foxy) でテストされており、 x86_64 および aarch64 (Jetson ハードウェア)で動作します。これは ROS 2 node for CPU AprilTags detection をモデルにしています。

このノードの基となっている NVIDIA Isaac GEM については、NVIDIA Isaac SDK 2020.2 の資料の April Tags を参照してください。さらに詳細は AprilTags Visual Fiducial System をご覧ください。

手の姿勢推定とジェスチャー分類のための ROS 2 パッケージ

GitHub: NVIDIA-AI-IOT/ros2_trt_pose_hand

この ROS 2 パッケージは、最近リリースされた NVIDIA-AI-IOT/trt_pose_hand リポジトリ: Real-time hand pose estimation and gesture classification using TensorRT を利用しており、以下の主な機能を提供しています。

  • 21 のキーポイントを持つハンドポーズ メッセージ
  • ハンズ ポーズ検出画像メッセージ
  • 6 つのクラスでジェスチャー分類するための std_msgs
    • fist (グー)
    • pan (人差し指)
    • stop (パー)
    • fine (ファイン(了解))
    • peace (チョキ)
    • no hand (ノーハンド)
  • ビジュアライゼーション マーカー
  • RViz2 の launch ファイル

テキスト検出と単眼深度 (monocular depth) 推定のための ROS 2 パッケージ

GitHub: NVIDIA-AI-IOT/ros2_torch2trt_examples

このリポジトリでは、使いやすい PyTorch-to-TensorRT コンバータである torch2trt を、2 つの異なるアプリケーションで使用する方法について紹介しています。

統合や開発を容易にするために、 この ROS 2 パッケージは以下のステップを実行します。

  1. image_tools cam2image image メッセージをサブスクライブする
  2. モデルを TensorRT に最適化する
  3. image メッセージをパブリッシュする

Jetson stats 用の ROS と ROS 2 パッケージ

GitHub: NVIDIA-AI-IOT/ros2_jetson_stats

jetson-stats パッケージは、 NVIDIA Jetson 製品群 (NVIDIA AGX Xavier、Xavier NX、TX1、TX2、Nano) をモニタリング、およびコントロールするためのパッケージです。このリポジトリでは、 jetson_stats 用の ROS 2 パッケージを提供しており、デプロイ時にはさまざまなシステムの状態をモニタリングできるようになっています。 Jetson で著名な Raffaello Bonghi, PhD が開発した ROS パッケージは、 rbonghi/ros_jetson_stats で公開されています。

ros2_jetson_stats パッケージには、以下の ROS 2 診断メッセージが含まれています。

  • GPU/CPU 使用率
    • EMC / SWAP / メモリ ステイタス (使用率 %)
    • SoC の電力と温度

ROS 2 のコマンドラインから以下をコントロールできるようになりました。

  • 冷却ファン (モードと速度)
    • パワーモデル (nvpmodel)
    • Jetson_clocks

DeepStream SDK 用の ROS 2 パッケージ

DeepStream SDK は、マルチセンサー処理、ビデオと画像認識を用いた AI ベースのソリューションを構築するための完全なストリーミング分析ツールキットを提供します。最先端の SSD、YOLO、FasterRCNN、MaskRCNN などの一般的な物体検出およびセグメンテーション モデルをサポートします。

このリポジトリでは、 NVIDIA-AI-IOT/deepstream_python_apps レポジトリを基にした ROS 2 ノードを提供し、 物体検出と属性分類の 2 つの推論タスクを実行します。

  • 物体検出: Vehicle、Person、RoadSign、TwoWheeler の 4 つのクラスの物体検出
  • 属性分類: Color、Make、Type の 3種類の Vehicle の属性を分類

これらのトピックをサブスクライブし、 vision_msgs 形式で結果を表示する ROS 2 サブスクライバー ノードのサンプルも提供しています。また、各推論タスクは、検出された物体の周囲にバウンディング ボックスとラベルを配置した可視化ウィンドウを生成します。

詳しくは「NVIDIA Jetson プラットフォームでの ROS2 と AI を使用したロボット アプリケーションの実装」をご覧ください。

ROS ベースの Chameleon プロジェクト: 深層学習によるセマンティック障害物の理解

GitHub:

この有望な作品は、ロボット工学と深層学習のパワーを共に利用する可能性が注目されています。セグメントネットワークである FCN-AlexNet を用いて、構造化されていない環境でのロボットに対する階段や穴などの危険を検知する、いくつかの実世界のアプリケーションを実行します。

CUDA アクセラレーション点群ライブラリ

GitHub: NVIDIA-AI-IOT/cuda-pcl

Jetson のユーザーの多くは、自律型ソリューションでの位置特定と認識のための主要なセンサーとして LiDAR を選択しています。 CUDA-PCL 1.0 には、 3 つの CUDA アクセラレーション PCL ライブラリが含まれています。

  • CUDA-ICP
  • CUDA-Segmentation
  • CUDA-Filter

詳しくは、 Accelerating Lidar for Robotics with NVIDIA CUDA-based PCL をご覧ください。

ロボット アプリケーションのための NVIDIA Isaac Sim

JetBot modeled in NVIDIA Isaac Sim.
図 2. NVIDIA Isaac Sim の Waveshare JetBot

詳しくは、Training Your NVIDIA JetBot to Avoid Collisions Using NVIDIA Isaac Sim をご覧ください。

ロボットの製作

ここでは、自律走行モデル スケールカーの製作などのオープンソースの開発者コミュニティと、ロボットアーム ソリューションに人間の姿勢推定を実装するなどの企業の両方での、NVIDIA Jetson プラットフォームを活用したサンプル プロジェクトをご紹介します。これらすべては ROS、ROS 2 と NVIDIA Jetson によって実現可能です。

ROS 2ベースの NanoSaur

NanoSaur は Raffaello Bonghi 氏が設計/製作したオープンソース プロジェクトです。机上で動作することができる3D プリンターで作成可能なロボットで、 2 つ目ようなの有機 EL を持ち、シンプルなカメラを使用しています。サイズは 10x12x6cm で、重さはわずか 500g。簡単なパワーバンクを使って、自律的に机上を動き回ります。ロボット工学や AI 教育のための小さなロボットです。

詳しくは、 About NanoSaur をご覧ください。

Comau North America 社との ROS と ROS 2 統合

本パッケージは、 e.DO のコア パッケージが存在する ROS 1 にメッセージを橋渡しすることで、 ROS 2 パッケージを使って e.DO をコントロールすることをご紹介します。

人間の手の姿勢を推定するパッケージをテストするため、Stefan Profanter’s open source repository にあるComau e.DO の Gazebo シミュレーションを使用しました。このシミュレーションでは、 MoveIt Motion Planning ソフトウェアを利用し、 e.DO を制御することができます。 hand pose パッケージの ROS 2 ノードは、ハンドポーズの分類メッセージをパブリッシュします。

MoveIt 1.0 は ROS 1 でのみ機能するため、ソフトウェアブリッジを使用して ROS 1 からメッセージをサブスクライブしました。検知・分類された手の姿勢に基づき、ロボットの姿勢データを含むメッセージがリスナーにパブリッシュされ、リスナーは Movelt に動作コマンドを送信します。その結果、 e.DO ロボットの姿勢が変化したことが Gazebo で確認できます。

ROS ベースの Yahboom DOFBOT

DOFBOT は、 AI 初心者やプログラムを趣味とする方、 Jetson Nano ファンにとって最高のパートナーです。Jetson Nano を基に設計されており、 6 つの HQ サーボ、 HD カメラ、多機能拡張ボードを搭載しています。ボディ全体は緑色の酸化アルミニウム合金でできており、美しく耐久性に優れたものです。ROS ロボットシステムを介して、シリアルバスサーボのモーションコントロールを簡素化しています。

詳しくは、Yahboom DOFBOT AI Vision Robotic Arm with ROS Python programming for Jetson Nano 4GB B01 をご覧ください。

JetBot 用 ROS パッケージ

GitHub: dusty-nv/jetbot_ros

JetBot は NVIDIA Jetson Nano を基にしたオープンソースのロボットです。

  • 手ごろな価格: Jetson Nano のアドオンとして 150 ドル以下の価格
  • AI 学習、教育向け: 基本的な動作から AI による衝突回避までのチュートリアルを収録
  • 楽しみ: ウェブ ブラウザーからインタラクティブにプログラム

JetBot を構築して使用することで、全く新しい AI プロジェクトを作成するための実践的な体験を得ることができます。はじめに JetBot documentation をお読みください。

最後に

ROS and ROS 2 support on NVIDIA Jetson で、常に最新の情報を確認してください。

 

Tags