でばいすの山小屋

デバイスとかクラウドを実験中。IoTのふもとあたりをうろうろ。

toio を スマホからいじってみる ~ 自動で移動編 ~

toio をプログラミングなしで、スマホからいじってみます。
toio については、公式ページを参照してください。
toio

前回は、LEDを点滅させました。
yamagoya.hatenablog.jp 今回は、スマホから toio コア キューブ に コマンドを送り、目標位置に自動的に移動させます。スマホとの接続などについては、前回の記事を参照してください。
『スイッチサイエンス「toio」取り扱い開始記念~「toio」ではじめよう、おうちでロボット開発キャンペーン~』で、いただいた専用マットを使用します。 ちなみに、この専用マットは、後日、スイッチサイエンスさんで販売されるとのことです。

参考:
『「toio」ではじめよう、おうちでロボット開発キャンペーン』と『開発者向けマット(仮称)』について

専用マット

f:id:blgkns:20200621004327p:plain:w320
今回は、お手軽に机上で実験できるこのマット(簡易プレイマット)を使います。 さて、このマットですが、この上に、toio コア キューブ をのせると、位置や向きなどがわかるらしい。
f:id:blgkns:20200621004333p:plain:w320
拡大してみると、意味ありげな細かい点がならんでいます。これをカメラでみて、位置や向きがわかるようです。すごい!

toio コア キューブ の バージョン

toio コア キューブのバージョンが古いと簡易プレイマットを認識できません。この記事では、バージョン02.0003 で動作確認しています。アップデートについては、下記、公式ページを参照してください。
toio システムソフトウェア アップデートのご案内

移動コマンドを送ってみる

コア キューブ に移動するようにコマンドを送ってみます。コア キューブは、タイヤ/モーターを2つ持っていて、移動や向きを変えることができます。また、カメラで、自分がいる座標や向きを認識し、目標地点まで移動できます。 移動に関する情報については、下記にあります。
モーター(toio™コア キューブ 技術仕様)
これを参考に、簡易プレイマットの中央(X:250 Y:250)に移動するコマンドを送ってみます。
nRF Connect アプリで、コア キューブに接続し、「Services」画面を表示させます。
f:id:blgkns:20200621004337p:plain:w320
Characteristic「10B20102-5B3B-4571-9508-CF3EFCD7BBAE」の「↑」(Writeボタン)を選択します。
送るデータは下記のようにします。
※技術仕様ページの「目標指定付きモーター制御」をベースにしています。

データ位置 タイプ 内容 データ
0 UInt8 制御の種類 0x03(目標指定付きモーター制御)
1 UInt8 制御識別値 0x00
2 UInt8 タイムアウト時間 0x05(5 秒)
3 UInt8 移動タイプ 0x00(回転しながら移動)
4 UInt8 モーターの最大速度指示値 0x1e(30)
5 UInt8 モーターの速度変化タイプ 0x00(速度一定)
6 UInt8 Reserved 0x00
7 UInt16 目標地点の X 座標値 0x00fa(250)
9 UInt16 目標地点の Y 座標値 0x00fa(250)
11 UInt16 目標地点でのキューブの角度 Θ 0x005a(90 度)

f:id:blgkns:20200621004345p:plain:w320
データ部分を、16進数のまま「030005001e0000fa00fa005a00」と、アプリに入力し、Writeボタンを押して、送信します。
※UInt16の場合、下位バイトから入力します。
すると、簡易プレイマット上のどこからでも、中央に移動し、同じ方向を向くように回転し、停止します。
このようなコマンドを順番に送れば、簡易プレイマット上を自由に走らせられそうです。さて、なに作ろうかな。

公式のビジュアルプログラミング(ベータ版)も手軽でいいですし、ガチで、スマホアプリ作ってみるのも楽しそうです。