
micro:bit Create AI でモーションゲームを作る
11月にmicro:bit Create AIなるものが公開されました。

これはmicro:bitを簡易なエッジ機械学習デバイスにしてしまうというプロジェクトで、micro:bitさえあればWeb上のガイダンスに従っていくだけで完結してしまいます。
今のところmicro:bitの加速度センサーのみ対応していますが、micro:bitを装着した体やモノの動きを特定する目的に使えます。
例えば手首に取り付けて、腕を使ったジェスチャーを識別させたり、スポーツのフォームの判定に使うなど応用が考えられます。

原理的には3軸の加速度の変化を閾値で判別するのと同じですが、複雑な動きになると、データを集め適切な閾値を設定すること自体が困難になってきます。機械学習であれば数回の学習をさせるだけで自動的に閾値を設定してくれるので、小学生でも使うことができます。
使い方はサヌキテックネットさんのサイトが詳しいので、そちらを参考にするとよろしいです。

私は「micro:bitで体を動かすゲーム」をテーマに活動していますので、このCreateAIをScratchのゲームにつなげてみたいと思います。
まずは機能の確認のため、腕の動きで画面上のパーカッションを鳴らすという簡単なゲームを作りました。
まずは右手首につけたmicro:bitに腕の動きを学習させます。つぎの5種類をやってみました。
「中立」腕を真っ直ぐ前に伸ばして静止した状態です。
「左から右」中立から、右腕を水平に、体と平行になるまで開きます。
「右から左」中立から、右腕を水平に、左腕につくまで回します。
「下から上」中立から、右腕を垂直になるように上方に回します。
「上から下」中立から、右腕を垂直になるように下方に回します。
カメラを使う機械学習もそうですが、何も変化がないニュートラルの状態、ここでの「中立」も学習させておかないと判定が安定しません。

サンプリングが成功したら、次の画面で学習結果を確認します。

右下の「Edit in MakeCode」をクリックすると、いつものMakeCodeの画面に入ります。通常と違うのは左のメニューに「Machine Lrearning」の項目が追加されていることです。

micro:bitを動かして、先ほど学習させて名前をつけた動き(Action)が発生した時、その名前のMakdCodeイベントが発生します。
このイベントをトリガーとして、LEDや音などのmicro:bitの機能を使っていくことになります。
つぎに、micro:bitをゲームコントローラーとしてPCにリンクさせます。
一番有名なのはScratch linkですが、残念ながらScratch linkとCreate AIは共存できません。
ここで便利なのがmicro:bitのblehid拡張機能です。これをmicro:bitに入れておくと、PCからmicro:bitがBluetoothキーボードやマウスに見えるというものです。

幸い、これはCreateAIと共存できますので、CreateAIのActionで発生したイベントをキーボードイベントとしてPC上のアプリに渡すことができます。

ゲームは簡単にScratchで作りました。PCのBluetooth設定画面でmicro:bitがBluetoothデバイスとして見えていますので、あらかじめ接続しておきます。
blehidが発生するキーボードのイベントを、Scratch側でもキーボードイベントとして拾えば、micro:bitの動きによってスプライトを動作させることができるわけです。

手軽に機械学習を体験できるCreateAIは、まだまだ可能性がありそうです。体だけでなく、モノの動きのパターンを学習させるなど面白いことができそうです。
以上