M5StackやM5StickCを使って、面白いことをするコーナー「M5Stackカフェ」。 第7回は小型ロボットBugCをもう1台のM5StickCでコントロールします。

4本足の小型ロボットBugC

BugCはM5StickCで制御する小型ロボットです。4本の足がついていて、前進・後退、その場で回転など、とても機敏に動きます。 このBugCをもう1台のM5StickCを使ってコントロールしてみました。

BugC

BugCが動く仕組み

BugCが動く仕組みはとてもユニークです。 BugCには上の写真のように4つの小さなモーターが少し外側に向けてついていて、モーターの軸が床などの面に斜めに接しています。 モーターはM5StickCで制御して回転させますが、どちらにも回すことができます。 モーターを図のような向きに回転させたとき、この足は画面の手前から奥に向かって移動します。

bugcmotor

4つのモーターを次の図のように回すことで、前進します。

BugCの前進

BugCのプログラミング

BugCはM5StickCを接続し、I2Cで制御します。プログラムはArduino、UI Flow、どちらでも可能です。 サンプルプログラムが次のサイトに公開されています。

https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Hat/BugC

またArduinoのサンプルプログラムはArduino IDEの「ファイル」メニューの「スケッチ例」→「M5StickC」→「Hat」→「BUGC」にもあります。 ライブラリマネージャでM5StickCライブラリの0.2.0以上をインストールするとスケッチ例に現れます。

スケッチ例の選択

Arduinoのサンプルプログラムは、M5StickCのAボタンを押すと後退し、Bボタンを押すと止まるという簡単なものです。 UI Flowのサンプルプログラムは2台のM5StickCを使い、1台でBugCを制御し、もう1台にジョイスティックをつけてコントローラーにして、BugCをリモート制御するものです。

まっすぐ進まない

Arduinoのサンプルプログラムを参考に、UI FlowでAボタンを押すと前進し、Bボタンを押すと止まるプログラムを作りました。

前進

動かしてみると、BugCは左前の方にカーブして進んでしまいました。プログラムとしては4つのモーターを同じ速度で回転させていますが、重さのバランスなどで床に伝わる推進力が同じにならず、直進しないのだと思います。4つのモーターの速度をいろいろと調整しましたが、まっすぐに前進・後退させることはできませんでした。

その場での回転は、右回転も左回転もほぼ同じ場所でうまく回転しました。

スマホでコントロールする

まっすぐ進まないのはBugCの個性だと諦めて、BugCを別のデバイスでコントロールしてみます。UI Flowのメニューを見ると「リモコン」というブロックがあります。スマホの画面にボタンやスイッチなどを表示して、M5StickCやM5Stackを制御できるブロックです。これを使って、次のようなプログラムを作りました。

リモート

UI Flowのプログラムを作る画面の右側に薄くQRコードのアイコンが表示されていて、それをクリックするとQRコードが表示されます。このQRコードをスマホで読んでページを表示すると、次のようにプログラムで設定したボタンが並んだページが表示されます。

スマホ画面

スマホの「前進」ボタンをタップすると、BugCが勢いよく動き出しました。「停止」ボタンを押しましたが、1秒ぐらい遅れて止まります。「リモート」はスマホとM5StickCがクラウドを経由して通信するので、1秒程度の遅延はしかたないのでしょうが、BugCはとても機敏に動くので、この反応の悪さはいただけません。

もう1台のM5StickCでコントロールする

Githubに公開されているUI FlowのサンプルプログラムはBugCに接続したM5StickCをもう1台のM5StickCでコントロールしています。2台のM5StickCは「EspNow」という方法で通信しているので、これを試してみます。

サンプルプログラムではジョイスティックHatを使っているのですが、手元にジョイスティックHatがなかったので、その代わりにM5StickCを傾けて、傾きを加速度センサで検知してBugCをコントロールしました。

コントローラ側のプログラムは次のようになりました。

コントローラ側

M5StickCを前後に傾けるとy軸の加速度値が-1.0から+1.0まで変化します。-0.5以下になったら「前進(Forward)」メッセージを、+0.5以上になったら「後退(Back)」メッセージを送ります。左右に傾けるとx軸の加速度値が変化するので、-0.5以下になったら「右回転(Right)」を、+0.5以上になったら「左回転(Left)」を送るようにしました。

BugC側のプログラムは次のようになりました。

BugC側

EspNowで送られたメッセージに応じて、BugCを動かしています。

通信方法の詳細は省きますが、EspNowはWi-Fiパケットを直接使って非常に高速な通信ができ、このような小型ロボットの制御などには適しています。

M5StickCを傾けてBugCをコントロールしている様子は次の動画をご覧ください。

話が長くなってきたので、今回はこのくらいにします。

マスターの一言

動くものには個性を感じますし、しばらく付き合っていると愛着も湧きます。しかしまっすぐ進んでくれないなぁ。