Raspberry Pi Zero 2でROS 2 Humbleをビルドし動かす
背景
Raspberry Pi Zero 2って小さくて良いですよね.
ぱっと調べたところ,Raspberry Pi OS上でROS 2 Humbleをソースビルドし動かしている記事がなさそうであったため記録として書きます.
Raspberry Pi Zero 2の制約
ROS 2を動かすとなるとOSには,Ubuntuを使用したいところです.
しかし,Raspberry Pi Zero 2のRAMは500 MBです.
そのため,Ubuntu 22.04 LTS(Server)のRAM要件(1 GB必要)を満たしていません.
なのでRaspberry Pi OSを使用することとします.
また,ROS 2 Humbleを動作させる上で32 bitのOSであると不都合が多いため64 bitのRaspberry Pi OSを使用します.
ブート用SDカードの作成
上記の制約を加味した上でRaspberry Pi OSのブート用のSDカードを作ります.
特に変わったことはしていませんが,ビルド時にメモリをそれなりに必要とするのでデスクトップの含まれないliteを選んでいます.
自分はCLIで,以下のようにSDカードにイメージを焼き込みました.
$ wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-02-22/2023-02-21-raspios-bullseye-arm64-lite.img.xz
$ xzcat 2023-02-21-raspios-bullseye-arm64-lite.img.xz | sudo dd of=/dev/<SDカードデバイス> bs=4M
ただ,Raspberry Piのダウンロードサイトを見てみるとRaspberry Pi Imagerを使用して書き込むことが推奨されているように見えます.
そのため,こちらを使用してブート用のSDカードを作成してもよいと思います.
ROS 2 Humbleをビルド
本来はrosdep2などを使用して,依存関係にあるパッケージをインストールしてからHumbleのソースをビルドします.(ROS 2 Documentation Humble Development Setup)
しかしUbuntuのapt repositoryを追加しても動かないものがありました.
なので,依存するパッケージを手動でインストールしビルドすることとしました.
インストールするライブライをまとめ,ROS 2 Humbleのソースをビルドするスクリプトを作成しました.
(ソースのパッケージを読みだしてインストールするような知的な動作はしません)
スクリプトは以下のように実行します.
$ wget https://raw.githubusercontent.com/NaokiTakahashi12/setup_scripts/main/ros2/setup_ros_humble.bash
$ bash setup_ros_humble.bash
ちなみにビルドには8時間ほどかかりました.
(アキバで投げ売りされていた16GB 200円のSDカードでやったら15時間かかりました)
ビルドが終わると,カレントディレクトリにros2_humble
といったディレクトリができているので,中にあるinstall/setup.bash
をsourceすれば終了です.
ビルドを高速化したい場合には,クロスコンパイルやRaspberry Pi 4のメモリが多くあるモデルを使用するとよいと思います.
Discussion