なぜ、UbuntuではなくRaspberry Pi OS?
ROS2がTier 1サポートとしているLinuxディストリビューションはUbuntuです。Rasperry Pi OSは、DebianベースなのでTier 3に該当します。
よって、ROS2を動かすにはRaspberry Pi 5の場合はUbuntu 24.04を使った方が良いのですが、デバイス・ドライバ周りで大変になりそうな予感がします。ですので、Raspberry Pi OSにインストールする事にしました。
なぜ、Jazzy Jalisco?
これを書いている2024年5月4日現在はJazzy Jaliscoはリリースされていません。(5月23日リリース予定)
しかし、Raspberry Pi 5にインストールできるRaspberry Pi OSはDebian 12(Bookworm)がベースになっています。このBookwormをサポートするROS2はJazzy Jaliscoです。ちょうど5月1日からJazzy Jalisco Testing and Tutorial Partyが実施されるので、チュートリアルにしたがってインストールする事にしました。
ソースからのインストール手順
システムセットアップ
ロケールの設定
現状の設定の確認をしたところ、イギリスの設定になっていました。
$ locale
LANG=en_GB.UTF-8
LANGUAGE=
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=
ROS2の前提はen_US.UTF-8
になっています。今回は、この他にC.UTF-8
とja_JP.UTF-8
も変更できるようにしておきます。
まず、localsパッケージをインストールします。
sudo apt update && sudo apt install locales
/etc/locale.gen
を編集します。
sudo vi /etc/locale.gen
3行を以下のようにアンコメントします。
# 前略
C.UTF-8 UTF-8
# 中略
en_US.UTF-8 UTF-8
# 中略
ja_JP.UTF-8 UTF-8
# 後略
ロケールを生成し、更新します。
sudo locale-gen
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
必要なリポジトリを有効化
必要なパッケージをインストールします。
sudo apt install software-properties-common
ROS 2 GPG keyを追加します。
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
リポジトリを追加します。
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2-testing/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
開発ツールをインストール
以下のようにコマンドを実行してパッケージをインストールします。
sudo apt update && sudo apt install -y \
python3-pip \
python3-pytest-cov \
python3-flake8-blind-except \
python3-flake8-class-newline \
python3-flake8-deprecated \
python3-pytest-repeat \
python3-pytest-rerunfailures \
ros-dev-tools
ROS 2のビルド
ROS 2のコードの取得
mkdir -p ~/ros2_jazzy/src
cd ~/ros2_jazzy
vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src
rosdepを使って依存パッケージをインストール
~/ros2_jazzy
ディレクトリで、以下のコマンドを実行します。
sudo apt upgrade
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"
RMWの追加インストール
RMWについては、デフォルトのFastDDS
を使うのでスキップします。
ワークスペースでビルド
以下のようにビルドします。3〜4時間かかりました。
cd ~/ros2_jazzy/
colcon build --symlink-install
環境のセットアップ
. ~/ros2_jazzy/install/local_setup.bash
例題を実行
新しいターミナルを開いて以下のようにtalker
を実行します。
$ . ~/ros2_jazzy/install/local_setup.bash
$ ros2 run demo_nodes_cpp talker
[INFO] [1714799965.074857896] [talker]: Publishing: 'Hello World: 1'
[INFO] [1714799966.074809413] [talker]: Publishing: 'Hello World: 2'
[INFO] [1714799967.074837432] [talker]: Publishing: 'Hello World: 3'
[INFO] [1714799968.074872230] [talker]: Publishing: 'Hello World: 4'
# 後略
別ターミナルで以下のようにlistener
を実行します。talker
の実行の後から開始したので、最初のメッセージは受け取れていません。
$ ros2 run demo_nodes_py listener
[INFO] [1714799984.097407047] [listener]: I heard: [Hello World: 20]
[INFO] [1714799985.076156630] [listener]: I heard: [Hello World: 21]
[INFO] [1714799986.076119553] [listener]: I heard: [Hello World: 22]
[INFO] [1714799987.076113662] [listener]: I heard: [Hello World: 23]
# 後略
終了するには、Ctrl + C
を入力します。
無事、インストールできてROS 2が動きました。