Skip to main content

Jetson AGX Orin上でOrbbecカメラとNVBloxを展開する

はじめに

Isaac ROS NVBloxは、リアルタイムロボット知覚のためにNVIDIAが開発した高性能GPU加速3Dマッピングフレームワークです。単眼深度推定モデルとは異なり、NVBloxはRGB-Dカメラやステレオカメラからの真の深度入力を消費して、正確な3Dシーン表現を構築します。

リアルタイムで密なTSDF(Truncated Signed Distance Field)およびESDF(Euclidean Signed Distance Field)マップを構築し、高品質な3D再構成、障害物認識ナビゲーション、衝突チェックを可能にします。NVBloxは、自律移動ロボット(AMR)に適したメッシュ、ボクセルベースのコストマップ、3D占有表現も生成できます。

これにより、ハードウェア制約と計算効率が重要な考慮事項であるエッジAIアプリケーションにとって特に価値があります。このwikiでは、Jetson AGX Orin上でROS 2統合を使用し、Orbbec RGB-Dカメラとモバイルロボットプラットフォームを使用して、完全にオンデバイスの知覚とナビゲーションパイプラインを実現するIsaac ROS NVBloxの展開方法を実演します。🚀

前提条件

  • JetPack 6.2を搭載した**reComputer J50**(Jetson AGX Orin)
  • Orbbec RGB-Dカメラ 📷
  • モバイルロボットシャーシ(オプション)🤖
  • ROS2 Humble環境がインストール済み
  • Orbbec ROS2 SDKのインストールが必要
  • Isaac ROSのインストールが必要

技術的ハイライト

  • リアルタイム3Dマッピング: NVBloxはGPU加速を使用してリアルタイムで密なTSDFおよびESDFマップを生成し、ロボティクスアプリケーション向けの高品質3Dシーン再構成を可能にします。

  • RGB-Dカメラ統合: Orbbec RGB-Dカメラからの真の深度情報を活用して、単眼深度推定に依存することなく正確な3D表現を作成します。

  • エッジ展開に最適化: Jetson AGX Orinなどのエッジデバイスでの効率的な推論のために特別に設計され、最大性能のためのCUDA最適化を備えています。

  • ナビゲーション対応出力: 自律ナビゲーションと衝突回避に適したメッシュ、ボクセルベースのコストマップ、3D占有グリッドを生成します。

  • ROS2ネイティブサポート: 既存のロボットシステムへの簡単な統合のために、標準的なロボティクスメッセージタイプでシームレスなROS2 Humble統合を提供します。

環境設定

基本依存関係のインストール

ターミナルで以下の依存関係をインストールします:

sudo apt update
sudo apt-get install python3-pip # Install Python3
sudo apt-get install nvidia-jetpack # Install developer tools
sudo pip3 install jetson-stats # Install Jtop to check JetPack version
sudo apt-get install git-lfs # Install Git LFS

Docker CEのインストール

ソフトウェアソースを更新:

sudo apt-get update

基本依存関係をインストール:

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common # Install essential packages to allow apt over HTTPS

DockerのオフィシャルGPGキーを追加:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Dockerの安定版リポジトリを追加:

sudo add-apt-repository \
"deb [arch=arm64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

パッケージリストを再度更新(新しいリポジトリが追加されました):

sudo apt-get update

Docker CE(Community Edition)をインストール:

sudo apt-get install docker-ce

Dockerが開始することを確認:

sudo systemctl enable docker
sudo systemctl start docker

権限を追加(ユーザーをDockerグループに追加):

sudo usermod -aG docker $USER

システムを再起動またはログアウト:

sudo reboot

Isaac ROS 3.2のインストール

ワークスペースを作成し、環境に追加:

mkdir -p ~/workspaces/isaac_ros-dev/src
echo "export ISAAC_ROS_WS=${HOME}/workspaces/isaac_ros-dev/" >> ~/.bashrc
source ~/.bashrc

ワークスペースに入り、パッケージをクローン:

cd ${ISAAC_ROS_WS}/src
git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git

公式Isaac Common DockerイメージをプルしてDockerに入る:

cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
./scripts/run_dev.sh

./scripts/run_dev.shを実行すると、Isaac ROSが自動的にインストールされ、コンテナが開始されます。

tip

Isaac ROSのインストールには、ターミナルでNVIDIA NGCにログインし、NGCアカウントで生成されたAPIキーを入力する必要があります 🔑

Orbbec SDK ROS2のインストール

Orbbec RGB-Dカメラを使用するには、SDKドライバーのインストールが必要です。このガイドでは、Build from Sourceメソッドを使用します。

依存関係をインストール:

sudo apt install libgflags-dev nlohmann-json3-dev \
ros-$ROS_DISTRO-image-transport ros-${ROS_DISTRO}-image-transport-plugins ros-${ROS_DISTRO}-compressed-image-transport \
ros-$ROS_DISTRO-image-publisher ros-$ROS_DISTRO-camera-info-manager \
ros-$ROS_DISTRO-diagnostic-updater ros-$ROS_DISTRO-diagnostic-msgs ros-$ROS_DISTRO-statistics-msgs ros-$ROS_DISTRO-xacro \
ros-$ROS_DISTRO-backward-ros libdw-dev libssl-dev mesa-utils libgl1 libgoogle-glog-dev

colconワークスペースを作成:

mkdir -p ~/ros2_ws/src

cd ~/ros2_ws/src
git clone https://github.com/orbbec/OrbbecSDK_ROS2.git
cd OrbbecSDK_ROS2
git checkout v2-main

作業ディレクトリに入り、コンパイル:

cd ~/ros2_ws
colcon build --event-handlers console_direct+ --cmake-args -DCMAKE_BUILD_TYPE=Release

OrbbecカメラがLinux上で正しく認識されるようにするため、udevルールをインストールします。

ソースコード作業ディレクトリに入り、スクリプトを実行:

cd ~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/scripts
sudo bash install_udev_rules.sh
sudo udevadm control --reload-rules && sudo udevadm trigger
note

このスクリプトが実行されない場合、権限の問題によりデバイスのオープンが失敗します。sudo(管理者権限)でサンプルを実行する必要があります。⚠️

NVBloxの展開

NVBloxのビルド

Orbbecカメラに適応したNVBloxソースコードを取得し、作業ディレクトリにコピー:

git clone https://github.com/jjjadand/isaac-NVblox-Orbbec.git
cp -r isaac-NVblox-Orbbec/src/isaac_ros_nvblox/ ${ISAAC_ROS_WS}/src/
cp -r isaac-NVblox-Orbbec/src/isaac_ros_nitros/ ${ISAAC_ROS_WS}/src/
cp -r isaac-NVblox-Orbbec/build/ ${ISAAC_ROS_WS}/

ワークスペースに入り、Isaac ROS Dockerコンテナを開始:

cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
./scripts/run_dev.sh

(オプション)以下のようなエラーが発生した場合:

Finished pulling pre-built base image: nvcr.io/nvidia/isaac/ros:aarch64-ros2_humble_4c0c55dddd2bbcc3e8d5f9753bee634c
Nothing to build, retagged nvcr.io/nvidia/isaac/ros:aarch64-ros2_humble_4c0c55dddd2bbcc3e8d5f9753bee634c as isaac_ros_dev-aarch64
Running isaac_ros_dev-aarch64-container
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: could not apply required modification to OCI specification: error modifying OCI spec: failed to inject CDI devices: unresolvable CDI devices nvidia.com/gpu=all

ターミナルで以下のコマンドを実行して修正を試すことができます:

sudo nvidia-ctk cdi generate --mode=csv --output=/etc/cdi/nvidia.yaml

コンテナが正常に開始された後、以下のような表示が見えるはずです:

追加の依存関係をインストール:

sudo apt update
sudo apt-get install -y ros-humble-magic-enum
sudo apt-get install -y ros-humble-foxglove-msgs

CUDA環境変数を.bashrcに追加:

echo '
CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
export CUDACXX=$CUDA_HOME/bin/nvcc
' >> ~/.bashrc

シンボリックリンクを作成:

sudo ln -sf /opt/ros/humble/include/magic_enum.hpp /usr/include/magic_enum.hpp

sudo mkdir -p /opt/ros/humble/include/foxglove_msgs
sudo ln -sfn /opt/ros/humble/include/foxglove_msgs/foxglove_msgs/msg /opt/ros/humble/include/foxglove_msgs/msg

/workspaces/isaac_ros-devでワークスペースをビルドし、初期化:

colcon build --symlink-install --cmake-args -DBUILD_TESTING=OFF
source install/setup.bash

コンパイルが完了すると、以下のような結果が表示されるはずです:

NVBloxの起動

OrbbecカメラをデータケーブルでJetsonに接続した後、まずローカル環境でOrbbec ROS2スクリプトを開始:

cd ~/ros2_ws/src
source install/setup.bash

ros2 launch orbbec_camera <camera_name>.launch.py

# Example: ros2 launch orbbec_camera gemini2.launch.py

サポートされている<camera_name>パラメータの例:

  • gemini210
  • gemini2
  • gemini2L
  • gemini_330_gmsl
  • gemini_330_series
warning

Docker コンテナ内で Orbbec スクリプトを開始しないでください。前のチュートリアルに従って Orbbec ドライバをインストールしていることを確認してください。⚠️

Isaac ROS コンテナはデフォルトでローカルに公開された ROS2 とブリッジします。Docker コンテナ内で、次のように入力します:

ros2 topic list

通常、Docker コンテナ内で Orbbec カメラによって公開される以下のデータトピックが表示されるはずです:

/camera/accel/imu_info
/camera/color/camera_info
/camera/color/image_raw
/camera/depth/camera_info
/camera/depth/image_raw
/camera/depth/points
/camera/depth_filter_status
/camera/device_status
/camera/gyro/imu_info
/camera/gyro_accel/sample
/camera/ir/camera_info
/camera/ir/image_raw

Orbbec カメラのデータトピックを読み取れることを確認してください。次に、Isaac ROS コンテナで NVBlox サンプルスクリプトを開始します:

cd ~/workspaces/isaac_ros-dev
source install/setup.bash

ros2 launch nvblox_examples_bringup orbbec_example.launch.py

RViz で NVBlox の 3D 占有グリッドとメッシュの出力を確認できます:

RViz は以下のように設定できます。必要な可視化結果を有効にし、利用可能なトピック名を選択してください:

最後に、AGX Orin と Orbbec カメラをモバイル AGV に搭載することで、動画に示されている効果を実現できます:🎥

これは、モバイルロボットの障害物検出とシーンの 3D メッシュマップ構築に使用できます。🤖

参考文献

技術サポート & 製品ディスカッション

弊社製品をお選びいただき、ありがとうございます!弊社では、お客様の製品体験が可能な限りスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを用意しています。

Loading Comments...