Morikatron Engineer Blog

モリカトロン開発者ブログ

toio コア キューブの多台数制御にチャレンジ

こんにちは!

モリカトロン株式会社チーフエンジニアの松原です。今日はウロチョロスでtoio コア キューブをできるだけたくさん制御してみよう、という我々のチャレンジを紹介いたします。

内容的には前回↓の続きとなっております。

ウロチョロス = toioの公開技術仕様 + Unity - Morikatron Engineer Blog

ウロチョロス、toio、toio コア キューブ、Unityによるtoioシミュレータなどの説明は前回記事に詳しいので、先にそちらをお読みください。

 

今回の目次です。

 

キューブ4台で遊ぶウロチョロス

弊社のスマートフォンアプリ「toioであそぼう!ウロチョロス」 https://morikatron.com/urochoros/ では、toio コア キューブ(キューブ)を最大4台同時に接続して遊びます。弊社AI研所長の森川がウロチョロスを考案したとき、「たくさん」のキューブが「生き物の群れ」として動き回るようなイメージを提示しました。

「たくさん」の台数が多ければ多いほど「生物の群れ」としての表現が多彩になります。森川のイメージを受けた我々エンジニアは、問題なく接続制御できる台数をまずは確認してみようと考え、ウロチョロスの全体設計&Bluetooth通信周り担当の本間 id:morika-homma が手を動かすことになりました。

ところが、スマートフォンをセントラルとしたBluetoothの通信接続はものすごくデリケートで、通信の待ち時間やタイミングがいろいろとシビアで、iOS(テストに使った機種はApple iPhone 6 Plus)とandroid(同じくSONY XPERIA 1)とで接続にかかる時間、接続できる台数が安定するちょうど良いセッティングを決めるのに、とても手間がかかりました。

ウロチョロスには「安定性」が必要です。スマホとロボットの組み合わせなので、普通のスマホアプリよりもずっと不確定要素が多いです。「いざ実演!」のタイミングでトラブったりしたら、ものすごくカッコ悪いですよね。そういうわけで「安定性」を重視したセッティングを追求した結果、8台=無理、7台=心配、6台=まずまず、5台=ほぼ安心、4台=超安心といった感触が得られたので、ウロチョロスは4台で動かすことに決定しました。

 そうして無事お披露が終わり、その際はいろいろなメディアでとりあげていただきまして、まことにありがとうございました。

game.watch.impress.co.jp

キューブの単品販売開始! 

先月(2020年3月)、ソニー・インタラクティブエンタテインメントから、キューブならびにキューブ専用充電器の単体販売が決定、とのうれしいニュースが出ておりました。

本日(2020/4/23)発売で、キューブ1個が4,480円ですと。

ウロチョロスはキューブ1台から動くように作ってはおりますが、そもそもは4台で遊ぶ設計になっておりますので、できれば4台で遊んで欲しかった。これまで我々が購入できた「toio本体セット」は[2個のキューブ+toio コンソール+2個のtoio リング]という構成でしたので、キューブ4台で遊ぼうとすると、toio本体セットを2セット購入する必要があったわけです。それが、こうしてキューブ単体で販売してもらえるようになると、2台以上で遊びたいときのハードルがぐっと下がって嬉しい限り。ありがたやー。

しかしそうなってくると、ウロチョロスに4台と言わず、もっとたくさんのキューブを接続して遊んでみたくなるのが、人情ってもんじゃありませんか。

もっといっぱい接続できるはず

toioが採用しているBLE(Bluetooth Low Energy)は、リンクアドレス長が(旧Bluetoothの8bitから)32bitに拡張されているため、事実上無制限のペリフェラルを接続できる仕様です。したがって、現実の接続可能台数は、BLEを実装しているハード・ソフトの仕様によって制限されることになります。つまり「実際に何台同時接続できるか」は「その機械で試してみないとわからない」のです。ふーむ。

ウロチョロスのようにスマートフォンを使う場合は、その機種ごとに接続可能台数が違うと考えた方が良いし、場合によってはOSのバージョンによっても違ってくる可能性があります。

というわけで

よし、何台接続できるか、やってみよう!

手持ちのiOS機で同時に何台のキューブまで接続できるかを実験した結果、iPhone 6 Plusで最大13台、iPad第7世代で最大10台でした。やはり機種によって台数が違うようです。しかもこれ、接続を試すたびにエラーを起こして、接続できる台数が安定しません。

この当時どんなふうだったのかを思い出そうとチャットワークを検索したら、担当の本間から私への連絡があったので、ここに貼ってしまいます。

f:id:TechMorikatron:20200410174202p:plain

接続エラーの解析

うむ。なかなか大変そう。「うまくいかない」当時の空気を思い出して、なんか(今でもすこし)ソワソワします。で、いろいろ試してなんとか12台くらい安定的に接続できるよう調整して(結局どのように調整したかは、いずれ本間が書いてくれるかもしれません)から鬼ごっこを実行すると、今度はキューブがポロリとマットの端っこから転落したり、ガクガクしたぎこちない動きになる、といった現象が現れました。これも本間からの解析連絡をそのまま貼りましょう。

f:id:TechMorikatron:20200410175304p:plain

ぎこちない件の調査結果

プロファイラでの解析結果から「落ちたりガクガクするのはパケットロスとかじゃなくCPUが過負荷では?」との推測から「計算負荷を下げてみた」実験でこれを確認。完璧です。で、その結論はというと

iPhone 11 Pro欲しい

iPhone 11 Pro欲しい

iPhone 11 Pro欲しい

う、うむ。ロジックは正しい。私もiPhone 11 Proで何台のキューブがスムーズに鬼ごっこできるのか、知りたい。ぜひ知りたい。買おう。

iPhone11 Pro買ってきた 

というわけで弊社の三宅 id:morika-miyake が、AppleStore 新宿まで走って行って、iPhone 11 Pro Maxを買ってきてくれました。そしてそのiPhone 11でトライしたところ、無事に12台の鬼ごっこが、スムーズに動くようになりました。

キューブ12台で鬼ごっこ

その様子をごらんください。

 

「ぼんやりと見守っていたい」方は無編集版のこちらをどうぞ 。

 

 

 

前回記事で紹介したUnity上でのtoioシミュレータで12台の鬼ごっこを動かしてみると、こんな感じになります。

モーターやギアなどの物理的な可動部品がありませんので、現実のキューブよりもスムーズに動作しているようです。

 

まとめ
  • ウロチョロスの鬼ごっこを12台のキューブでやってみました
  • スマホ(やOS)によって同時接続可能な台数が変わりました
  • 接続制御の調整がちょっといろいろめんどくさかったです
  • キューブの脱輪やカクツキはCPU負荷によるものとわかったので、お金のちから(最新スマホの購入)で解決しました*1

キューブのような小さなロボットをプログラミングして動かすのは、本当に楽しいですね。12台でワチャーッと鬼ごっこをしているキューブを見ると、まるで本物の生き物のように思えてきます。

モリカトロンでは、引き続きtoioを使った遊びの開発にチャレンジしていく所存です。次なる発表をお楽しみにー!

 

 

 

*1:ウロチョロスでCPU負荷が高いのは、ロボット群の制御アルゴリズムで猛烈な計算を行っているからです。参考:https://tech.morikatron.ai/entry/2020/04/03/100000 このような高負荷計算をしない場合は低スペックスマホでも問題なく多台数制御が可能です。