えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

Raspbian Bullseye上にROS2をビルドできました(ROS2・Raspbian)

久しぶりの投稿になりますーーー。最終投稿からいつの間にか3週間経ってしまいました…

Raspbian+rclsharkのパッケージを公開しているよっ!(Raspberry Pi4) - えいあーるれいの技術日記の続きです。この記事は、以前の記事よりも新しいRaspbian(Bullseye)でROS2を動かしています。

この記事ではRaspbianとRaspberry Pi OSの二つの名称が出てきますが、同じです。


軽量なOS上でROS2を動かしたい!!

もしかしたらご存知の方も多いかとは思いますが、以前から私はやたらRaspbian上へのROS2インストールに執着しています。これには個人的な趣味や研究などのと関わってくるのですが、大きく2点の理由があります。


Raspberry Pi4になって、高速読み書きができるSDカードやSSDを搭載すれば正直Ubuntuでもボトルネックを感じないくらいには操作できます。そのため、無理してまでROS2をRaspbianにインストールする必要はないです。しかし、それでもあの立ち上がりの速さと軽さは魅力的であるため作業の傍らビルドチャレンジを繰り返していました。qemu使えよ。


そしてやっと使える程度にはビルドができました。現時点ではRqtツールとRviz2のビルドが通っていないため、GUIで開発するには少し不便かもしれません。

以下のリポジトリに上げています。

github.com

苦労したところ

ビルドが通らなかった苦労したポイントを列挙します。rosdepが通用しない他のOSでも同様のことがいえると思います。

1. rosdepが対応していない。

正直これが一番面倒でした。頑張って足りないパッケージを列挙してaptやpipで直接インストールしています。rosdepのyamlファイル見たら分かりますが、あれを読むのは地獄です。

2. ROS2の関連パッケージがインストールできない

vcstoolとcolcon-common-extensionsのことです。これはpipでルートにインストールすることで解決します。python3-vcstoolsというパッケージが見つかりますが、全く違うパッケージらしいです。紛らわしすぎる…

3. atomicのリンクが見つからない

RaspbianでROS2をビルドしているとrcutilsとrviz2で次のエラーにぶつかります。atomicはインストールされているのに

pi@raspberrypi:~/ros2_foxy $ colcon build --symlink-install --packages-select rcutils
Starting >>> rcutils 
--- stderr: rcutils                              
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_compare_exchange_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_load_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_store_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_compare_exchange_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_load_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_store_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_compare_exchange_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_load_8'
/usr/bin/ld: librcutils.so: undefined reference to `__atomic_store_8'
collect2: error: ld returned 1 exit status

これはCMakeListsの132行目に-latomicを直接追記して対処しました。

target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS} -latomic)

Rviz2についてはこの対策が分かっていないのでビルドできていません。Raspberry PiでRvizを立ち上げるかどうか怪しい気がするので、ビルド対象から外しています。

4. PyQt5の関連モジュールがインポートできない(rqt・ビルド後)

rqtは関連パッケージをインストールすればビルドが通りますが、実行時にモジュールが見つからない系のエラーが出ます。これについては未解決なので、今後修正予定です。

ビルド済みパッケージのインストール(Raspberry Pi OS Bullseye)

ビルド済みのROS2-GalacticをRaspberry Piにインストールするためのスクリプトを作成しました。

github.com

新しくRaspbianを焼いたら、ターミナルを開いて次のコマンドを叩くだけ!(動作確認済みです)

curl -s https://raw.githubusercontent.com/Ar-Ray-code/rpi-bullseye-ros2/main/install.bash | bash

インストール先はaptで取得するプログラムと同様、/opt/ros/galacticです。インストールするOSは32bit版である必要があるので注意してください。とにかく長い間やりたかったことができたので個人的には満足です。少しはCMakeと戦えるようにはなったのかなーーー。

次回はYOLOX-ROS + Raspbianについて書きます。


同じGUIアプリでもTurtlesimは動きます。なぜ…

f:id:Ray_ar:20220312184936p:plain