こんにちは!
モリカトロン株式会社チーフエンジニアの松原です。今日はソニー・インタラクティブエンタテインメント(以下SIE)のロボットトイ「toio(トイオ)」と、その公開済み技術仕様を参考に弊社が開発したスマホアプリ「ウロチョロス」を紹介します。ウロチョロスはゲームエンジンのUnityで作っており、スマホ+Bluetoothでtoio コア キューブ(ロボット)と通信を行ったり、キューブをシミュレータ上で動かす仕組みなども開発しました。やはり、仮想世界でのシミュレーションは、ロボット制御知能の開発効率向上に、劇的な効果をもたらします。
というわけで、この記事の対象読者はtoio、Unity、スマホ+Bluetooth、ロボット制御、ロボットシミュレータなどに興味がある方であります。
toioとは
みなさん、SIEのロボットトイ「toio(トイオ)」をご存知でしょうか。小さくて可愛らしいキューブ型ロボットを使った、まったく新しい「あそびのプラットフォーム」です。toioの紹介は公式サイト https://toio.io/ にありますが、とりあえずこのたった17秒の公式ビデオ(ふたりのプレイヤーがふたつのキューブとインタラクションしながら遊ぶ様子)を見れば「あ、そういうことか」と、toioのコンセプトを直感的に理解できると思いますので、再生してみてください。
toioの本体セットはhttps://toio.io/platform/にあるようにキューブ(toio コア キューブ)というロボット2台を中心として、toio コンソール、toio リング(コントローラー)2個で構成されています。通常はこれにtoio専用タイトルという専用カートリッジ入りのパッケージを組み合わせてあそびます。
詳しい構成は https://toio.io/platform/
簡単に言うと、コンソールがBluetoothのセントラル(ホスト)となり、ペリフェラル(スレーブ)のキューブと通信することで、リアルタイムにキューブを制御する仕組み、ですね。
toioとプログラミング
toioは元来プログラミングと相性良く作られております。たとえば「GoGo ロボットプログラミング ~ロジーボのひみつ~」https://toio.io/titles/gogorobot.html というtoio専用タイトルを使えば、ロボットプログラミングの基礎(考え方)をステップバイステップに学習することができます(対象推奨年齢: 6才以上)。
また、Scratch(ビジュアルプログラミング言語)を使ってPCから直接キューブを制御したり https://toio.io/programming/ も可能です。
さらには、GitHubで公開されているtoio.js https://github.com/toio/toio.js を使うと、JavaScriptでキューブの制御も可能となっております。腕に覚えのあるかたは挑戦されてはいかがでしょう。面白いですよ。
toioであそぼう!ウロチョロス
さて、我々モリカトロンでは昨年(2019年)、このキューブに「命」を吹き込むスマートフォンアプリ「toioであそぼう!ウロチョロス」 https://morikatron.com/urochoros/ をリリースいたしました。
ウロチョロスでは、toioコンソールのかわりにスマートフォンがBluetoothのセントラルとなって、スマホからキューブを直接制御して動かしています。「え?そんなことできるの?」と思われた方、はい、できるんです。これを実現するには、スマホアプリがキューブとの通信仕様を熟知しておく必要があるのですが、SIEはなんと、技術仕様を一般公開してくれています(上記GitHubのリポジトリの中にもあります)。
toio™コア キューブ 技術仕様
このページの「ハードウェア仕様」にはキューブのハードウェアに関するスペックが詳しく書かれており、「通信仕様」にはBluetoothを使ってキューブと通信するための方法が詳しく書かれています。
我々はこのキューブの通信仕様にしたがって「キューブに生き物らしい振る舞いをさせる」プログラムを書きました。それがウロチョロスというわけです。
ウロチョロスはUnityで
さて、スマホアプリのウロチョロスは、といいますと、スクラッチでもJavaScriptでもなく、Unityというゲームエンジンで作っております。Unityの良いところは(ほぼ)同じソースコードでiOSとandroidの両プラットフォーム用のバイナリ(実行プログラム)を生成できるところです。
ウロチョロス開発中のUnity Editorは次のような感じになっていて、これは普通のUnityアプリとまったく同じ。シーンやグラフィックデータ、C#のスクリプトなどを組み合わせて作っています。
普通のUnityアプリの場合、エディタのプレイボタンをクリックすることで、開発中のPC上で即座にアプリを実行して、その実行結果を確かめることができます。しかしウロチョロスの場合は制御する相手がゲーム内のものではなく現実世界のキューブなので、PC上で実行して即座に動作確認するとか、ソースコードにブレイクポイントを設置して動的に変数を確認しながらデバッグ、といった作業が不可能です。これは開発効率がたいへん悪い。[ソース修正→スマホアプリビルド→スマホアプリ起動→デバッグ]とやっていたのでは、細かい調整に時間がかかってしょうがない。そこで我々(というか開発メンバーの銭 id:morika-sen )は、Unityの仮想空間にキューブとプレイマットを設置して、キューブの動作をシミュレーションするという、めちゃくちゃ便利な仕組みを開発しました。えらいです。
ウロチョロスには「鬼ごっこ」という遊びがあって、これをシミュレータで実行すると次のようになります。
現実のキューブで鬼ごっこをやると次のように。
シミュレータでも、現実のキューブとほぼ同じ動きを実現しているのがわかると思います。これ、実はけっこうすごいことなのです。
通常、ゲームの中のオブジェクトには、物体の速度を即座に反映することができます。が、リアルロボットを扱う場合にはパケット送受信やメカ駆動にともなって各種のラグ(時間差)が発生します。このラグのせいでロボットの制御にはいろいろな難しさが出てきます。
toioシミュレータでは「ふたつの車輪で駆動制御する」というtoio独自の物理特性(真横に動けない!)のほかに、こういったラグの発生までを含めた総合的なシミュレーションを実現しており、ソフトウェア開発の質と速度の向上に大きく寄与してくれました。
ウロチョロスの「鬼ごっこ」には、かなり複雑なアルゴリズムが使われていて、その内容を詳しく解説した銭のブログがこちらになります。ロボットやロボット群の誘導制御に興味があるかたはぜひご一読ください。
まとめ
SIEのtoioとその公開技術仕様、ウロチョロスにおけるtoioシミュレータの実現、といった内容をお届けいたしました。
なお、ウロチョロスではキューブの同時接続台数は4台まで、となっておりますが、我々はもっと多台数のキューブが制御できるはずと考えておりまして、いろいろと試作を繰り返しております。
また、Unityによるtoioアプリの作成方法やtoioシミュレータについても引き続き企画・開発を行っており、近々、いろいろな成果をお知らせできると思います。toioファン、ロボットファン、リアル物体の制御プログラムに興味のあるのみなさま、どうぞお楽しみに!