Raspbian Bullseye上にROS2をビルドできました(ROS2・Raspbian) - えいあーるれいの技術日記の続きです。
今回は、Raspberry Pi 上でYOLOX-ROSが動いたよという報告とそのインストール方法について説明します。
学生にとって計算資源の購入はなかなかハードルが高いと思います。ロボコンなどの団体で活動しているならともかく、仮に半導体が不足していなくても個人でJetsonや高額なGPUはなかなか手が出せません…
ROSの学習にはとても時間がかかりなかなか「動かせる」という実感がわくような体験ができないと感じていたので、学生視点では理論よりは分かりやすい結果をより手軽に得られるサンプルがあればなぁと思うときがあります。
そこで今回はおそらく誰もが購入しているであろう(?)Raspberry Piを用いてYOLOX-ROSを用いてお手軽物体検出+ROSについて書きます。
この記事ではNeural Compute Stick2を使いますが、EOLが予定されているそうです。よく考えたら全然お手軽じゃないですね…
YOLOX-ROS (tiny・ROS2-Galactic)がRaspberry Pi4 + Raspbianの組み合わせで動作することを確認しました。
— Ar-Ray (@Ray255Ar) 2022年3月10日
Pi4 + NCS2で6.5 fps❗️#ROS2 #RaspberryPi pic.twitter.com/qjVFkPvnYn
なお、この記事はYOLOX ROS Raspbian (NCS2))の記事を引用しています。
環境
ハードウェア
Neural Compute Stick2 の入手が難しくなるそうですが、Intel CPUが搭載されたNucやIris XeなどのOpenvinoが搭載されたハードウェアがあれば同様に動きます。
- Raspberry Pi4 Model B (2GB以上のRAMがあると安心)
- Neural Compute Stick2
- ウェブカメラ
- モデル変換のためのIntel CPU搭載コンピュータ(任意)
ソフトウェア
OpenVINOと最新のROS2が動けばYOLOX-ROSが動くと思います。
- Raspberry Pi OS Bullseye(2022年時点で最新のRaspbian)
- ROS2-Galactic
- Raspberry Pi 用 OpenVINO
- YOLOX-tiny
セットアップ
1. Raspberry Pi OSをSDカードに焼きます
Raspberry Pi の環境構築がわからない場合の参考ページを以下に示します。
2. ROS2-Galacticのインストール
Ubuntu 20.04を使用している場合は以下のリンクからインストールを行ってください。
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++バージョンなので(なぜか)動きます。
以下のコマンドを実行します。うまく行かない場合は以下のリンクからインストールを確認してください。
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: CPU
をdevice: 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で質問してください。できる限りお答えします!