【M5swarm】群ロボットの作品をM5Stack Contest 2021に応募しました!

お久しぶりです。

先日、M5Stack Japan Creativity Contest 2021に作品を応募しました! protopedia.net

youtu.be

概要

M5stackが群ロボット(Swarm Robotics)への応用可能性を秘めていることを示すために、移動するための足回りモジュールの作成と、いくつかの応用例により表現した作品です。足回り基板の製作を主眼に開発しており、群ロボットの作例はちょっとだけ。

f:id:ume-boshi:20210909013555p:plain:w400
M5swarmのとても雑な宣伝画像


作品背景

群ロボット学習用環境を身近にしたい

群ロボットに実際に取り組む人はほぼ見ませんが、皆さん群ロボットには強力な魅力を感じるのではないでしょうか?ベイマックスの「マイクロボット」といい、ヤッターマンの「ビックリドッキリメカ」といい、単体では微力なロボットが個々に判断して動き、群れることによって偉大な目的を達成できている様は感動しますよね。

そんな群ロボットですが、従来は勉強・応用開発してみたいけれど、なかなか手を出せるものではありませんでした。その理由に、普段の開発環境とプラットフォーム(マイコン等)が異なるため新しく製品を大量購入する必要があることや、学習コストがかかること、ネットに開発向けの情報が少ないなどの問題があると考えられます。研究者向けの群ロボットを購入した場合、ネットに情報が少なく、位置推定や情報共有、個体認識などの群ロボット特有の機能を改善する難しさはもちろん、製品のバグに頭を悩ませられること間違いなしでしょう。 最近では、toioという良い感じの製品がありますが、新しく買うのは少し勿体ないように思えますし、群ロボット以外への応用先が少ないです(とはいっても、何度も物欲に負けそうになりましたが…)。

したがって、幾人かがすでに複数個所持しており、ネットに情報が溢れているマイコンを群ロボットに拡張できれば、Makerにとって身近な開発分野に1歩近づくと予想されます。つまり、日本のMaker内で大流行しているM5stackで群ロボットができれば、やりやすさがグンと高まると考えたわけです。日本では「M5stackが増殖する」という伝説もありますから、群にするためにわざわざ新しいマイコンを購入する必要も少なそうです。その上、M5stackが持つ液晶ディスプレイはARmarkerによる位置推定機能、WiFiBluetoothなどの無線機能が個体間の情報共有、5cm x 5cmの小型性は複数個所持でかさばらない特性が与えられるでしょう。群ロボット学習には良いとこずくめです。

今回はそのM5stackの拡張可能性を世に広めるために、M5stackを群ロボット化するための拡張基板を作成し、応用可能性を示すための作品をつくった次第です。

個人的な学習意欲

過去に記事にしたことがあるように、群ロボット向けの動作はM5stackが無くても自作基板で実現できそうでした。 ume-boshi.hatenablog.jp

しかし、ここ3年くらい改善し続けている自作基板は、M5stackをリスペクトして進めてきたものだったので、M5stackへの互換性もあると面白いかなと思っていました。リスペクトしつつも自作できると意地を張っており、M5stackを購入したのはここ最近ですが...

別の意欲として、今まで自作基板に使用したことがあるマイコンが「Nucleo F446」、「LPC1114・1768」、「ESP系」のみでした。mbed開発環境はオンラインの鯖落ちでトラウマがあるので、Arduino IDE(オフライン)で開発できるESP系のマイコンは気に入っているのですが、マイコンの価格が500円します。高くはありませんが、バカバカと買い足せるほど安価でもないので、より安価なArduino IDEで開発できるマイコンを求めていました。

また、個人開発で基板の量産をしてみたいなと思った次第です。将来的に、自分の開発物をどこかで売れたらうれしいなと考えており、量産に掛かるコストなどを知っておきたいなと考えていました。

つまり ↓ のことを成し遂げたいということです。

  • M5stackとの互換基板の動作確認をすること
  • M5stackに慣れ親しむこと
  • ATMEGA328P AUを使った基板設計(自作Arduinoボード)に挑戦すること
  • 量産の苦しみを味わいたかった


作品について

要件

本作品が動作するために必要な要件と、その実現のための機能は下記があると考えています。

  1. 電源的にM5stackが安全 → 別マイコンによる制御とモータ部の電源分離
  2. M5stackの小型性の保持 → 5cm角の基板サイズ
  3. 安価 → ATMEGA328P-AUなどの安価な部品を採用
  4. 誰でも足回り基板の処理を変更しやすい → ATMEGA328P-AUArduinoボード化
  5. M5stackから制御できる → SPI通信による移動命令の受付
  6. 位置推定が容易 → LCDにARマーカを表示 + カメラによる位置推定
  7. 遠隔から制御可能 → HTTP通信で移動命令を受け付け可能

これらの機能については、投稿予定の記事で詳説するつもりです。具体的には1・2・3項目:「回路編」、4項目:「Arduinoボード化編(ATMEGA328P AU)」、5項目:「ソフト編 ~足回り~」、6・7項目:「ソフト編 ~応用~」に分けて紹介したいと考えています。

システム構成

作品を実現するために、画像のようなシステムを構成しました。要素としてはM5swarmとPCだけですね。M5swarmの行動の管理は、全て遠隔のPCで行う中央処理型のシステムになっています。M5swarmは、PCからのHTTP通信で命令を受信し、それに従って移動をするわけですね。群ロボットをするためには、各ロボット同士の位置関係を知る必要がありますが、それはロボットの上側からwebカメラで撮影することで実現しています。

f:id:ume-boshi:20210909012832p:plain
システム構成

M5swarm単体は、3つの階層で構成されています。1番上はM5stackで、真ん中がM5stackと自作基板の互換基板、最下部がモータを4つ動作させられる足回り関連の基板です。足回り基板はATMEGA328P-AUを用いたボードとなっています。M5stackと足回り基板のやり取りはSPI通信でします。電源分離の関係上、3.7VのLiPoバッテリーが2つ接続されます。

f:id:ume-boshi:20210909013739j:plain:w400
基板そのものはM5stackを含めた3枚です

動作例

基板実装をメインにしていたため、動作例はこだわれていません。ソフト的に実装してみたのは下記の機能のみです...

  1. 1つの個体をBlynkでラジコン的に動作
  2. HTTP命令を基に複数個を同時に移動
  3. 個体位置の認識 + 目的地への移動

たったこれだけの機能ですが、複数の個体を同時に動作させられ、目的地を決めて移動できると言えます。つまり少しコードを追加するだけでも、隊列移動をすることぐらいは容易に実現できそうです。


↓ もう一回、動画のリンクを貼っておきます。動画はキリスト教の神様が7日間で世界を創生したのと同様に、私も万物の創造主になったつもりで7日間のストーリーにより構成しました。1日ごとに作品の様子や機能、応用を紹介していく感じですね。 youtu.be 2時間半以内に作り上げるというタイムリミットがあったので、いつも使っているVideoPadというソフトで雑な感じの動画を作成しました。


おわりに

M5swarmの発想自体は、昨年2020年のコンテストの時点でありましたが、忙しすぎて実現できていませんでした...
イデアはずっと気に入っていたのですが、M5stackとの連携面は隠しながら開発・記事化を進めており、いつしか「じゃじゃ~ん!」と見せられる時期を楽しみにしていました。そして、ようやくコンテストを介して皆様に真相を明らかにできました! SNSでもいくつか反応をいただけて、とても嬉しく思っています :)

さて、本作品ですが、学業面で学会準備に時間を割く必要があり、プログラミングにほとんど時間を割けませんでした。とはいえ、何とかさぼりつつ供養させた次第です。実は私は、M5stackを1つしか所持しておらず、研究室から3つも借りていました。研究室から物資で協力してもらったにもかかわらず、動きがかなりぎこちない低クオリティな作品であることに、頭が上がらないです。(そもそもモータを4つオムニホイール風に配置するのは、結構な加工精度 + モータの選定が重要となり、個人開発クオリティでは限界かも...)

それでは、引き続きよろしくお願いします!

備忘録

本作品で達成できなかった点も、今後の発展のために一応記録しておきます。

  • 移動能力の向上(加工精度 + フィードバック制御
  • 位置取得手法とその特徴を検証
  • 各ロボット同士の位置関係をカメラを使用せずに取得
  • Haptic Swarm Robot的な挙動
  • 赤外線による近距離通信(分散的な群ロボット制御)