私は、Raspberry Pi OS (Raspbian) + ROS2の環境構築には結構時間をかけて取り組んでいます。
過去記事:ROS2-HumbleのRaspbian-Bullseye (32bit/64bit)向けビルドを公開しました。
最近ではRaspbian上でRviz2を動かせるようになり、ほとんどの依存関係は解消できるようになりました。
Raspbianにこだわっている理由としては、UbuntuがRaspberryPiには結構重く、他の人がRaspberryPi+Ubuntuで開発をしているものを見る感じでも使いづらいだろうなーと感じたからです。RaspbianだとVSCodeも使いやすいです。
最近は、私が公開しているRaspbian向けのROSインストーラである「rpi-bullseye-ros2」の使用報告もあり、GitHub Sponsor経由での支援も頂いています。
まだまだ途上ではありますが、必要とされていることを実感でき嬉しい限りです。
このパッケージは私も毎週のように使用しており定期的に改善を行っているので、改善提案などあればissueやpull requestを送っていただけるとありがたいです。
コンパイルが…遅い
ところで、皆さんはRaspberryPi向けにクロスコンパイルを行っていますか?
私は、半年前まではデスクトップPCでプログラムを作成して、完成したらランタイムのRaspberryPiでコンパイルをしていました。(その当時は、ROSもRaspberryPiでコンパイルしていました…)
RaspberryPiでコンパイルはやはり遅いのと、パッケージが大きすぎた場合にRAMによってはフリーズしてしまいます。
できれば高性能なコンピュータであらかじめコンパイルできると、大きなプロジェクトでも手軽にコンパイルできるのになーと思いクロスコンパイルツールの模索をしていました。
当初は同じARM64のJetson AGXでクロスコンパイル環境を作成しており、debian/bullseye環境のDockerコンテナを作成してワークスペースをマウント→コンパイルしていました。
そのうち、Twitterで教えてもらったqemu-user-staticを使用してx86-64でコンパイルするようになりました。
qemu-user-staticは、そのコンテナを実行した後のターミナル使用するDockerの環境がARMなどの別アーキテクチャになる魔法のようなコンテナです。
qemuと同様に命令変換コストがかかりますが、高性能なデスクトップコンピュータ(i9-12900KF)であればRaspberryPiの4.6倍の速度でコンパイルすることができます。
ちなみに、qemuありとなしではなしの方がありに比べて4倍の速度がありました。命令の変換コスト、高いですね…
クロスコンパイルツールの使用方法
これまでの知見をもとに、Dockerfileと実行スクリプトでGitHubリポジトリを作成しました。
使用する際はFork推奨です。
rpi-bullseye-ros2-xcompileのインストール
現時点では、Dockerfileなどを書き換えやすいようにショートカットのみを作成しています。
git clone https://github.com/Ar-Ray-code/rpi-bullseye-ros2-xcompile cd rpi-bullseye-ros2-xcompile bash create_alias.bash source ~/.bashrc
サンプルプロジェクトのダウンロード
サンプルプロジェクトをダウンロードします。
ROSで画像処理を行う際に必要な依存パッケージであるimage_commonを使用します。
mkdir -p ~/ros2_ws/src/ cd ~/ros2_ws/src git clone https://github.com/ros-perception/image_common -b ros2
xcompile_rpi_ros2 [ros2用のワークスペース] [Docker内で実行するシェルスクリプト(オプション)]
でコンパイルできます。
aptで追加パッケージをインストールしないといけない場合やコンパイルオプションを変更したい場合は、以下のファイルを編集してください。
- Dockerfile:依存パッケージのインストールなど
- Docker内で実行されるシェルスクリプト:コンパイルコマンドの調整など
xcompile_rpi_ros2 ~/ros2_ws
コンパイルが正常に終わると、対象ワークスペース(ここでは ~/ros2_ws
)に built_pkg_rpi_<unixtime>.zip
が作成されています。コンパイル時のタイムスタンプが付いているので、上書きされません。
RaspberryPi上で使用したい場合はunzipして、展開後のsetup.bash
を実行してパスを通すだけで使用できます。
Zenn Booksでのドキュメント化📕
現在、チュートリアル資料やクロスコンパイルのノウハウなどを含めたドキュメントをZenn Booksで作成中です。
タイトルは「RaspberryPi OSで始めるROS2」で、ほとんどの項目を無料公開にする予定です。
他の有料記事に負けない分量とクオリティを目指す予定なので、今しばらくお待ちください。