Post

3次元地図再構成と2次元コストマップ生成のためのIsaac ROS Nvblox

NVIDIA Isaac ROSはGPUを使った高速化に対応した様々なROS 2パッケージ群です。 今回はその中でもカラー画像と深度画像から3次元再構成と2次元コストマップ生成を行うことができるIsaac ROS Nvbloxを紹介します。 Jetson Orin Nano開発者キットを使った性能評価も載せています。

Isaac ROS Nvblox

Isaac ROS Nvbloxの紹介はレポジトリのREADMEがわかりやすいです。

https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox#overviewより

Isaac ROS Nvblox contains ROS 2 packages for 3D reconstruction and cost maps for navigation. nvblox_nav2 processes depth and pose to reconstruct a 3D scene in real-time and a 2D costmap for Nav2. The costmap is used in planning during navigation as a vision-based solution to avoid obstacles.

nvblox_nav2 is designed to work with stereo cameras, which provide a depth image, and the corresponding pose uses GPU acceleration to compute 3D reconstruction and 2D costmaps using nvblox.

(日本語意訳)Isaac ROS Nvbloxには、3D再構成とナビゲーション用のコストマップのためのROS 2パッケージが含まれています。nvblox_nav2は、深度と位置姿勢を処理してリアルタイムで3D環境を再構成し、Nav2用の2Dコストマップを作成します。コストマップは、障害物を回避するビジョンベースのソリューションとしてナビゲーション時の計画に使用します。

nvblox_nav2は、深度画像を提供するステレオカメラで動作するように設計されており、対応するポーズはGPUアクセラレーションを使用して、nvbloxを使用して3D再構成と2Dコストマップを計算する。

つまり、

  • ステレオ画像とIMUのセンサー情報を使ってVSLAMを行い、3次元地図を再構成する機能と、その3次元地図に対してある水平面を切り出した時の2次元平面からコストマップを生成する機能がnvbloxで提供されている。
  • nvbloxはGPUを使った高速化に対応している。
  • isaac_ros_nvbloxはROS 2のRvizやnav2パッケージのためのインタフェースを提供している。

ということのようです。 Isaac ROSのパッケージはPC + NVIDIA GPU環境だけでなく、Jetsonプラットフォームでも実行できるように整備されているものが多く、こちらのIsaac ROS NvbloxもJetsonプラットフォームで動くのが強みです。

Jetson Orin Nano開発者キットでの実行

以下のチュートリアルに従って、Dockerコンテナでの実行環境をセットアップしました。 最初に進めた時にはすでにDockerのセットアップは済んでいると思って手順1を飛ばしてしまい、手順2の途中でアクセラレレータがないというエラーメッセージが出ました。 手順1は必ず実行しましょう。

  1. https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common/blob/main/docs/dev-env-setup.md
  2. https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox#quickstart

rosbagを使ったテスト

Isaac Simを使って記録したrosbagを使って実行した結果がこちら。

CPU 200%、GPU数十%、メモリ3GB消費なので、この上にまだまだ推論モデルやアプリケーションをたくさん載せられる余裕があるのがJetson Orin Nanoの強みですね。

RealSense D435iを使ったリアルタイムデータでの実行

次にIntel RealSense D435iを使ってリアルタイムにカラー画像とステレオ画像、IMUのデータを与えてnvbloxで3次元構成してみます。

場所や距離が悪かったからなのか、残念ながら綺麗には3次元再構成されませんでした。 書斎で行ったため、おそらく距離が近すぎたのが一つの原因かと思われるので、別途リビングで試したりもしてみます。

RealSenseセットアップ

Ubuntu 20.04のJetsonプラットフォームでRealSenseを使うのに少し苦労したので、そちらの情報も共有しておきます。 RealSenseはx86_64プラットフォームならaptインストールでRealSenseのソフトウェアをセットアップできるのですが、aarch64とUbuntu 20.04の組み合わせではaptインストールすることができません。

NVIDIAのチュートリアルに従って、Dockerコンテナで設定を進めたのですが、残念ながらファームウェアアップデートには対応できませんでした。 インターネット接続がないから動かないというエラーがあったので、おそらくネットワーク設定を見直せば動きそうです。

そのままrealsense-viewerで動作確認したところ、x86_64 PCでは数十FPS出るところがJetson Orin Nanoだと1FPSも出ず、焦りました。 そこで、PCでファームウェアバージョンを確認したところ、5.11.01とかなり古く、それを最新の5.14.00に更新すると、無事高いFPSが出るようになりました。 realsense-viewerのダイヤログから簡単に最新ファームウェアに更新できました。

ビフォー

1
2
3
4
rs-fw-update -l

Connected devices:
1) Name: Intel RealSense D435I, serial number: 841512070590, update serial number: 850123051744, firmware version: 05.11.01.100, USB type: 3.2

アフター

1
2
3
4
rs-fw-update -l

Connected devices:
1) Name: Intel RealSense D435I, serial number: 841512070590, update serial number: 850123051744, firmware version: 05.14.00.00, USB type: 3.2
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.