M5Core2を買いました!(研究費の予算だけど) 実はM5Stackシリーズを触ったことがなかったので、結構気になっていたところでした。
いや、最初っからアプリが充実してるマイコンボードがあってもいい! pic.twitter.com/gSErbEgFpS
— Ar-Ray (@Ray255Ar) 2020年11月12日
届いて思ったのは、M5Core2をROSと接続してコントローラノードにしたら面白いんじゃね?と思い、ROSを使うことにしました。そして、何を間違ったのか、「ROS2で動かしてみよう!面白そうだし」と思い、ROS2で開発することに…
ここからおよそ5日間の地獄の開発が始まるのでした…
記事を書くのは面倒だけど忘れるのは嫌なので、追記していく感じでやっていきます。
環境
次の環境で動作を確認しました。ROS2(と周辺ツール)は2020年時点ではまだまだ未熟なところもあるため、現時点でほかの環境で動くと思わないほうがいいでしょう。
【ハードウェア】
- マイコン:M5Core2(=ESP32 Arduino)
- ホストPC(?):Raspberry Pi 4 Model B(4GB RAM)+ 32GB SDカード
- Wi-Fiルータ:任意。ただし、インターネットに接続されていること
【ソフトウェア】
- 開発環境(M5Core2):Arduino IDE 1.8.13(Windows Store 1.8.42.0)
- RasPiのOS:xubuntu18.04.5 LTS(Ubuntu Server上のインストール)
- ROS:ROS2 Dashing(patch:7)
- Micro-XRC-DDS:v1.3.0 (←Dashing patch6とMicro-XRC-DDS 1.3.0の組み合わせが推奨らしいです)
準備
- Raspberry Pi4 にUbuntu Server18.04 LTSをインストールします。Raspi-imagerに掲載されているやつを使いました。Mateとかでもいいと思います。
- RaspiのUbuntuをxubuntu化します。Ubuntu mateとかlubuntuとかでもいいと思います。
- Raspberry Pi4 にROS2 Dashing(Patch7)をインストールします。Patch7は執筆時の最新バージョンです。Debianパッケージをそのままインストールしてokです。
- Micro-XRC-DDS-Agentをインストールします。サイトを参考にしてください。
- M5Core2をボードマネージャーから追加します。これは、環境設定のURL貼り付け欄にESP32のためのjson URLを貼り付けて読み込ませれば、ボードマネージャーに読み込まれるのでそれの最新版をインストールしましょう。
ROS2Arduino関連のパッケージをインストールします。ros2arduinoと検索してライブラリマネージャーから適当に最新版を持ってくればOKです。
ボードを「ESP32 Dev Module」にして適切なポートを選択すれば準備完了です!
Arduinoのスケッチ例からudpのサンプルプログラム(PublisherとSubscriber)があるため、それのSSIDとPASSWORDを適切なものにしてコンパイルします。
動きます。
今のところうまくいっていないところ(ROS2Arduino×ESP32)
ros2::Nodeは継承しないとコンパイルが通っていも使えない(?)セーブしていないので構文を間違えただけかもしれない。
ros2::Node.publishが使えない。コンパイルは通るのに動かない。不思議。そのため、周期的にPublishすることしかできないと考えている。
Micro-XRC-Agentは環境が大きく関係するみたい。Raspberry Pi4 + Dashingはいけるけど、汎用CPU+DashingやRaspberry Pi4 + Foxyの組み合わせはだめだった。(issueに伝えろと言われているので、さらに検証してみます。)
SubscriberやMicro-XRC-Agentの互換性についてはこれから検証して追記します。