※この記事はDevicePlus.com(英語版)のこの記事を日本語訳したものです。
IoT Tech Expo North America 2016ハッカソン(InvenSenseが主催)は、「物理、ポップカルチャー、コーディング」と「大量の最尖端センサーハードウェアシステム」との融合でした。舞台は、世界的な人気を誇る「ポケモンGO」。目的は、現実世界のジェスチャーでボールを投げてポケモンを捕まえることです。競技者は、現実世界のジェスチャーやデータを取り込む手段として、InvenSenseから提供された新たなSensorStudioスターターキットを使いました。
現実世界から取り込んだジェスチャーは、何らかの処理やプログラミングによって、ボールを投げる操作へと変換しなければなりません。Nianticが今年の7月6日にサービスを開始したポケモンGOは、一般大衆を対象とした初の拡張現実(AR)ゲームです。プレイヤーは、画面をフリックしてポケモンに向けてボールを投げます。ボールのスピードを変えたりスピンをかけたり力を加えたり、さまざまな技を駆使してポケモンを捕まえるというゲームです。しかしIoT Tech Expo North America 2016ハッカソンの競技者は、画面をフリックするのではなく、現実世界での自分好みのジェスチャーでモンスターを捕まえることになりました。
競技者には下の3つの課題が与えられました。
- 現実世界でのジェスチャーをSensorStudioスターターキットで取り込むこと。審査員でありプレゼンターでもあるThomas Muguet氏(InvenSenseのシニアソフトウェアエンジニア)がここで示したルールは2つです。1つは、意図しないランダムなモーションを間違って取り込んではならないこと。もう1つは、意図したジェスチャーを取りこぼしてはならないことです。
- 提供されたシステムとソフトウェアコンポーネント(現在はWindows版のみ)とを使って、取り込んだジェスチャーを変換すること。
- ポケモンGOの世界で「ボールを投げる」操作ができること(ボールのスピン、スピード、ポケモンに当てるボールの力がコントロールできなければならない)。
競技者は、凝った方法でもシンプルな方法でも何でも好きな方法で上記3つの課題をすべてクリアすることが求められました。また、審査員でありInvenSenseのシニアソフトウェアエンジニアであるHelene Wiazemsky氏の説明によれば、スペシャルなスピンやジャンプ、ジェスチャーを取り込むなどした場合は、最終成績にエキストラポイントが加算されるとのことでした。
今回のハッカソンは、IoTを対象としたいわゆる「コードスプリント(プログラミングの短距離レース)」です。競技者は、与えられた48時間という時間を使って、自身の持つプロセッシングスキルと数学的スキルとをCortex M4プロセッサーに投じました。競技者たちは、1人または複数人でチームを組んで課題に取り組みました。競技者たちの経歴もさまざまで、学生もいれば、IoTの専門家、ホビーストもいたし、IoT分野への転職を考えている人もいました。審査員は、InvenSenseのフランスオフィスに所属する4人の開発者です。InvenSenseの新製品「SensorStudioスターターキット」の可能性を見きわめることが目的でした。
課題の達成度、創造性、手法の3つを基準に、4名がファイナリストに選ばれ、うち優勝者1名には、Traxx製のドローン(2軸ジンバル、「フィルム」「スポーツ」「エキスパート」モード、空撮アシスト機能あり、399ドル相当)が授与され、残り3名には、モンスターボール型バッテリー充電器、ピカチュウ型バッテリー充電器など、ポケモンGOをテーマにした賞品が授与されました。
ポケモンGOの新たな投法
IoT Tech Expo North America 2016ハッカソンの課題は、流行を追いかけたものであると同時に、驚くほどやっかいなものでした。InvenSenseから提供されたデバイスを現実世界で動かして、その動きをポケモンGOの世界(拡張現実の世界)における「投げる」という動作に変換しなければなりません。要するに、仮想世界にいるポケモンを現実世界の動作で捕まえようということです。
現実世界でのジェスチャーを、「投げる」動作として取り込まなければなりません。しかも、意図しないちょっとした動きが「投げる」動作として解釈されてはなりません。また、実際のポケモンGOでは、ポケモンを捕まえる手段として、ボールにスピンをかけたり、ボールをひねったり、ボールに力を加えたりしますが、今回のハッカソンでも、そうした操作を是非実現してみるよう競技者に指示が出ていました。
今回のテーマは、決して珍しいものではなく、拡張現実の分野で今年初めて耳にするというものでもありません。というのも、今年の夏の初めにポケモンGOが世界的に大ヒットしたからです。現実世界の動きを仮想的な拡張現実の世界に描き出すことが、拡張現実を利用したゲームやツールの最尖端トレンドとして次のステップになることでしょう。そこでは、IoTプログラムとIoTデバイスとが使われるはずです。初めてハッカソンへ出場したMichael Aquino氏は、物理問題として今回の課題に取り組みました ―― 「ポケモンGOをテーマにするとは、クールな課題ですね。しかしこの課題を解くためには、古典物理学者にならなければならないと思います。今、加速度と重力について考えています」
「投げる」動作が検知できる多用途センサー
InvenSense製のSensorStudioスターターキットは、「Nucleo F411RE」「キャリアボード」「センサードーターボード」「ICM-20690ドーターボード」の4つのコンポーネントから成ります。InvenSenseのWebサイトで「センサーのインターネット」のための「センサー開発プラットフォーム」であると宣伝されているSensorStudioには、磁気センサー、湿度センサー、近接センサー、ジャイロスコープ、加速度計(直線加速度計)という5種類のセンサーが含まれています。センサーはすべて、データ信号およびアルゴリズム信号の記録と再生が可能ですので、開発と試験とを繰り返す作業には最適です。開発言語はC/C++です。センサードライバーの作成、データフュージョンの実行には、拡張APIを使います。
このシステムのハードウェアの目的は、GenericSensorHubに搭載されたMPUをプログラミングすることによってセンサー出力を簡単に視覚化できるようにすることです。一方、ソフトウェアの目的は、取り込んだデータを開発者自身のアルゴリズムを通じて簡単に視覚化できるようにすることです。今回のハッカソンでは、スピン、ツイスト、その他特殊な操作など、「投げる」動作を視覚化することが目的です。SensorStudioスターターキットの目的は開発期間の短縮にあります。同キットには5種類のセンサーが含まれていて、ハッカソンの競技者はそのうち好きなだけ使うことができました(多くても少なくてもよい)。しかしほとんどの競技者は、手を拡げすぎずに、最も応用の利きそうな加速度計、ジャイロスコープ、近接センサーなど、2~3種類に絞っていました。このハードウェアは、今のところWindows版のプログラムでしか動きません。
IoTをプロフェッショナルから学生の手へ
競技者の1人であるMadhavi Chodankar氏は、今回の課題をシンプルな言葉で表現してくれました ―― 「SensorStudioという形で提供された統合開発環境を使い、さまざまなビジュアルエイドツールを駆使して目的のプログラムを作成すること」
フリーランスのIoTコンサルタントであり、母親でもあり、青少年向けロボット教室のインストラクターでもあるChodankar氏は、今回の課題をデータマイニングの分析にまで突き詰めて、こう述べました ―― 「今回の課題は、目的を達成する手段として複数のセンサーをどう組み合わせるのかを考えることであり、そうして選んだ各センサーから得た値をデータマイニングの手法で掘り起こすことです。競技者はみな考えることが違いますから、みな、別々のセンサーで課題をクリアしようとしています」
最終プロジェクトを発表する際、Chodankar氏は自分の用いた手法をいくつかの手順に分けて説明しました。まず近接センサーを入力として使って、GenericSensorHubが手に持たれているのかどうかを判断します。次にジャイロスコープを入力として使い、GenericSensorHubの角度または回転運動を検出し、仮想世界で「投げる」モンスターボールの回転またはスピンに変換します。最後に、現実世界での動きまたはスピードを加速度計で捉えます。加速度計から得られたデータを使って、「投げられた」モンスターボールの力と軌道とを計算するという手順です。
Chodankar氏がGenericSensorHubの機能を十分に理解していたことは、氏が見事3位になったことで十分すぎるほど裏づけられました。
他の競技者たちも自分なりの方法で課題に取り組みました。そのうちの1人がMichael Aquino氏です。氏はつい先頃、コーディングブートキャンプを修了し、先生のすすめで今回のハッカソンに参加しました ―― 「ブートキャンプではチームを組んでいましたが、今回は1人で参加しました。それでよかったのかどうかはわかりません」
Aquino氏は、フロントエンドコーディングツール「CodePen」を使って、自分の新たなスキルの腕試しとして今回の課題に取り組みました ―― 「コーディングが主な作業になると思っていましたが、IoTはハードウェアもからむわけですから、とんだ勘違いでした」。Aquino氏は今回のハッカソンでチームメイトを見つけました。それが、IoTの仕事を始めたばかりという、機械工学科の卒業生、Brooke Nichols氏です。Aquino氏と同じようにNichols氏も、センサーを使った最尖端ハードウェアメーカーであるInvenSenseの新製品で遊んでみたくてハッカソンに参加しました。
2人は残念ながらプロジェクトの最終レビューで発表ができませんでした。Nichols氏は「検出部分で行き詰まってしまって」と落胆していました。しかし有意義な時間が過ごせたことは確かであり、InvenSenseから提供されたハードウェアとソフトウェアを堪能することはできました。2人とも、SensorStudioスターターキットには興奮したといい、今回の課題のどこが一番気に入っているかと尋ねられると、ちゅうちょなく、視覚化であると答えました ―― 「センサーのデータが本当に短時間で視覚化できるんです。ただ、入出力の設定方法を知らなければなりませんので、身につけるには多少時間がかかります。でも、本当に面白かった」
ポケモンGOへのドアを開く
競技者が違えば取り組み方も違いますし、利用するセンサーも違います。プロジェクトの発表をしなかった競技者も複数いました。センサーからうまくデータが取り出せず、GenericSensorHubの動きを安定して記録することができなかった競技者もいました。遅刻した競技者もいました。中には、競技に参加するというよりも、学習体験としてハッカソンに参加したという人もいました。
最後の最後に参加した競技者の1人は、だれとも違う方法でセンサーを使っていました。それがMorte氏です。氏は、投げる動作や傾きなど、空間での動きを入力として取り込むのではなく、いくつかのセンサーを組み合わせて、人の呼吸をデータとして取り込んだのです。氏以外の全員が、空間での物理的な動きをデータとして取り込んでいたのとはまったく対照的でした。結果、Morte氏はその創造性が高く評価されて第4位となりました。ただし、どれほど創造性に富んでいようと、優勝は1人だけです。
優勝は、若き開発者であり学生でもあるFenil Parekh氏でした。Parekh氏は、IoTに夢中だといい、ハックして理解すべき小さな問題やメカニズムで満たされた世界を生きています。
「モバイルデバイスとかを見ると、どうしてもそのしくみが知りたくなるんです」。Parekh氏は、少し笑いながらこう付け加えました ―― 「中身を見て、オペレーティングシステムとか、そのしくみをとにかく解き明かしたいんです」
最終プレゼンテーションの前に優勝の確率を尋ねたところ、Parekh氏は躊躇することなく、「もちろん100%です。絶対優勝します。自信があります」と答えました。
優勝したParekh氏のプロジェクトは、審査員から示された3つの課題すべてを明快な方法でクリアしていました。彼は自分のプロジェクトをごく単純な3つのパートで表現しました。それは、曲線、距離、回転の3つです。加速度計、ジャイロスコープ、直線加速度計という3つのセンサーからリアルタイムにデータを取り込んで、仮想空間におけるボールの軌道(曲線のこと)、ボールの距離、ボールの回転という3つを別々に出力するという方法です。
Parekh氏の行った最終プレゼンテーションでは、直線加速度計で検出された強さどおりにモンスターボールが仮想空間を移動するなど、安定した動作を見せていました。ファイナリストのChodankar氏と同じようにParekh氏も、仮想空間におけるモンスターボールのスピンデータだけを抜き出す手段としてジャイロスコープからの入力を使っていました。これで、審査員の定めた要件はすべて満たしたわけですが、Parekh氏はそれ以上のことをやってのけました。
Parekh氏は、最初の3つの課題とは別に、GenericSensorHubを左右にひねる動作でポケモンGOのアプリケーション自体をオン、オフする認識システムも設計しました(彼は、ポケモンGOのドアを「開く/閉める」と言っていました)。「最初の目標は達成してしまったので、ポケモンGOをオン、オフする機能を追加してボーナスポイントを獲得しようとしたんです。ポケモンGOが題材だったので、『開け、ドア/閉まれ、ドア』というプログラムを作りました。ポケモンGOがしたくなったら、ただドアを開けばいいだけです」
最終審査にあたって審査員たちは、Parekh氏が最初の3つの要件をすべて満たしていることを確認しました。その3つとは、1)センサーからの入力データを取り込むこと、2)取り込んだデータを変換すること、3)ポケモンGOの仮想世界で「投げる」動作を作り出すこと、です。それ以外も追加機能があれば、なお良しというルールでした。Parekh氏は、SensorStudiosスターターキットのハードウェア部分(すなわちGenericSensorHub)を使って、上の写真に示したように手首をひねるという第4のモーションを取り込む機能を追加しました。手首をひねる動作で、ポケモンGOのアプリケーション自体をオン、オフするという機能です。手首をひねってポケモンGOを終了する動作が、モンスターボールを投げる動作として誤認識されないことを、Parekh氏は実演しました。手首をひねれば、モンスターボールを投げる動作はまたちゃんと復活しました。「開け、ドア/閉まれ、ドア」機能が優勝の決め手であったことは間違いありません。
競技者たちが各自のプロジェクトを披露しあったあと、審査員が最終決定をし、賞が授与されました。だれが勝とうと負けようと、参加した競技者はみな、ここへ来たことの目的を達成しました。それは、学ぶということです。
さぁ、学ぼう、そしてハックしよう!