toio の姿勢角でモータを制御してみた
以前、toioのコンテストでもらったtoioで遊んできました。
届きました!
子供たちと遊び倒して
アイディアの実現に向けて
学びたい!#toioDo #Doコン pic.twitter.com/njYvOr0b7C— HomeMadeGarbage (@H0meMadeGarbage) April 22, 2021
ここではtoioの姿勢角でモータを制御して倒立振子ができないか確認いたしました。
目次
姿勢角検出
toioはビジュアルプログラミング toio Do で容易に楽しむことできるのですが
2021 8月現在 toio Doではまだ toioの姿勢角を利用することはできません。
toio.js
toio Do では姿勢角を楽しめないということで、toio向けNode.jsライブラリの toio.jsを試してみました。
以下を参考にtoio.jsをwin PCに導入しました。
Windowsの場合はパソコン本体のBLEは使用できないようで以下のBluetooth USBアダプタを使用しました。
toio.jsを導入しサンプルコードを楽しみました。
キーボードでtoioを動かすサンプルです。
以下を参考にtoio.jsのサンプルをWindowsで動かせた
https://t.co/C9hPz4xnjh但しPCのBluetoothは使えなくなった。
使用したBluetooth USBアダプタは以下
https://t.co/JEI3pKRKss#toio pic.twitter.com/uWgYfvfgIO— HomeMadeGarbage (@H0meMadeGarbage) July 29, 2021
続いてtoio.jsで姿勢角を楽しもうと調査したのですが、toio.jsにも姿勢角を利用する関数は用意されていないようでした。。。(間違っていたらスミマセン)
toioの傾き判定や向きを検出する関数は存在し楽しめました。
以下が非常に参考になりました。
Node-RED
toio.jpでも姿勢角が利用できないということで途方に暮れていたところ
以下のtoioをNode-REDのBLEノードで利用する記事を見つけました。
これによってtoioをBLEデバイスとして取り扱えるようになり各種BLEサービスUUIDにリクエストしたり読み込んだりして楽しむことができるようになりました。
早速、以下を参考に姿勢角の取得を実施しました。
・姿勢角検出
・姿勢角検出の設定
toioのピッチ角を取得しました。
toioのピッチ角
ちょっと遅い設定で何とかなるのかな
今度試してみましょうhttps://t.co/cnBCm4IySR#toio #nodeRED pic.twitter.com/eFtvjyro0Q— HomeMadeGarbage (@H0meMadeGarbage) August 2, 2021
倒立振子の検討
toioの姿勢角を何とか取得できるようになったので、倒立振子的なことができないか検証しました。
Node-REDのフローは以下
toioのピッチ角を取得して、ピッチ角によってモータの方向と速度を制御するようにしました。
モータ制御 functionノードの内容は以下のようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
high = msg.payload.characteristics["10b201065b3b45719508cf3efcd7bbae"][5]; K = 1; offset = 5; if(msg.payload.characteristics["10b201065b3b45719508cf3efcd7bbae"][0] == 3){ if(high < 200){ speed = (msg.payload.characteristics["10b201065b3b45719508cf3efcd7bbae"][4]).toString(16); speed = ( '00' + K * speed ).slice( -2 ); msg.payload = {"10b201025b3b45719508cf3efcd7bbae":"010101"+ speed +"0201" + speed}; }else{ speed = (offset + 255 - msg.payload.characteristics["10b201065b3b45719508cf3efcd7bbae"][4]).toString(16); speed = ( '00' + K * speed ).slice( -2 ); msg.payload = {"10b201025b3b45719508cf3efcd7bbae":"010102"+ speed +"0202" + speed}; } return msg; |
ピッチ角の正負でモータの正転・後転を切り替えて角度によって速度を変えてモータ制御命令を生成しています。
モータ制御の命令については以下を参考
https://toio.github.io/toio-spec/docs/ble_motor
動作
toioのピッチ角でモータ制御
もっと早く制御出来たら倒立振子できるのに#toio pic.twitter.com/ngkOeqWXDO— HomeMadeGarbage (@H0meMadeGarbage) August 4, 2021
動作の繰り返しループ時間は0.5sec以下にすると 正常に動作しなかったため、上の動画のようなスピード感です。
ちょっとtoioを利用した倒立振子の実現は難しそうですが。。。
大変勉強になりました。