ししかわです。
社員研修の一環で、マイクロマウスキット「Pi:Co Classic3」を使ってマイクロマウスの大会に出場します。
全日本大会に向けて鋭意開発中ですが、今回メインとなる機能の「斜め走行」は実装量や試行錯誤が多く、まとまった進捗がまだありません。
代わりに今後行う予定の「自作マウス研修」について、隙間時間で書き溜めた記事を投下します。
自作マウス研修ではオリジナルのマウスを基板から設計して作り、公式大会での完走を目指します。
手始めに自作マウスのコンセプトを考えてみました。
コンセプト
私はWeb屋さんからロボット屋さんに転職した身として
「私と同じようなスキルセットの人にもロボットに興味を持ってもらい、ロボット分野に参入してほしい」と考えています。
そこでWeb屋のためのマイクロマウス – Web技術者にも簡単に触れて、学習できるマウス – を自作マウスのコンセプトにしたいと思います。
たとえば次のような特徴を持ちます。
- Webのスキルセットを持つ人がプログラムを理解して開発できる
- リアルタイム制が求められる制御と、迷路探索やその他の便利機能のレイヤーを分けて、
後者はスクリプト言語(Python、JavaScriptなど)でも書けるようにする
- リアルタイム制が求められる制御と、迷路探索やその他の便利機能のレイヤーを分けて、
- ネットワーク通信ができる(WiFiまたはBLE)
- Webブラウザ経由でマウスとやり取りができる
- オドメトリや迷路の経路などのログをリアルタイムに送受信できる
- ただし、競技中は無線通信禁止なので、競技外用途限定
- UIにこだわれる
- 分かりやすいUIが作れる(作った本人じゃなくても迷いなく操作できる)
- 従来のマウスに無かった豊富なインタフェース(ディスプレイや音声)を備える
できれば下記も実現したいです。
- 組み立てやすく、壊れにくい or 壊れても簡単に直せる
- 外部モジュール接続で入出力を拡張できる
逆に、重視しないことは…
- 速くなくていい(最低限、競技の制限時間内に5回完走できればいい)
設計・実装方針
上記のコンセプトを考慮した結果、マイコンとしてM5Stackを使うことにします。
次のようなメリットがあります。
- ESP32を搭載しているため、WiFiとBLEによるネットワーク通信ができる○
- C++(ESP-IDF)、Python、JavaScript等言語の選択肢が多い○
- 液晶ディスプレイとスピーカーを使ったUIを構築できる○
- 外部モジュールを接続して機能を拡張できる○
- 既にM5Stackを持っているWebエンジニアがたくさんいるので、興味を持ってもらえそう◎
- (私が)使い慣れている◎
研修では、マイクロマウスの回路のうち「壁センサ」と「モータードライバ・エンコーダ」部分を、「M5Stackの拡張モジュール」として実装します。
課題
M5Stackを使うことで次のような課題があります。
- M5Stackから出ているピンの数が足りるか?M5Stackで自由に使えるピンの数は、実はそれほど多くない。
- IOエクスパンダを検討する
- 場合によってはモジュール側にもマイコンを搭載して、I2Cで通信するなど考えられるが、リアルタイム制が犠牲になりそう
- M5Stackの電源管理でのトラブルをたまに目にするが大丈夫か?
- M5Stackを使うことによる機械的な制約(サイズや重心の偏りなど)は許容できるか?
これらは回路や筐体設計をする上で解決策を検討していきます。
参考
マイクロマウスの回路の構成は先輩方の作例を参考にします。
- まえけんさんのHM-Starterキット(通称ハムちゃん)
- shotaさんのESP32マウス
また、車輪型ロボットはM5Stack公式や国内ユーザが多数製作されていますので参考にします。
- 公式から発売されている製品
- M5Bala:倒立振子
- M5 Lidar bot:Lidarとメカナムホイールを搭載したローバー
- BeetleC:M5StickCで動作する小型カー
- 国内ユーザの作例
なお、M5Stack界隈のちょっとしたネタとして、
「国内ユーザが拡張モジュールを作ると、その直後に公式から同じコンセプトの製品が出る」という、
通称「速すぎた公式」の事象が複数報告されています。が、この研修ではキニシナイことにします!
「マイクロマウス競技向け」のコンセプトが被る可能性は低いですし、被ったとしても自分で作ることに意味があるからです。
以上です。
自作編の記事を先行で書いてしまいましたが、まずはPi:Coを使って全日本大会で完走しないとキット編を修了できません。
今年の大会が終わるまではPi:Coの実装に注力したいと思います。