OSOYOO PI CARキット ROS2化 #12 – ROS2(humble) Ubuntu 23.10 on Raspberry PI5

OSOYOO PI CAR

これまで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のビルドから。今回は、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を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.packageurltag name備考(aptパッケージ名)追加作業
1rosbridge-suitehttps://github.com/RobotWebTools/rosbridge_suite.git1.3.2ros-humble-rosbridge-suitepip3 install bson
pip3 install tornado
2ros2_v4l2_camerahttps://github.com/tier4/ros2_v4l2_camera.gitタグ設定不要ros-humble-v4l2-cameraros2_v4l2_camera直下のCMakeLists.txtを以下のように修正

① 先頭にinclude(CheckLanguage)を追加
② find_package(CUDA)をcheck_language(CUDA)に変更

3 image_commonhttps://github.com/ros-perception/image_common.git5.2.0ros-humble-image-transportなし
4vision_opencvhttps://github.com/ros-perception/vision_opencv.git4.1.0ros-humble-cv_briddge

ros-humble-image_geometry
sudo apt install libboost-python-dev

sudo apt install python3-numpy
5image-transport-pluginshttps://github.com/ros-perception/image_transport_plugins.git4.0.0ros-humble-compressed-image-transport

ros-humble-image-transport-plugins
sudo apt install libtheora-dev
6rqt_image_viewhttps://github.com/ros-visualization/rqt_image_view.git

https://github.com/ros-visualization/rqt_image_view
1.3.0rqt_imageなし
7usb_camerahttps://github.com/ros-drivers/usb_cam.git0.8.1usb_cameraなし
ROS2 metapackage一覧

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を使用するので、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

上記までで、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変更時にヒートシンクを装着した関係で、OSOYOO PWM HATが当たりそうでしたので、GPIOピンに下駄を履かせました。

メカ的な変更はこれだけですが、ORB_SLAM3で使用するためには、カメラ調整が必要となります。
単眼ですので、内パラメータの調整のみを行えばよいはずですが、手順が難解です。
調整につきましては、次回以降に行おうと思います。

今回は、今回購入したカメラをORB_SLAM3で使えるようにパラメータ調整を行おうと思います。
また、よろしければ見ていただけるとありがたいです。

タイトルとURLをコピーしました