Boundary Blur:球体型ロボットと複合現実を活用したマルチエージェントシステム

1. はじめに

現実空間に存在する球体型ロボットと仮想空間のAIエージェントが連携してタスクを遂行することを目指している。しかし、物理空間と仮想空間をシームレスに接続することは困難である。さらに、球体ロボットの動きを正確に制御し、物理ロボットと仮想AIエージェントの双方向の相互作用を実現するためには高度なAI技術が必要である。また、直感的な操作体験を提供するためのインターフェースを開発する際にも技術的な課題が存在する。

本作品では、球体型ロボット omicroと複合現実を活用したマルチエージェントシステム Boundary Blurを提案する。

2. 提案システム

2.1 設計方針

提案システムの目的は、現実空間と仮想空間のエージェントが連携してタスクを遂行することである。このために、スマートフォンやApple Watchから操作できる球体型ロボットボール「omicro」と、複合現実を活用したマルチエージェントシステム「Boundary Blur」を構築する。

2.2 システム構成

システムの利用手順は以下の通りである。

  1. 球型ロボットを設置する場所の選定を行い、床や壁が反射しやすい場合は、反射を避けるために黒のシートを床に敷く。LEDと同色の光を放つプロダクトの近くは避ける。
  2. 球型ロボットの電源を入れ、iPhoneアプリケーションとBLEで接続する。複数の球型ロボットと接続する際は、iPhoneアプリを複数接続モードに切り替える。
  3. 球型ロボットで電子コンパスのキャリブレーションを行う。このキャリブレーションはiOSアプリから実施する。
  4. iPad Proを三脚で固定し、球型ロボットがiPadのカメラの画角に入るように設置する。iPad Proの設定高さは地上から130cm前後にする。
  5. iPad ProでUnityアプリケーションを起動し、メッシュモードをオンにして床やオブジェクトをメッシュ化する。必要に応じて、移動可能エリアを指定する仮想障害物を空間に設置する。
  6. iPad Pro上で動作するUnityアプリと球体型ロボットの操作に使用しているiOSアプリをBluetoothで接続し、iOSアプリを経由して球体型ロボットの電子コンパスから取得した方位情報をUnityアプリに渡す。
  7. UnityアプリケーションでOpenCVモードをオンにし、球体型ロボットの中心点を取得する。動作環境が明るすぎたり暗すぎる場合は、OpenCVモードの2値化の色範囲を調整し、AR空間上に球型ロボットのデジタルツインを表示させる。環境光の影響で検出位置がずれるため、OpenCV検出位置の補正機能を用いて、奥行きや縦横の位置を手動で調整する。
  8. 球型ロボットをiOSやwatchOSアプリケーションで操作する。球型ロボットのデジタルツインがAR空間上で衝突した場合は、その状態をハードウェアの球型ロボットにフィードバックする。
  9. AR空間上で球体型ロボットを追尾するゲームAIを稼働させる。ゲームAIが現実空間に存在する球体型ロボットと接触すると、現実の球体型ロボットは回避行動を起こす。追尾と回避を繰り返し、結果として球体型ロボットが自動で動き続ける。

2.2.1 球型ロボット

詳細については以下をご参照ください。
omicro:自走式球体型ロボット

2.3.4 Unityアプリケーション

本システムの中核をなす「Boundary Blur」と名付けられた複合現実アプリは、Unityで開発されている。ARFoundationを用いてARKitの機能を活用し、PlaneDetection、LiDAR情報に基づく空間のMesh化、HumanStencilを用いた人間の位置取得、仮想オブジェクトの設置、そしてShaderやVFXGraphを用いた視覚効果は全てARFoundationと組み合わせて行っている。

球体型ロボットの位置取得は、OpenCVを用いて行われる。アプリケーションで取得した画像をもとに、球体型ロボットのLEDの青色を基準にして2値化し、ボール型ロボットの中心座標を取得する。取得した中心座標に対してARFoundationでRaycastを行い、ボールの奥行き情報を取得する。AR空間上の仮想座標に球型ロボットのデジタルツインを配置し、デジタルツインがAR空間内でARによって出現させた別のGameObjectと衝突した場合は、ハードウェアの球型ロボットにもフィードバックを返すようにしている。

球型ロボットの向きの取得は、このアプリケーションでは行えないので、ハードウェア側でデジタルコンパスを用いて方位を計算し、それをUnityアプリ側に返す形をとっている。

Boundary Blurは、iPad ProのLiDARやコンピュータビジョンライブラリを用いて現実空間の上にデジタルツインをリアルタイムで作成し、その上で動くゲームAIが起こした事象が現実空間に存在する球体型ロボットに反映される。また、現実に存在する球体型ロボットに仮想空間上での質量を与えており、現実のロボットが動くと、仮想空間上のゲームAIやゲームオブジェクトにも影響を与える。

omicro:球体型ロボット

1. はじめに

omicroは、スマートフォンやタブレット、Apple WatchからBluetoothで直感的に操作可能な球体型ロボットである。完全に保護された設計により、STEAM教育に適した構造を持ち、360度全方向に対応する駆動システムを搭載している。また、ハンドジェスチャーによる操作も可能であり、複数のロボットを同時に制御する機能も備えている。これにより、教育現場でのプログラミング教育やロボット工学の実習、家庭での子供たちの学習支援、研究開発におけるロボティクス研究、イベントや展示会でのインタラクティブなデモンストレーションなど、多岐にわたる応用が可能である。

Image 1 Image 2 Image 3 Image 4

2. システム構成

システムの利用手順は以下の通りである。

  1. 床に球体型ロボットを設置する。
  2. 球体型ロボットの電源を入れ、iPhoneアプリケーションとBLEで接続する。複数の球体型ロボットと接続する場合は、iPhoneアプリを複数接続モードに切り替える。
  3. 球体型ロボットで電子コンパスのキャリブレーションを行う。キャリブレーションはiOSアプリから行われる。
  4. iOSやwatchOSアプリケーションで球体型ロボットを操作する。

2.1 球体型ロボット

球体型ロボット omicroは、外側の球体とその中で動くロボットの二部分から構成されている。

外側の球体

外側の球体は、直径170mmのクリアなプラスチックBOXを使用しており、材質はスチロール樹脂である。表面には硬化ガラスコーティング剤が塗装されており、耐久性と視認性を高めている。

内部のロボット

内部のロボットは、M5Stamp S3を中心に、2つのマトリックスLED、モータードライバのSparkfun TB6612FNG、6軸センサのMPU6050、地磁気センサ GROVE三軸デジタルコンパスモジュールv1、NeoPixel Ring 16連フルカラーシリアルLEDで構成されている。フレームはレーザーカットされたアクリルを使用している。電源にはエネループ電池を6本使用し、これらは2本と4本に分けて配置されている。ロボットの最下部には重心を整えるためにパラストが配置されている。

車輪と運動機構

ロボットには合計10個の車輪があり、動力は下部の大きな2つの車輪にのみ繋がれている。ゴムタイヤと球体が直接接触するとグリップが強すぎるため、医療用のサージカルテープを使用して摩擦を調整している。その他の8つの車輪は、静止時には球体の内壁に接触していないが、走行時には内壁に触れるようになっている。これにより、「ボールの直進安定性向上」、「衝撃吸収」、「回転時の軸保持」という役割を果たしている。車輪が回転すると、内部のロボットが球体の内側の壁を駆け上がることで、ボールが前進する。ボールの方向変更は、車輪が逆方向に等速で回転することで、超信地旋回を行い、その場での回転が可能である。

2.2 球型ロボットを操作するためのiOSアプリケーション

このiOSアプリケーションは、システムのハブの役割を担っており、複数の球型ロボットomicroとwatchOSアプリ、Unityアプリの間の通信はすべてこのアプリを介して行われている。複数の球型ロボットとwatchOSアプリとの通信はCoreBluetoothを用いてBLEで行っている。

Unityアプリケーションとの接続は2つの主な用途があり、1つは球型ロボットから受け取った角度情報をUnityアプリケーションに送信するためである。もう1つはUnityアプリケーションから受け取った衝突判定のフラグを球型ロボットに送信するためである。

2.3 球型ロボットを操作するためのwatchOSアプリケーション

このアプリはiOSアプリに付随するものである。iOSアプリと同様に球型ロボットを操作するのが主な機能であり、その操作の際は必ずiOSアプリケーションを経由して、球型ロボットに指示を送る。

watchOSアプリケーションならではの機能としては、ハンドモーション機能が挙げられる。これは、パフォーマンスを行う球型ロボット操縦者の手の動きをApple Watchのジャイロセンサと加速度センサで読み取り、それに応じて球型ロボットを操縦する機能である。手を素早く下げた場合には機能がオフになり、素早く水平に上げた場合は機能がオンになる。手を水平状態から20°上げると、球体型ロボットが直進し、手を水平に上げたまま手のひらを左右に捻ると球体型ロボットが左右に回転する。

watchOS上のCoreMLを用いて手の動きを機械学習し、複雑なハンドモーションで操作する機能も実装されている。手の動きのログをCoreMLのActivity Classificationでトレーニングさせ、センシングだけより複雑な手の動きのパターンを読み取れるようにしている。