年末に行われた「大晦日ハッカソン」というイベントに参加(といっても、各自が自宅で参加)した際、toio を使って作った作品の話です。
内容は以下のとおりです。最終的には、ロボットトイの「toio」と、toio用の専用マット、そして LEGO を組み合わせて作っています。
これは 108回、鳴らせてしまいそうな予感。#toio #大晦日ハッカソン pic.twitter.com/h3MIEif68g
— you (@youtoy) December 31, 2020
この作品は、以下のプロトペディアというサイトにも作品情報を登録しています。
●toio で 鐘を 108回つく【 #大晦日ハッカソン 】 | ProtoPedia
https://protopedia.net/prototype/2117
開発した経緯と最初のステップ
当初は全く違うことをやろうかと、ぼんやりと考えていたのですが、ふと思いついて作りました。
思いついてみてから、最初は家の中にあるグッズで、単純な動きをするものを試しました。
本日の今までの流れと全く違う話になったけど、#toio と LEGO を使って、鐘をつけるかどうかテスト。
— you (@youtoy) December 31, 2020
とりあえずやってみた段階。
#大晦日ハッカソン pic.twitter.com/7um0h6uHLE
ブロックを使ったビジュアルプログラミングで、たった 2個のブロックを使っただけです。
とりあえずサクッと試すために、 #toio のビジュアルプログラミング環境で、ブロック 2つだけでパラメータを少し変えてみてテスト。
— you (@youtoy) December 31, 2020
#大晦日ハッカソン pic.twitter.com/HJBJInUN1J
その後、回転動作も試してみました。
#toio を前進させるのではなく、回転させてみたバージョン。
— you (@youtoy) December 31, 2020
#大晦日ハッカソン https://t.co/qooGBfJrKO pic.twitter.com/29jGuMGiEU
こちらも、ブロック 2つで構成されたプログラムです。
#toio を動かすブロックは、今回も2個(逆回転のやつがさらに2個あるけれど)。
— you (@youtoy) December 31, 2020
#大晦日ハッカソン pic.twitter.com/kDAEIZNOLT
2台・複数回に増やしてみる
この後、2台を使う形で、単発でなく複数回動かすことをやってみました。
この時点では適当に手動で位置決めをして置いた toio を、「タイヤの速度+稼働時間」を決めた処理で動かしていました。そうすると、複数回の動きで 2回目以降に空振りをすることが・・・。
#toio を2台体制にしてみたバージョン。専用マットを使ってみようか。
— you (@youtoy) December 31, 2020
#大晦日ハッカソン pic.twitter.com/BgJN1TTHX6
ちなみに、このようなプログラムを作っていました。
#toio を2台体制で動かした時のプログラム。
— you (@youtoy) December 31, 2020
#大晦日ハッカソン pic.twitter.com/PxAJWUbXKj
その後、toio につけた LEGO のほうも、少し変えてみました。
#toio を使った #大晦日ハッカソン 。
— you (@youtoy) December 31, 2020
LEGO は付け方を気をつけないと、回転動作をさせた時、追加で取り付けたものの重みで余分な動きをしてしまうw pic.twitter.com/RVWwMnzCaI
ここで生じた問題
上記のツイートにも書いていますが、toio の上につけた LEGO が、長かったり先のほうが重かったりすると、何もつけていない時と比べて回転動作をさせた時に位置のズレが生じていました。
これは、長くのびた LEGO(+その先についた LEGO)がある程度の重みがあるため、toio を回転させた時にその LEGO の部分に遠心力で引っ張られるような感じになることが原因のようでした。また、toio の本体の向きに対して前・横のどちらにつけるかにもよるのですが、LEGO の重みで toio 本体が傾いて、タイヤが少し浮いた状態になることもあるようでした。
問題の対処
タイヤが浮いたようになる状態は、toio の前方(ロゴがある方向)と直角に LEGO をのばすようにすれば、今回は大きな問題がおこるほど傾くことはなさそうでした。
一方で、回転動作をさせた時にズレが生じる問題は、「単純なタイヤの速度指定+動作時間指定」を用いている限りは、(特に複数回の動作を続けると)解決するのが難しい状態になっていきました。こちらは、ズレが生じても定位置に戻ることができれば良い話なので、toio の専用マットを利用することにしました。
最終版
最終的には、以下の動きをさせられるようになりました。
これは 108回、鳴らせてしまいそうな予感。#toio #大晦日ハッカソン pic.twitter.com/h3MIEif68g
— you (@youtoy) December 31, 2020
プログラムは以下のようになっています。
2つの toio の動作1回ずつのセットを 59回(合計で 108回)となるように組んでいます。
作ったプログラム。#toio #大晦日ハッカソン pic.twitter.com/q5qfpamCNV
— you (@youtoy) December 31, 2020
そして、1回鐘をつく動作をするごとに、初期位置に戻るプログラムを入れています。これにより、ズレがない場合は移動は起こらず(処理が無視されたような状態になる)、ズレが生じていた場合は鐘つきの動作をする前にうまく鐘がつける初期位置に動く、という挙動をするようになっています。
まとめ
今回、鐘を 108回つく、というのはできました。
しかし、本当は鐘をつく動作のトリガーを別デバイスを使う形にしてみたり(M5StickC を 1回動かすと、toio が鐘を 1回つく、というような遠隔での鐘つきのようなもの等)、見た目の部分で「鐘・toio につけた LEGO・専用マットの上」の見た目をそれっぽく変えるようなことをできれば、とも思う部分がありました。
このあたりは、別件もあって時間切れのため、上記の内容で公開ということにしました。
また、見た目や動き的に餅つきに見立てて、ということもできたら、と思ってみたり・・・。