先日windows11にros2をインストールしましたが(方法はこちら)、別なPC同士での通信を確かめたいと思い、RaspberryPi 3 にもROS2のインストールを試みました。
このブログはその覚書になります。
使用したもの | スペック、型番 |
---|---|
ラズパイ | Raspberry Pi 3 Model B+ |
デスクトップPC | Windows 11 |
micro SD カード | 32GB |
ラズパイ3にUbuntu 20.04 LTS をインストールする
【公式 Raspberry Pi ソフトウェア】
【たかけんテックラボ ラズパイ3にUbuntu 20.04LTSをインストール】
micro SDカードをPCにセット
ラズパイで使用する用のmicro SDカードです。最終的にこのmicro SDカードをラズパイにセットすることでラズパイをUbuntuにします。
ラズパイの公式ページから、Raspberry Pi Imager をダウンロードし実行
「Download for Windows」からDL。
OSは「Ubuntu Server 20.04.5 LTS (64-bit)」を選択。
その他の汎用OS>Ubunntu>Ubuntu Server 20.04.5 LTS (64-bit)
バージョンによっては、Ubuntu Server にするか、Ubuntu Desktop にするかの選択肢があるが、20.04は Ubuntu Server のみ。Serverだと、コンソール画面しか出ないモードになる。
しかし、Server を Desktop にすることもできるとのことです。
【AGIRobots Raspberry PiでUbuntu Desktop 20.04 LTSを使う方法!】
SDカードを選択しWRITEボタンを押せばSDカード完成。
wifiの設定
【@__otk3__ [備忘録] Raspberry Pi に ROS2 環境をセットアップ】
【ITCブログ [Ubuntu 20.04.3 LTS]ターミナルでwifiを設定する方法 netplan “aliases are not supported”エラーへの対処法】
ラズパイにmicro SDをセットして起動
Ubuntu 20.04 がコンソール画面で立ち上がるので、デフォルトとなっているユーザー名ubuntuで入る。パスワードもubuntu。すぐに新しいパスワードを作るように求められるのでそのようにする。
[code]
ubuntu login: ubuntu
pass: ubuntu
[/code]
タイムゾーンの設定
[code]
timedatectl set-timezone Asia/Tokyo
[/code]
50-cloud-init.yaml の編集
フォルダへ移動しviで設定ファイルを開く。
[code]
cd /etc/netplan/
sudo vi 50-cloud-init.yaml
[/code]
下記を追加。インデントの位置も決まっているので正確に。SSIDとpasswordの表記には、ダブルクォーテーションでくくることが必要。
# This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: eth0: dhcp4: true optional: true version: 2 #以下を追加 wifis: wlan0: optional: true access-points: "自分のSSID": password: "SSIDのパスワード" dhcp4: true
変更を適用
[code]
sudo netplan apply
[/code]
ip address の確認
[code]
ip addr
[/code]
inet 192.168.x.x などの記述が表示されればOK(xには何らかの数字が入ります)。それがラズパイに割り当てられたIPアドレス。
ROS2のインストール
【@__otk3__ [備忘録] Raspberry Pi に ROS2 環境をセットアップ】
windows のコマンドプロンプトからラズパイにsshで入る
windows からsshでラズパイに入って操作した方が、コマンドのコピペができるので便利。
[code]
ssh ubuntu@192.168.x.x
[/code]
パスワードを聞かれるので設定したように入れる。
apt のupdate
[code]
sudo apt update
sudo apt upgrade -y
[/code]
けっこう時間がかかった。
ROS2 Foxyのインストール
【公式 ROS2のUbuntuへのインストール】
【@porizou1 ubuntu20.04LTSへのROS2 Foxyのインストール】
APTリポジトリの追加
[code]
sudo apt install curl gnupg2 lsb-release
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/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
[/code]
ここからが本命のROS2インストール。1時間以上はかかったと思う(寝てしまった)。
[code]
sudo apt update
sudo apt install ros-foxy-desktop
[/code]
ROS2の設定
ros2アクティベーションを.bashrcに登録
[code]
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
[/code]
今後、新しくプロンプトを起動したら、source ~/.bashrc でros2をアクティベートする。
colcon build インストール
[code]
sudo apt install python3-colcon-common-extensions
sudo apt install python3-argcomplete
[/code]
ROS2の動作確認
ワークスペース作成
ここまで、windows のコマンドプロンプトからsshでubuntuを操作している想定。
引き続き、sshから。
[code]
mkdir -p ~/ros2_ws/src
cd ros2_ws/
colcon build
[/code]
talker を起動
[code]
ros2 run demo_nodes_cpp talker
[/code]
以下が出力される。ラズパイから’Hello World’がPublishされ続けている状態。
[code]
[INFO] [1680471091.826547577] [talker]: Publishing: ‘Hello World: 1’
[INFO] [1680471092.826403252] [talker]: Publishing: ‘Hello World: 2’
[INFO] [1680471093.826426319] [talker]: Publishing: ‘Hello World: 3’
…
[/code]
windows で新しいコマンドプロントを立ち上げてsshでログインし、listener を起動。
[code]
ssh ubuntu@192.168.0.55
pass:
cd ros2_ws/
source ~/.bashrc
ros2 run demo_nodes_cpp listener
[/code]
以下が表示されれば成功。Publish を受け取れている。
[code]
[INFO] [1680471707.841521917] [listener]: I heard: [Hello World: 200]
[INFO] [1680471708.825494278] [listener]: I heard: [Hello World: 201]
[INFO] [1680471709.825473455] [listener]: I heard: [Hello World: 202]
…
[/code]
これは、同じラズパイ内で通信がうまくいっているということ。
次は、同じLAN内の別なPC、ここではsshを使っているwindows 自身のros2でlistener を起動してみる。
[code]
cd \dev_ws
call C:\opt\ros\foxy\x64\local_setup.bat
call install/setup.bat
C:\dev_ws>ros2 run demo_nodes_cpp listener
[INFO] [1680472635.192187200] [listener]: I heard: [Hello World: 534]
[INFO] [1680472636.192074900] [listener]: I heard: [Hello World: 535]
[INFO] [1680472637.195170200] [listener]: I heard: [Hello World: 536]
[INFO] [1680472638.192080500] [listener]: I heard: [Hello World: 537]
…
[/code]
これもできました。すごい。IPアドレスの設定とかしていないのに通信できています。ROS2は、ROSのように全体を統括するroscoreのようなものがないのにです。
逆向き(windowsがtalker でラズパイがlistener)でも動くことも確認しました。
コメントを残す