🔖

Raspberry Pi Zero 2でROS 2 Humbleをビルドし動かす

2023/04/03に公開

背景

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のソースをビルドするスクリプトを作成しました.
(ソースのパッケージを読みだしてインストールするような知的な動作はしません)

https://github.com/NaokiTakahashi12/setup_scripts/blob/main/ros2/setup_ros_humble.bash

スクリプトは以下のように実行します.

$ 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のメモリが多くあるモデルを使用するとよいと思います.

参考・参照

  1. rosbag2 issues #872 rosbag2_transport ran out of memory in Rolling coverage job
  2. ROS 2 Documentation Humble Ubuntu Development Setup

Discussion