これまでRaspberry PI3+Ubuntu 22.04+ROS2(humble)で搭載を行ってきたのですが、そろそろRaspberry PI3では厳しいので、Raspberry PI5へ乗り換えようと考えました。
ですが、調べてみるとRaspberry PI5に搭載可能なUbuntuは、23.10と24.04の2種類のみで、22.04には対応していません。
さらに、2024年5月7日現在、23.10、24.04に搭載可能なROSも存在しないように見えます。
手としては、以下の2つがあるように思います。
1. Raspberry PI OS+Docker
2. ROS2(humble)をソースからビルド
私は、Raspberry PI5のリソースを最大限有効利用したかったことと、少しROS2 humbleの再実装に興味がありましたので、2を選択しました。
過去のブログを手掛かりに、ROS2のビルドを行った後、ORB_SLAM3搭載まで再登載を行いました。
結果自分が使っている程度のモノは動きましたが、正直手間がかかりますし、品質的な問題やpythonのバージョン等気になることもありますので、特に理由がない限りは1をやった方がよいかと思います。
ただ、今回のROSビルドしなおしにより、色々と知見は得たので個人的にはよい機会だったと思います。
■ ROS2(humble)のビルド
まずはROS2のビルドから。今回は、Ubuntu 23.10上で動作させようと思います。
もう一つの選択肢しとしてUbuntu 24.04がありますが、Ubuntu 22.04から変わりすぎていて、危ない香りがするので、Ubuntu 23.10を選択しました。
基本的には、ROS2のソースビルド手順に従えばよいと思いますが、チョコチョコとUbuntuのバージョンや環境の違いをごまかす必要があります。
まずは、先駆者がいなのかしらべてみたところ、ビルドを試した方がおられました。
LKSeng Blogに元々のソースビルドからの変更点や変更理由が記載されています。
手順については、ここでは記載しませんが、内容に間違いはありませんでした。
サンプル、rviz2の起動も確認できました。
ハマるとこれだけで時間を消費してしまいます。貴重な情報発信には感謝しかありません。
環境の違いだと思いますが、「colcon build –symlink-install」でビルドを行う際に、何種類かのエラーが発生しました。これらを対処しつつビルド行います。
ちなみに、ビルドはものすごく時間がかかります。
ツール類のセットアップ、ROS2のコードダウンロードだけでも1時間程度かかったように思います。
ビルドは、そこからさらに数時間かかると思います。一度でうまくいけば1.5時間程度のようです。
自分は何度か繰り返しましたので、結局数時間かかりました。
〇 githubからのダウンロード失敗
いくつかのgithubからのzipダウンロードに何度か失敗しているようでした。
これについては、ダウンロードに失敗した.zipを削除した上で、「colcon build –symlink-install」を再試行すると解消しました。
〇 develop.pyのワーニング対応
下記のようなワーニングが発生します。これは、Yolo v5をビルドする際にも発生しました。
/.local/lib/python3.10/site-packages/setuptools/command/develop.py:40: EasyInstallDeprecationWarning: easy_install command is deprecated.
!!
********************************************************************************
Please avoid running ``setup.py`` and ``easy_install``.
Instead, use pypa/build, pypa/installer or other
standards-based tools.
See https://github.com/pypa/setuptools/issues/917 for details.
********************************************************************************
!!
easy_install.initialize_options(self)
こちらは、同様にに.bashrcにワーニングを抑制するよう、下記の設定を追加しておきます。
PYTHONWARNINGS="ignore:easy_install command is deprecated."
export PYTHONWARNINGS
〇 cmakeワーニング対応
cmakeのワーニング:CMP0148が所々発生します。
これは、cmake.txtで、find_package(PythonInterp …)、find_package(PythonLibs …)が使用されているのですが、これらのモジュールが使えなくなったために警告が発生しています。
こちらは、まず、下記のように使用しているファイルをピックアップします。
$ grep -rn "find_package(PythonInterp" src/* $ grep -rn "find_package(PythonLibs" src/*
探し出したファイルの先頭付近(適当)に下記一文を足します。
ファイルが重複して見つかった場合には、1か所入れればよいです。
cmake_policy(SET CMP0148 OLD)
■ ROS2 metapackageのビルド
今までは、プレビルドされたROS2 metapackageをaptで取得して使用していたのですが、当然、そのような使い方はできません。ですので、ソースコードより取得してビルドすることになります。
ビルドする前に、前章でビルドしたROS2を参照するように~/.bashrcに追加しておきます。
(青文字部は、ROS2をビルドしたパス)
:
:
# here's the ROS2 configuration.
source /opt/ros/humble/setup.bash
source <ROS2ビルドディレクトリ>/install/setup.bash
# this is to depress compile errors for yolo v5 or Ubuntu 23.10.
PYTHONWARNINGS="ignore:easy_install command is deprecated."
export PYTHONWARNINGS
今まで導入してきたROS2 metapackageを一つづつビルドします。
基本的には、下記の手順でソースコードを取得してビルドするだけです。
ここでは、ROS2 metapackageビルド環境を「~/ros2_humble_packages」で示します。
$ mkdir -p ~/ros2_humble_packages/src
$ cd ~/ros2_humble_packages/src
$ git clone <url>
$ cd <package>
$ git checkout tags/<tag name>
$ <追加作業>
$ cd ~/ros2_humble_packages
$ colcon build --symlink-install
$ source ~/.bashrc
:
: 緑部を必要なだけ繰り返す。<package>、<url>、<tag name>、<追加作業>は後述
:
今回、自分が使用する<package><url><tag name>は、以下の通りです。
カメラに関しては、ros2_v4l2_camera以外にusbZ_cameraを追加しました。(後ほど理由を説明します)
No. | package | url | tag name | 備考(aptパッケージ名) | 追加作業 |
1 | rosbridge-suite | https://github.com/RobotWebTools/rosbridge_suite.git | 1.3.2 | ros-humble-rosbridge-suite | pip3 install bson pip3 install tornado |
2 | ros2_v4l2_camera | https://github.com/tier4/ros2_v4l2_camera.git | タグ設定不要 | ros-humble-v4l2-camera | ros2_v4l2_camera直下のCMakeLists.txtを以下のように修正 ① 先頭にinclude(CheckLanguage)を追加 ② find_package(CUDA)をcheck_language(CUDA)に変更 |
3 | image_common | https://github.com/ros-perception/image_common.git | 5.2.0 | ros-humble-image-transport | なし |
4 | vision_opencv | https://github.com/ros-perception/vision_opencv.git | 4.1.0 | ros-humble-cv_briddge ros-humble-image_geometry | sudo apt install libboost-python-dev sudo apt install python3-numpy |
5 | image-transport-plugins | https://github.com/ros-perception/image_transport_plugins.git | 4.0.0 | ros-humble-compressed-image-transport ros-humble-image-transport-plugins | sudo apt install libtheora-dev |
6 | rqt_image_view | https://github.com/ros-visualization/rqt_image_view.git https://github.com/ros-visualization/rqt_image_view | 1.3.0 | rqt_image | なし |
7 | usb_camera | https://github.com/ros-drivers/usb_cam.git | 0.8.1 | usb_camera | なし |
■ アプリケーションビルド環境の構築
ROS2 humble、metapackageを導入したところで、アプリケーションビルド用にvenvを導入しておきます。PiCarを動かすには、Yolo、その他パッケージを導入する必要がありますが、python 3.11.6では、パッケージ導入が制限されているものがあり、その回避策として、venvを導入します。
venv導入
venvは、以下のように設定します。
青文字部は、自身の環境に合わせて設定すればよいかと思います。
venvに導入されていないものは、すでに導入済みのパッケージを使えるようにしておきます。
$ python3 -m venv ~/ROS2 --system-site-packages
追加した後、~/.bashrcに下記のように追記します。
source ~/ROS2/bin/activate
これで準備完了です。
② picar 必要パッケージの導入
Python以外のパッケージも必要なので、過去のブログを見ながら手順をトレースしました。
基本的に互換パッケージを導入していますが、まったく同じ手順とはいきません。
最終的に以下のような手順でパッケージを導入しました。
$ pip3 install adafruit-pca9685
$ pip3 install adafruit-circuitpython-servokit
$ cd yolov5
$ pip3 install -r requirements.txt
$ pip3 install rpi-lgpio
$ pip3 install gpiod
※ torch、torchvisionについては、yolov5のrequirements.txtに従って導入するだけにしました。
※ rpi-lgpioは、rpi-gpioの代わりです。
※ gpiodは、adafruitのコード内で参照されていましたので、追加しました。
③ venv対応:setup.cfgの修正
venvを使用するので、ROS2 pythonアプリケーションのビルド環境に修正が必要になります。
各pythonパッケージ直下にsetup.cfgが存在します。
下記は、picar_py_pkg直下のsetup.cfgの修正例ですが、青字部を追加します。
[develop]
script_dir=$base/lib/picar_py_pkg
[install]
install_scripts=$base/lib/picar_py_pkg
[build_scripts]
executable = /usr/bin/env python3
■ Raspberry PI5特有の問題
上記までで、ROS2のパッケージ類の準備はできたと思うのですが、さらに、下記の問題がありました。
〇 問題1:ラズパイカメラモジュールをv4l2で扱えない
ラズパイカメラモジュールをv4l2で動作させようとしたのですが、v4l2のストリーミング開始APIでパラメータエラーが発生してしまい、まったく動作しません。
色々と調査したのですが、ダメ。成功した人もいない模様。
自分の力では対応不可能であるので、あきらめてカメラをUVCカメラに変更することにしました。
買ったカメラは、OV3660搭載のUVCです。とりあえず、安くて画角がある程度あるものにしました。
あまり評価はよくない印象ですが、とりあえず特徴点を捕らえられればよいので、値段重視で選定しました。ですが、レンズが暗いのか、シャッタースピードが遅くブレが多い感じがします。少し動いただけで画像がぶれます。もう少し奮発すればよかったと後悔しています。
また、このカメラで30fpsで撮影するためには、ros2_v4l2_cameraで不可能になりました。
このカメラはMotion-Jpegフォーマットで受信する場合のみ30fpsが実現可能で、最高画質かつYUYVで受信すると5fpsとなってしまい、実用レベルではありません。
なので、新たにusb_cameraを追加してMotion-Jpegを受信できるようにしました。
ros2_v4l2_cameraとpublisherは同じですので、置き換え可能です。(launchファイルのみ変更)
〇 問題2:NVMe装着時にOSOYOO PWM HATを接続するとWiFiがつながらない
理由はよくわからないままですが、Raspberry PI5にNVMeを装着し、OSOYOO PWM HATを装着するとWiFiがつながりません。なぜか、RasbianはOSOYOO PWM HATを装着しても動作します。
理由ははっきりしないですが、WiFi初期化手順の問題か消費電力の問題のように思います。
深追いしても片付けられそうにないのと、電力的にNVMeを装着して走行させても、消費電力的に無理がありますので、潔くNVMe起動はあきらめることにしました。
■ カメラ、Raspberry PI5接続による影響。
メカ的には、カメラを固定しているマウント形状を変更しました。
Raspberry PI5変更時にヒートシンクを装着した関係で、OSOYOO PWM HATが当たりそうでしたので、GPIOピンに下駄を履かせました。
メカ的な変更はこれだけですが、ORB_SLAM3で使用するためには、カメラ調整が必要となります。
単眼ですので、内パラメータの調整のみを行えばよいはずですが、手順が難解です。
調整につきましては、次回以降に行おうと思います。
■ 次回
今回は、今回購入したカメラをORB_SLAM3で使えるようにパラメータ調整を行おうと思います。
また、よろしければ見ていただけるとありがたいです。