えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

YOLOX-ROSをRaspbianで動かす(Raspberry Pi)

Raspbian Bullseye上にROS2をビルドできました(ROS2・Raspbian) - えいあーるれいの技術日記の続きです。

今回は、Raspberry Pi 上でYOLOX-ROSが動いたよという報告とそのインストール方法について説明します。


学生にとって計算資源の購入はなかなかハードルが高いと思います。ロボコンなどの団体で活動しているならともかく、仮に半導体が不足していなくても個人でJetsonや高額なGPUはなかなか手が出せません…

ROSの学習にはとても時間がかかりなかなか「動かせる」という実感がわくような体験ができないと感じていたので、学生視点では理論よりは分かりやすい結果をより手軽に得られるサンプルがあればなぁと思うときがあります。

そこで今回はおそらく誰もが購入しているであろう(?)Raspberry Piを用いてYOLOX-ROSを用いてお手軽物体検出+ROSについて書きます。

この記事ではNeural Compute Stick2を使いますが、EOLが予定されているそうです。よく考えたら全然お手軽じゃないですね…

なお、この記事はYOLOX ROS Raspbian (NCS2))の記事を引用しています。

github.com

環境

ハードウェア

Neural Compute Stick2 の入手が難しくなるそうですが、Intel CPUが搭載されたNucやIris XeなどのOpenvinoが搭載されたハードウェアがあれば同様に動きます。

  • Raspberry Pi4 Model B (2GB以上のRAMがあると安心)
  • Neural Compute Stick2
  • ウェブカメラ
  • モデル変換のためのIntel CPU搭載コンピュータ(任意)

ソフトウェア

OpenVINOと最新のROS2が動けばYOLOX-ROSが動くと思います。

セットアップ

1. Raspberry Pi OSをSDカードに焼きます

Raspberry Pi の環境構築がわからない場合の参考ページを以下に示します。

projects.raspberrypi.org

2. ROS2-Galacticのインストール

Ubuntu 20.04を使用している場合は以下のリンクからインストールを行ってください。

docs.ros.org

Raspbian の場合は、パッケージが提供されていないどころかrosdepすら対応していないため、自力でビルドするか私が作ったROS2-Galacticをインストールする必要があります。

次のコマンドを実行してRaspberry Piのパスワード(デフォルトはraspberry)を入力します。

curl -s https://raw.githubusercontent.com/Ar-Ray-code/rpi-bullseye-ros2/main/install.bash | bash
# > enter your password

インストールが一通り終わると、ROS2が使える用になると思います。デモプログラムは次のように実行します。

source /opt/ros/galactic/setup.bash
ros2 launch demo_nodes_cpp talker_listener.launch.py

# ログが以下の通り表示されればOK ==============================================
# > [INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2022-03-11-00-20-07-941897-ubuntu-laptop-801149
# > [INFO] [launch]: Default logging verbosity is set to INFO
# > [INFO] [talker-1]: process started with pid [801155]
# > [INFO] [listener-2]: process started with pid [801157]
# > [talker-1] [INFO] [1646925609.177178675] [talker]: Publishing: 'Hello World: 1'
# > [listener-2] [INFO] [1646925609.177956042] [listener]: I heard: [Hello World: 1]
# > [talker-1] [INFO] [1646925610.177101792] [talker]: Publishing: 'Hello World: 2'
# > [listener-2] [INFO] [1646925610.177643041] [listener]: I heard: [Hello World: 2]

インストール方法が変更される可能性があるので、詳しくはGitHubを確認してみてください。

3. Raspberry Pi用のOpenVINOランタイムのインストール

OpenVINOはRaspberry Pi用に実行用のバイナリを提供しています。ただし、OSが一つ古い(というよりはPythonのバージョンが古い)のでPythonではOpenVINOを実行できません。

今回実行するYOLOX-ROSはC++バージョンなので(なぜか)動きます。

以下のコマンドを実行します。うまく行かない場合は以下のリンクからインストールを確認してください。

docs.openvino.ai

wget https://storage.openvinotoolkit.org/repositories/openvino/packages/2021.4/l_openvino_toolkit_runtime_raspbian_p_2021.4.582.tgz
sudo mkdir -p /opt/intel/openvino
sudo tar -xf l_openvino_toolkit_runtime_raspbian_p_2021.4.582.tgz --strip 1 -C /opt/intel/openvino
source /opt/intel/openvino/bin/setupvars.sh
sudo usermod -a -G users "$(whoami)"
sudo reboot

再起動後、次のコマンドを入力してインストールされているか確認できます。

sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh 
source /opt/intel/openvino/bin/setupvars.sh
# ==== Could not findが出るが、Python関連なので無視 ===========
# > [setupvars.sh] WARNING: Can not find OpenVINO Python module for python3.9 by path /opt/intel/openvino/python/python3.9
# > [setupvars.sh] WARNING: OpenVINO Python environment does not set properly
# > [setupvars.sh] OpenVINO environment initialized <- これでOK

4. YOLOX-ROSのダウンロードとビルド

先ほどの説明と被りますが、Raspberry PiではROS2に関連したパッケージをaptで取得できないため、GitHubやGitLabから直接ソースコードを落としてきてビルドする必要があります。

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/ros-perception/image_common.git -b galactic
git clone https://gitlab.com/boldhearts/ros2_v4l2_camera.git -b foxy
git clone https://github.com/ros-perception/vision_opencv.git -b galactic
git clone https://github.com/Ar-Ray-code/YOLOX-ROS.git --recursive

ros2_v4l2_cameraはYOLOX-ROSとComposable Nodeとして繋がっています。

5. モデルのダウンロード

YOLOXのリポジトリからonnxモデルをダウンロードしてきてModel Optimizerを用いて変換する必要がありますが、Raspberry Piでは作成できません。

ここではデモ用に作成した変換済モデルを落としてきて使います。

Intel CPUでも動きます。

wget -P ~/ros2_ws/src/YOLOX-ROS/weights/openvino https://github.com/Ar-Ray-code/YOLOX-ROS/releases/download/v0.2.0/yolox_tiny.bin
wget -P ~/ros2_ws/src/YOLOX-ROS/weights/openvino https://github.com/Ar-Ray-code/YOLOX-ROS/releases/download/v0.2.0/yolox_tiny.xml

6. yamlの変更

vimなどのエディタでtiny_openvino.yamlを開いてdevice: CPUdevice: MYRIADに変更します。

7. ビルド

cd ~/ros2_ws
colcon build --symlink-install --cmake-args -DYOLOX_USE_TENSORRT=OFF -DYOLOX_USE_OPENVINO=ON

8. 実行

source ~/ros2_ws/install/setup.bash
ros2 launch yolox_ros_cpp yolox_openvino.launch.py

うまくいかない部分や分からない点があれば、TwitterのDMやGitHubのissueで質問してください。できる限りお答えします!