概要
この記事の存在意義
micro-ROSを用いることでPCとマイコンをROS2でつなぐことができる。しかし、PCとマイコンはUSBでつなぐことが前提とされているのが現状だ。
F7で無線通信を行う場合は中継器を用いてUDP通信を行う方法があるが、micro-rosはどうやら対応していない。
一つの結論として、無線通信用にラズパイを用意してROS2を入れ、ラズパイとマイコンをmicro-rosでつなぎ、ラズパイとPCはwifi経由で通信する方法が考えららる。本記事ではそのために取り敢えずラズパイにROS2を入れるところまでを解説する。
もう一つのやり方として、ESPなどのwifiに対応したマイコンボードを使うことも考えられる。もっと言うと、制御する機構が少なければ、ラズパイのGPIOピンで事足りるので、F7を使わない選択肢もある。
大まかな手順
- ubuntuのインストール
- ssh接続をする
- ROS2のインストール
既に関連する記事がいくつかあるので、この記事で新しく説明することは多くない
動作環境・バージョン
動作環境
Ubuntu22.04 :デュアルブートした実機PC
Raspberrypi 4 model B
バージョン
ROS2 : humble
raspiのOS: Ubuntu server 22.04 (64bit) :desktopでもいいが、軽いのでこちらを選択
コンテンツ
ここからお使いのOSに合わせたRaspberry Pi Imager
をインストールしてください。
Ubuntu Server20.04.5 LTS(64-bit)
を書き込むのですが、書き込む前にパスワードなどを設定しておくことができます。
設定マークをクリックして、
各項目の設定をします。
wifiの設定も行うことができるので、ここで予め設定しておくとよいでしょう。
wifiに接続し、IPアドレスをしらべる
PCからラズパイを操作できるようにするためにwifiに接続した上でIPアドレスを把握する必要があります。モニターを使う方法が一般的ですが、モニターがない場合もあるかと思うので、ヘッドレスセットアップを行う方法も紹介します。
モニターを用いる方法
wifiの設定
ラズパイに電源とキーボードをつないで起動してください。
wifiの設定を行います、一つ前の手順でwifiの設定を済ませた場合は不要です。
以下のコマンドを実行してください。
cd /etc/netplan/
sudo nano 50-cloud-init.yaml
そして、以下の内容を追記して保存
wifis:
wlan0:
optional: true
dhcp4: true
access-points:
SSID名:
password: パスワード
SSID名とパスワードは使用するwifiに合わせて変えてください
以下のコマンドを実行して、エラーがないか確認してください
sudo netplan --debug try
sudo netplan --debug generate
問題がなければ設定を適用します。
sudo netplan --debug apply
一応再起動してください
sudo reboot
IPアドレスの取得
次にラズパイのIPアドレスを調べます
ラズパイ側でip a
を実行してwlan 0
から始まる箇所のIPアドレス(inet
から始まる)を確認して下さい。
ヘッドレスセットアップ
wifiの設定
ヘッドレスセットアップを行う場合は、一つ前の手順(OSをmicroSDに書き込む段)でwifiの設定をしておいて下さい。
さらに、microSDをPC側で開いて、root以下にssh
という空のディレクトリを作成しておいてください。
IPアドレスの取得
次にラズパイのIPアドレスを調べます
この段階ではラズパイ側を弄れないのでwifiの管理者画面から確認します。このときにラズパイがwifiに接続できているかの確認も同時にできるので、オススメの方法です。
私の使用しているTP-LinkのTL-WR841Nではtplinkwifi.netとPC側でブラウザのwebアドレス欄に入力すれば開けます
※パスワードを求められる場合もある。初期パスワードはadminらしいが、分からなければこの方法は使えない
※赤枠の箇所をクリックするとIPアドレスが見られる
何らかの理由でwifiの管理者画面を開けない場合は以下の方法を試して下さい。
先ず、ラズパイをつなぐwifiーmicroSDの書き込み時にそう設定したwifi、にPCも接続して下さい。
PC側でifconfig
をしてPCのIPアドレスを確認して下さい。
wlo1
のinet
を見て下さい。この値の前3つーこの写真なら192.168.0
、を確認して下さい。
次にラズパイが正常にwifiに接続できていることを信じて以下のコマンドを打って下さい。
echo <inetの前3区切り>.{1..255} | xargs -P256 -n1 ping -c1 -t1 | grep ttl
このコマンドは、wifiによって繋がれたネットワーク内の可能性がある全てのIPアドレスに対してpingを打って疎通確認を行い、返答があったIPアドレスをリストアップしています(通信詳しくないので解釈が間違ってるかも)。
以上のような結果が帰ってくるかと思います。これらのIPのどれかがラズパイのIPアドレスです。
この写真では192.168.0.1
、192.168.0.104
、192.168.0.151
のどれかということになります。
ssh接続する
IPアドレスが分かったら、PC側で以下のコマンドを実行してください
sudo ssh ユーザー名@IPアドレス
ssh接続できたら、PCからラズパイを操作できます
取り敢えず、sudo apt update
とsudo apt upgrade
をしておきましょう。
ROS2のインストール
ROS2公式ドキュメントに従ってインストールすればよい
トラブルシューティング
一般論
ラズパイとsshするPCは同じwifiもしくはLANにつながっている必要があります。上手くいかないときはこれを先ず確認して下さい。
個別の対策
ros2-humble-desktopのパッケージが見つからない、と言われる
終わりに
ラズパイは小規模なロボットを自主開発する場合にはお世話になることも多いかと思います。STMマイコンとROS2を連携する場合などではロボコンでも使う機会があるでしょう。
ただ、ubuntuを入れてしまうとGPIOピンを使う際に一手間必要になるみたいなので、気が向いたらそれについても調べて記事を書きたいと思います。