Raspberry Pi 3 Model BにUbuntu20.04とROS2をインストール
仕事でよくUbuntuに触っているのですが、20.04とROS2をまだ触ったことがなかったので
手持ちのラズパイにインストールして簡単に触ってみたいと思います
目次
参考ページ
手順
Raspberry Pi Imagerをダウンロード
公式から落としてきます
Ubuntu 20.04 LTSイメージをインストール
ダウンロードしたImagerを起動
「CHOOSE OS」をクリックし、「Ubuntu」をクリック
64bit版の「Ubuntu 20.04 LTS」を選択
「CHOOSE SD CARD」をクリック、名前を確認して書き込み先のSDカードを選択
これで準備完了。「WRITE」をクリックして書き込みます。まあまあ時間がかかるので気長に待ちましょう
書き込み完了!
ラズパイ初期セットアップ
忙しい人のために初期設定とROS2のインストール&サンプルのビルドをやってくれるスクリプトを作成しました
ぜひクローンして使ってください(ホスト名の変更は手動でお願いします、、、)
以下マニュアル設定
デフォルトではラズパイのキーボード設定がUSレイアウトになっているので注意
(ネットワーク設定するまでの我慢、、、)
以下参考まで
なんとも無機質な画面で起動
ログインユーザー、パスワードともにデフォルトのubuntu
でログイン
$ 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インストール
いろいろセットアップ手順をまとめてるサイトはありますが、やはり公式の情報が新しいです
参考までに実際に踏んだ手順を残しておきます
インストール
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
は最近公式から分離されたみたいなので、こちらもダウンロード
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
実行できました!
最後に
インストールの手順はROS1
とあまり変わらない感じですね
次はROS1
とROS2
の共存をやっていこうかな
あとラズパイマウスも手元にあるので、これをROS2
で動かしてみたい
関連ページ
How to install Ubuntu Server on your Raspberry Pi | Ubuntu
メモ
2021/04/18追記:ROS2公式ドキュメントへのリンクを修正