こんにちはshotaです。このシリーズではRaspberry Pi Mouse(ラズパイマウス)でROS2を動かしていきます。
今回はRaspberry Pi 4 Model BにUbuntu 20.04をインストールします。
また、初回起動時にnetplanによるWi-Fiの設定に失敗したので、再起動で解決したことを紹介します。
その後、Robot Operating System (ROS)のFoxy をインストールして、talker/listenerデモを実行します。
これまでのおさらい
過去の記事で、Raspberry Pi 4 Model BにUbuntu 18.04をインストールする方法を紹介しました。
また、ROS 2 Dashingをインストールする方法も紹介しています。
Ubuntu 20.04とROS 2 Foxyのインストール手順は、これらの記事とほぼ同じです。
そのため、今回の記事では変更点のみを紹介します。
Ubuntu 20.04のインストール
それでは、Ubuntu 20.04をインストールします。
これまでの続きということで、Ubuntu 18.04がインストールされたSDカードにUbuntu 20.04のイメージファイルを書き直すという作業から初めます。
作業用PCとしてUbuntu 20.04を使用します。
イメージファイルのダウンロードと書き込み
Raspberry Pi用のUbuntuイメージファイルは下記URLからダウンロードできます。
Raspberry Pi 4用の、64bit版 Ubuntu Server 20.04をダウンロードします。
Ubuntuの「ディスク」アプリケーションを使ってSDカードの中身を操作します。
新品のSDカードを使う場合は、パーティション削除のステップを飛ばして、そのまま「ディスクイメージをリストア」に進んでください。
SDカードにはUbuntu 18.04がインストール済みなので、パーティションを削除します。
もう一つのパーティションも削除します。
「ディスクイメージをリストア」で、ダウンロードしたイメージファイルをSDカードに書き込みます。
以降の手順はUbuntu 18.04インストール時と同じなので、説明を省略します。
netplanを用いてWi-Fiを有効化する
Ubuntu20.04を書き込んだSDカードをラズパイにセットし、起動します。
パスワードを変更した後にWi-Fiを設定します。
Ubuntu 18.04の時と同じくnetplanを使って設定しますが、いくつか手順が変わります。
設定するファイルに変更はありません。下記のコマンドを実行してファイルを編集します。
$ sudo vim /etc/netplan/50-cloud-init.yaml
設定ファイルの一例を紹介します。
SSIDやパスワード、IPアドレス等は適宜変更してください。
network: ethernets: eth0: dhcp4: true wifis: wlan0: optional: true access-points: ここにSSIDを書く: password: ここにパスワードを書く dhcp4: false addresses: [192.168.11.89/24] gateway4: 192.168.11.1 nameservers: addresses: [8.8.8.8, 192.168.11.1] version: 2
ファイル編集後sudo netplayn applyを実行すれば設定が反映されるのですが、エラーが出ました。
ここで、再起動します。
# 通常であればこのコマンドでネットワーク設定が反映される $ sudo netplan apply # エラーが出るので再起動する $ sudo reboot
再起動後もWi-Fiは機能していません。
ここで、再びsudo netplan applyを実行します。
$ sudo netplan apply
Warningが表示されますが、Wi-Fiが機能し、ネットワークに接続されるはずです。
# ネットワークに接続されているか確認する # 設定したIPアドレスが表示されていればOK $ ip addr --- 省略 --- 3: wlan0: ---省略--- link/ether --- 省略 inet 192.168.11.89
下記の情報によると、これはnetplanの不具合のようです。
ネットワークに接続できたので、下記コマンドを実行してパッケージを更新しましょう。
$ sudo apt update $ sudo apt upgrade
ネットワーク接続直後は自動アップデートによりapt update/upgradeが失敗する可能性があります。
その場合は少し時間が立ってからコマンドを実行してみてください。
$ tail -f /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
で確認できます。
参考ページ:https://askubuntu.com/questions/934807/unattended-upgrades-status
upgradeが終わったら再起動します。
$ sudo reboot
ネットワークに接続されていたらOKです。
作業を簡単にするため、以降の作業は外部PCからSSHでログインして実行しています。
ROS 2 Foxy Fitzroyのインストール
基本的には、前回のDashingと同じ手順でインストールできます。
公式のインストール手順はこちらです。
Set Locale
UTF-8がサポートされているため、設定不要です。
$ locale LANG=C.UTF-8 LANGUAGE= LC_CTYPE="C.UTF-8" LC_NUMERIC="C.UTF-8" --- 省略 ---
Setup Sources
手順通りにコマンドを実行します。
$ sudo apt update && sudo apt install curl gnupg2 lsb-release $ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - $ sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
Install ROS 2 packages
demoパッケージをすぐに実行したいので、ros-foxy-desktopをインストールします。
$ sudo apt update $ sudo apt install ros-foxy-desktop
Environment setup
次のコマンドを実行します。
$ source /opt/ros/foxy/setup.bash $ sudo apt install -y python3-pip $ pip3 install -U argcomplete
Try some examples
ターミナルを2つ用意して(SSHで2回ログインして)talker、listenerのサンプルを実行します。
# ターミナル1 $ source /opt/ros/foxy/setup.bash $ ros2 run demo_nodes_cpp talker [INFO] [1605763150.815268535] [talker]: Publishing: 'Hello World: 1' [INFO] [1605763151.815174897] [talker]: Publishing: 'Hello World: 2' [INFO] [1605763152.815142097] [talker]: Publishing: 'Hello World: 3' [INFO] [1605763153.815151876] [talker]: Publishing: 'Hello World: 4' ...
# ターミナル2 $ source /opt/ros/foxy/setup.bash $ ros2 run demo_nodes_py listener ... [INFO] [1605763191.352868425] [listener]: I heard: [Hello World: 12] [INFO] [1605763192.284799307] [listener]: I heard: [Hello World: 13] [INFO] [1605763193.284718355] [listener]: I heard: [Hello World: 14] [INFO] [1605763194.284705701] [listener]: I heard: [Hello World: 15] ...
listenrノードがトピックをサブスクライブ出来たら成功です。
まとめ
今回の記事のまとめです。
- Raspberry Pi 4 Model BにUbuntu 20.04をインストールできました
- 初回起動時はnetplanでネットワークに接続できません。再起動が必要です。
- ROS 2 Foxyのインストール手順はROS 2 Dashingとほぼ同じです
ラズパイマウスのROS 2パッケージがFoxyに対応できましたら、またブログにて紹介します。