LoginSignup
14
4

More than 3 years have passed since last update.

MATLABからtoioを動かしてみた

Last updated at Posted at 2020-02-01

はじめに

toioのフリー走行モードで遊んでいたのだけども、速度を変えてみると想像以上にしっかり微調整できた。BLEで繋げばtoioを操作できるとのことだったので、制御ガチ勢ご愛用のMATLABで動かしてみた。

この記事のターゲット

  • MATLABからBLEを使ってみたい人
  • toioをMATLABで動かしたい人

つかったもの

  • MATLAB R2019b(R2019b以降からble関数がつかえるっぽい)
  • toio cube v02.0003
  • BLEが使える環境のPC(僕はMacbook Air 2018をつかった)

一番驚いたのが、MATLABに何か別途Toolboxを入れなくてもBLEにつなげるところ。やるなぁ〜

MATLABとtoioをつなげる

まずは、つなげる先のtoioを見つけてみる。

blelist
blelist  %BLEデバイス探す

多分こんなリストが出てくる。toio Core Cubeって書いてあるところのAddressをメモする。
また、複数のtoio Core Cubeがでてきたら、(自分がおそらくもっているであろう)RSSIがゼロに近いtoioのAddressをメモする。
(もくもく会などではご注意を。。。)

スクリーンショット 2020-02-01 13.31.41.png

次にtoioとつなげてみよう。toioとMATLABをつなげる際にはble関数を用いる。
たったワンコマンドでつなげるのはホントすごい。

ble
% 引数にメモしたアドレスを入れる。
b = ble("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");

ここからtoioに対して様々な操作を行うことができる。これから行う作業の前に
toioの技術仕様を読んでみよう。
https://toio.github.io/toio-spec/docs/ble_communication_overview

"キューブの機能を利用"にあるService UUIDをメモする。
そのあと、自分がやりたい操作をCharacteristicsから選んで様々な操作をしていくが、ここではモータを動かしてみる。リンク先のページにあるCharacteristic UUIDをメモする。
それぞれのUUIDを、bleで出力したオブジェクトのbからcharacteristicメソッドを呼び出す。引数には先程のSerice UUIDとCharacteristic UUIDを順に指定する。

スクリーンショット 2020-02-01 13.51.54.png

スクリーンショット 2020-02-01 13.55.45.png

toioSetting
c = b.characteristic(...
    "10B20100-5B3B-4571-9508-CF3EFCD7BBAE",...
    "10B20102-5B3B-4571-9508-CF3EFCD7BBAE");

このあとにオブジェクトのcからwriteメソッドを呼び出せば、モータに対して様々な操作を行える。writeメソッドに与える情報はデータ位置の0から順に書いた設定パラメータと
プロパティである。詳細は下記ページを参照すること。
https://toio.github.io/toio-spec/docs/ble_motor

例として、toio cubeがクルクル回りだすコマンドの例を示す。
今回は操作を一方的に指定したかったため、'withoutresponce'を追加した。

toioTurn
% 例: 出力0x64で回転する
c.write([1,1,1,100,2,2,100],'withoutresponse');

P_20200201_142402_vHDR_On.jpg
すっごいまわるよ!

操作が終わったら、clear関数で作ったオブジェクトを削除する。
これで toioとの通信も自動的に解除される。

clear
clear

MATLABへtoioの情報をおくる

情報の読み取りも基本的にはwriteとやることは同じ。
何も考えずに、ble関数でオブジェクトを作っておく。

read準備
blelist
% 引数にメモしたアドレスを入れる。
b = ble("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");

そして、Service UUIDとCharacteristic UUIDを設定する。
今回はお試しでモーションセンサを使ってみる。

toioSetting
c = b.characteristic(...
    "10B20100-5B3B-4571-9508-CF3EFCD7BBAE",...
    "10B20106-5B3B-4571-9508-CF3EFCD7BBAE");

その後、セミコロンなしで何も考えずにreadを呼び出す。
すると現在のtoioの姿勢などに関する情報が出力される。

read
c.read()

P_20200201_144538_vHDR_On.jpg

出力結果は以下サイトに示されたデータ位置に該当する情報となる。
(toioのバージョンが古いと3つしか値が出てこないかも。)
https://toio.github.io/toio-spec/docs/ble_sensor

おわりに

  • MATLABからtoioをBLEを介して操作した。
  • toioの情報をMATLABへ送信した。
14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4