Raspberry Pi 3 Model BにUbuntu20.04とROS2をインストール

仕事でよくUbuntuに触っているのですが、20.04とROS2をまだ触ったことがなかったので

手持ちのラズパイにインストールして簡単に触ってみたいと思います

目次

参考ページ

qiita.com

手順

Raspberry Pi Imagerをダウンロード

公式から落としてきます

www.raspberrypi.org

Ubuntu 20.04 LTSイメージをインストール

ダウンロードしたImagerを起動

f:id:chigrii:20200628234039p:plain

「CHOOSE OS」をクリックし、「Ubuntu」をクリック

f:id:chigrii:20200628234012p:plain

64bit版の「Ubuntu 20.04 LTS」を選択

f:id:chigrii:20200628234019p:plain

「CHOOSE SD CARD」をクリック、名前を確認して書き込み先のSDカードを選択

f:id:chigrii:20200628234025p:plain

これで準備完了。「WRITE」をクリックして書き込みます。まあまあ時間がかかるので気長に待ちましょう

f:id:chigrii:20200628234046p:plain

書き込み完了!

f:id:chigrii:20200628234052p:plain

ラズパイ初期セットアップ

忙しい人のために初期設定とROS2のインストール&サンプルのビルドをやってくれるスクリプトを作成しました

ぜひクローンして使ってください(ホスト名の変更は手動でお願いします、、、)

github.com

以下マニュアル設定


デフォルトではラズパイのキーボード設定がUSレイアウトになっているので注意

(ネットワーク設定するまでの我慢、、、)

以下参考まで

www.nagasaki-gaigo.ac.jp

f:id:chigrii:20200628233639j:plain

なんとも無機質な画面で起動

ログインユーザー、パスワードともにデフォルトのubuntuでログイン

f:id:chigrii:20200628233617j:plain

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"

無事に20.04で起動できてるっぽいですね

お好きなホスト名に変更

sudo hostnamectl set-hostname <ホスト名>

タイムゾーンの設定

sudo timedatectl set-timezone Asia/Tokyo

ネットワークの設定

項目 詳細
addresses ラズパイに設定するIPアドレス
gateway4/nameservers->addresses ルーターIPアドレス
network:
    ethernets:
        eth0:
            dhcp4: false
            addresses: [192.168.0.100/24]
            gateway4: 192.168.0.1
            nameservers:
                    addresses: [192.168.0.1]
    version: 2

設定を反映させ、再起動します

sudo netplan apply
sudo reboot

IPアドレスを確認

うまくいっていればeth0に上で設定したIPが表示されるはず

$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether b8:27:eb:5b:de:28 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2402:6b00:330d:700:ba27:ebff:fe5b:de28/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 274sec preferred_lft 274sec
    inet6 fe80::ba27:ebff:fe5b:de28/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether b8:27:eb:0e:8b:7d brd ff:ff:ff:ff:ff:ff

これ以降は好きなマシンでSSH接続して設定することをおすすめします✋

ROS2インストール

いろいろセットアップ手順をまとめてるサイトはありますが、やはり公式の情報が新しいです

docs.ros.org

参考までに実際に踏んだ手順を残しておきます

インストール

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'
sudo apt update
sudo apt install ros-foxy-ros-base -y
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc

rosdepは最近公式から分離されたみたいなので、こちらもダウンロード

memoteki.net

sudo apt install python3-rosdep
sudo rosdep init
rosdep update

テストコード実行

ワークスペースを作ってテストコードをダウンロード

mkdir -p ~/ros2/src
cd ~/ros2
git clone https://github.com/ros2/examples src/examples
cd ~/ros2/src/examples/
git checkout $ROS_DISTRO

このままサンプルをビルドすると、自分のマシンではフリーズしてビルドが進まなかったので

クローンしたサンプルからrclcppを削除するか別のフォルダに避難させておく

cd ~/ros2/src/examples
rm -rf rclcpp

ビルドツール(colcon)をインストール

毎度おなじみbuild-essentialも一緒にインストールします

(インストールしないとビルドしたときにNo CMAKE_CXX_COMPILER could be found.と怒られます)

sudo apt install python3-colcon-common-extensions build-essential

依存関係を解決

rosdep install --from-paths src --ignore-src --rosdistro foxy -y --skip-keys "console_bridge fastcdr fastrtps osrf_testing_tools_cpp poco_vendor rmw_connext_cpp rosidl_typesupport_connext_c rosidl_typesupport_connext_cpp rti-connext-dds-5.3.1 tinyxml_vendor tinyxml2_vendor urdfdom urdfdom_headers"

ビルド

デフォルトだと4つ並列でビルドしようとしてフリーズするので、並列実行数を1に指定

$ cd ~/ros2
$ colcon build --symlink-install --parallel-workers 1
Starting >>> examples_rclpy_executors
Finished <<< examples_rclpy_executors [10.4s]
Starting >>> examples_rclpy_minimal_action_client
Finished <<< examples_rclpy_minimal_action_client [9.98s]
Starting >>> examples_rclpy_minimal_action_server
Finished <<< examples_rclpy_minimal_action_server [9.98s]
Starting >>> examples_rclpy_minimal_client
Finished <<< examples_rclpy_minimal_client [9.98s]
Starting >>> examples_rclpy_minimal_publisher
Finished <<< examples_rclpy_minimal_publisher [10.0s]
Starting >>> examples_rclpy_minimal_service
Finished <<< examples_rclpy_minimal_service [9.97s]
Starting >>> examples_rclpy_minimal_subscriber
Finished <<< examples_rclpy_minimal_subscriber [9.99s]

Summary: 7 packages finished [1min 13s]

そして生成されたsetup.bashを読み込み

echo "source ~/ros2/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

動作確認

複数の端末を使うのでbyobuがおすすめ

sudo apt install byobu
byobu

1つ目のターミナルでパブリッシャーを起動

ros2 run examples_rclpy_minimal_publisher publisher_member_function

2つ目でサブスクライバーを起動

ros2 run examples_rclpy_minimal_subscriber subscriber_member_function

f:id:chigrii:20200629030251p:plain

実行できました!

最後に

インストールの手順はROS1とあまり変わらない感じですね

次はROS1ROS2の共存をやっていこうかな

あとラズパイマウスも手元にあるので、これをROS2で動かしてみたい

関連ページ

How to install Ubuntu Server on your Raspberry Pi | Ubuntu

index.ros.org

qiita.com

www.rt-shop.jp

メモ

2021/04/18追記:ROS2公式ドキュメントへのリンクを修正