FANATIC REPORT ファナティックレポート

NVIDIA JetsonでのROS2利用

2024.10.07 簡易マニュアル


1.はじめに

昨今、エッジコンピューティングを利用される機会も多くなり、様々な場面で活用されています。
その中で、様々な周辺機器と連動することが必要となりますが、それらを利用するためのソフトウェアライブラリ、ツールがセットとなったものがROS / ROS2(Robot Operating System)となります。
本レポートでは、ROS2をNVIDIA® Jetson™上で動作させ、物体検知など、GPUの演算を利用する方法をご紹介いたします。

2.ROS2のディストリビューション

ROS2は活発に更新が行われており、ディストリビューションという形でリリースされます。
ディストリビューションごとに、EOL(End of Life)が設定されているため、利用する際には確認をお勧めいたします。

現時点では、最新の「Jazzy Jalisco」を利用されても問題ございませんが、Ubuntu24.04をサポートしていることもあり、2024年9月時点のJetson™ドライバパッケージL4T用ではサポートされておりません。
今回の検証では、最新のL4Tに対応している「Humble Hawksbill」にて検証を行っております。

ディストリビューション リリース日 EOL
Jazzy Jalisco 2024年5月23日 2029年5月
Iron Irwini 2023年5月23日 2024年11月
Humble Hawksbill 2022年5月23日 2027年5月
Galactic Geochelone 2021年5月23日 2022年10月9日
Foxy Fitzroy 2020年6月5日 2023年6月20日
Eloquent Elusor 2019年11月22日 2020年12月
Dashing Diademata 2019年5月31日 2021年5月
Crystal Clemmys 2018年12月14日 2019年12月
Bouncy Bolson 2018年7月2日 2019年7月
Ardent Apalone 2017年12月8日 2018年12月

3.ROS2の構築準備

今回は、ROS2上でYOLOによるリアルタイム物体検知を行います。
以下の構築手順は、Jetson™のイメージを展開した直後の状態を想定し、説明しております。
既に何れかのパッケージを動作させている場合、依存関係によってエラーとなる場合がございます。
その場合は、エラーメッセージから、依存関係にあるパッケージのアップグレード(ダウングレード)を判断いただくようにお願いいたします。

【利用環境】
・ハードウェア:FAA-PN1100N【Jetson Orin NX/Orin Nano搭載小型ファンレスモデル】
・L4T:R36.3.0
・ユーザー名:user
・カメラ:USB接続WEBカメラ

[概要図]

【事前準備】
・CUDA環境変数の設定 ※未実施の場合のみ

$ vi ~/.bashrc
# 以下を.bashrcの最終行下に追記
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
$ source ~/.bashrc

 

・既存パッケージの更新

$ sudo apt update
$ sudo apt upgrade

 

・必要となるパッケージのインストール

$ sudo apt install -y curl python3-pip
$ sudo apt install -y libopenblas-base libopenmpi-dev libomp-dev

 

・Pytorchのインストール
pipでパッケージ配布されているものをそのまま利用すると、CUDAデバイスが認識されません。
したがって、利用可能なバージョンをインストールします。
既にpytorchをセットアップされており、CUDAデバイスが正常に認識している場合は、インストール不要です。

 

CUDAデバイスの認識確認

$ python3 -c “import torch; print(torch.cuda.is_available())”
False

Falseとなった場合は、以下の通り、インストールを実施してください。

 

Jetpack6 + CUDA12.2の場合を想定して説明いたします。
その他の環境におきましては、以下リンクを参考にインストールを実施してください。
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048

$ pip3 uninstall torch torchvision torchaudio *インスト―ルしている場合
$ cd *homeディレクトリでの作業を想定

 

[torch]

$ curl -L https://nvidia.box.com/shared/static/mp164asf3sceb570wvjsrezk1p4ftj8t.whl \
> torch-2.3.0-cp310-cp310-linux_aarch64.whl
$ pip3 install ./torch-2.3.0-cp310-cp310-linux_aarch64.whl

[torchvision]

$ curl -L https://nvidia.box.com/shared/static/xpr06qe6ql3l6rj22cu3c45tz1wzi36p.whl \
> torchvision-0.18.0a0+6043bc2-cp310-cp310-linux_aarch64.whl
$ pip3 install ./torchvision-0.18.0a0+6043bc2-cp310-cp310-linux_aarch64.whl

[torchaudio]

$ curl -L https://nvidia.box.com/shared/static/9agsjfee0my4sxckdpuk9x9gt8agvjje.whl \
> torchaudio-2.3.0+952ea74-cp310-cp310-linux_aarch64.whl
$ pip3 install ./torchaudio-2.3.0+952ea74-cp310-cp310-linux_aarch64.whl

 

CUDAデバイスの認識を確認します。

$ python3 -c “import torch; print(torch.cuda.is_available())”
True

Trueとなっていることが確認できます。

 

USBカメラの接続を確認しておきます。

$ sudo apt install -y v4l-utils
$ v4l2-ctl –list-device

カメラの型番と共に、「/dev/video0」など表示されると、正常に認識しています。

4.ROS2(Humble Hawksbill)のセットアップ

以下、公式のインストール手順を参考にセットアップを行います。
Ubuntu (deb packages) — ROS 2 Documentation: Humble documentation

$ sudo apt install -y software-properties-common
$ sudo add-apt-repository universe
$ sudo apt update && sudo apt install -y curl
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg
$ echo “deb [arch=$(dpkg –print-architecture) \
signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu \
$(. /etc/os-release && echo $UBUNTU_CODENAME) main” \
| sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
$ sudo apt update

 

ROS2と共に、dev-toolsとカメラパッケージをインストールします。

$ sudo apt install -y ros-humble-desktop ros-dev-tools ros-humble-v4l2-camera

 

ROS2を利用する際には、以下のとおり、環境変数を適用します。

$ source /opt/ros/humble/setup.bash

5.ROS2 YOLOのセットアップ

GitHubにて、Humble用yolov8が公開されておりますので、その手順に従い、セットアップします。
GitHub – mgonzs13/yolov8_ros: Ultralytics YOLOv8, YOLOv9, YOLOv10 for ROS 2

 

パッケージ取得、ビルドの準備を行います。

$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws/src
$ git clone https://github.com/mgonzs13/yolov8_ros.git
$ pip3 install -r yolov8_ros/requirements.txt

 

パッケージをビルドする際に、エラーとなる依存パッケージを更新しておきます。

$ pip3 install –upgrade setuptools==69.5.1
$ pip4 install –upgrade sphinx==4.5.0

Sphinxを4.5.0にすることによって、依存関係のワーニングが表示されますが、問題なく動作することを確認しています。

 

依存関係の確認とビルドを実施します。

$ cd ~/ros2_ws
$ sudo rosdep init
$ rosdep update
$ export ROS_DISTRO=humble
$ rosdep install –from-paths src –ignore-src -r -y
$ colcon build

上記にて、エラーが無く完了しましたら、ros2用yolov8が利用できる準備が完了しました。

6.ROS2 Yolov8の実行

3つのターミナルを利用して実行させます。
GUIを利用しますので、SSHなどを利用されている場合は、事前にXの転送設定を行っておいてください。
今回は、直接デスクトップ操作することを前提に説明してまいります。

 

ROS2は、ノードという単位で動作します。物体検知するまでの概要図は以下となります。

3つのノードを3つのターミナルを利用して、順次実行します。

 

[ターミナル①]
ROS2の環境変数を適用し、カメラノードを起動します。

$ source /opt/ros/humble/setup.bash
$ ros2 run v4l2_camera v4l2_camera_node

 

[ターミナル②]
ROS2とYOLOの環境変数を適用し、ターミナル①の映像に対して、物体検知を行います。

$ source /opt/ros/humble/setup.bash
$ source ~/ros2_ws/install/setup.bash
$ ros2 launch yolov8_bringup yolov8.launch.py input_image_topic:=/image_raw

 

[ターミナル③]
ROS2の環境変数を適用し、映像を表示させます。

$ source /opt/ros/humble/setup.bash
ros2 run rqt_image_view rqt_image_view

 

rqtのウインドウが起動しますので、プルダウンより「/yolo/dbg_image」を選択し、リロードしてください。

以下のように、物体検知の映像がリアルタイムに表示されます。

モニタ(TV)、キーボード、マウス、椅子を検知していることが分かります。
また、物体検知の他に、姿勢、インスタンス・セグメンテーションが用意されています。

7.最後に

今回は、Jetson™におけるROS2の物体検知を紹介させていただきました。
その他周辺機器と組み合わせ利用することによって、より高度な機器操作が可能となり、自律型のロボットなどにも応用できるようになります。弊社エッジコンピューティングを利用いただき、業務の効率化、省力化に活かしていただければ幸いです。

プライベートLLM・RAGの運用基礎を支える 自由度の高い高性能GPUサーバー
AI基盤づくりのためのワークステーション・サーバー
生産現場のAI活用 学習用ワークステーションから推論用エッジPCまで

人気レポートランキング

レポートカテゴリ

製品カテゴリ