🥽

コンパスが無いVision Proで [北] を示す: [Vision Pro x iPhone] で実現する [位置ナビゲーション]

に公開

[Vision Pro] と [位置情報の制約]

Vision Proでは、[緯度/経度と方角]といった位置情報を元にしたナビゲーションができません。これは、Vision Proに、[GPS]や[地磁気コンパス(磁気センサー)]機能がハードウェア上に搭載されてなく、それらの情報を取得できないためです。

しかし、 [現実世界に仮想情報を重ね合わせできる][360度、全周囲に情報を重ね合わせできる] という、 空間ナビゲーション が持つポテンシャルを、ユーザーが今以上に享受するためには、位置情報の活用は、必須になってくるでしょう。

例えば、Vision Proを装着したユーザーが、現在立っている位置を中心として、目指す店舗やランドマークはどの場所に存在しているのか、方角や距離を直感的に意識できるナビゲーションです。

今でも、スマホの地図アプリなどを使えば、方角を確認して意識する事は可能です。それでも、現実世界上に、 [東西南北] を示す印がいつでも見えているのとでは、感じ方は違うでしょう。それはまるで、いつでも昼間でも見える [北極星] のように。

Vision Proが[緯度/経度と方角]の位置情報を、取得する事はできるのか

改めて、Vision Proは、[緯度/経度と方角]の位置情報を取得する手段がありません。センサーなどのハードウェアが実装されていないためです。
ですが、位置情報を元にした空間ナビゲーションは実現したい。
そのためにはどうしたら良いか、幸い、私達は[緯度/経度と方角]の位置情報を取得できるデバイスを手元に持っています。そう、それはiPhoneを始めとしたスマホです。

iPhoneと連携できるのか

Vision Proが持っていない機能なら、iPhoneが補えば良いのではないか、そもそもお互いに連携できるのか。
連携できれば、iPhone側で取得した位置情報をVision Pro側に提供し、MR空間に反映できるようになります。

Vision Proで体験できる空間コンパスアプリ [LLD Compass]

上記の可能性を探るため、Vision ProとiPhoneを連携し、MR空間で[方角]を再現する空間コンパスアプリ、 [LLD Compass] を作成しました。'LLD'は、'Latitude', 'Longitude', 'Direction' の略です。

この記事では、[LLD Compass]がどのようにして実現されているのか、技術的な仕組みや工夫、活用の可能性について、ご紹介します。

LLD Compass - アプリ概要と活用シーン

Vision ProとiPhoneを連携することで、MR空間上に[東西南北]を示す、これが、[LLD Compass]の基本的な発想です。

  • 赤いスフィアが[北]を示す

どんな体験ができるのか

例えば、Vision Proを装着して立っているその場所から、[この方向に東京タワーがある]、[羽田空港はこの方向]、[東京から見てパリはこの方向]といった情報を、空間上に直感的に表示することができます。
スマホの地図アプリでも似たことは可能ですが、視線を動かさず、周囲を見渡すだけで方向を把握できるという体験は、まったく別物です。
Vision Proならではの、 "空間的な気づき" を活かすことで、従来のナビゲーションとは異なる価値を提供できます。

想定される活用シーン

  • 観光ナビ : 有名な建物や店舗、ランドマークがどの方向にあるかを、その場で見渡すだけで把握
  • 星空案内 : 方角をもとに、見えている星座を示す
  • 場内案内 : 遊園地や動物園で、目的の場所がどの方向にあるのかを直感的に把握
  • ニュース速報/口コミ速報 : 身近で起きた事件/事故や、投稿された口コミが、どの方向で起きているのか

このように、[空間 x 方角]の情報が直感的に見えるだけで、MR体験はより豊かなものになります。

Vision ProとiPhoneの連携構成

デバイス構成と役割

LLD Compassは、次のように役割を分担することで、互いの長所を活かしています。

  • iPhone
    緯度・経度・方角の取得、Vision Proへの送信
    使用技術 : SwiftUI / CoreLocation / MultipeerConnectivity
  • Vision Pro
    受信した位置情報をもとに、空間表示を行う
    使用技術 : Unity / PolySpatial / Swiftブリッジ

連携の仕組み

Appleが提供するMultipeerConnectivityフレームワークを使うことで、iPhoneとVision Pro間でP2P通信を行います。
LLD Compassではこの仕組みを利用して、iPhoneから送信する現在地と方角のデータを、Vision Pro側でリアルタイムに受信・反映しています。

  • iPhone
    • 緯度/経度/方角の情報を取得
    • JSONにシリアライズ
    • MultipeerConnectivityで送信
  • Vision Pro (Swiftレイヤー)
    • MultipeerConnectivityで受信
    • JSONをUnityへ送信
  • Unity
    • JSONを、緯度/経度/方角の情報にデシリアライズ
    • 空間上のオブジェクト位置・向きに反映

アプリの構成

上記の構成のため、アプリは2つ必要になります。

  • 1つ目は、[緯度/経度/方角の情報を取得し、Vision Proに情報を送信する]iPhoneアプリ
  • 2つ目は、[受信した緯度/経度/方角の情報を、MR空間に反映して表示する]Vision Proアプリ

実装上の課題とその解決

[iPhone]と[Vision Pro]と[Unity]の連携

今回、MR空間はUnityで作成しています。
iPhoneで取得した情報を、どのように、Vision Pro内のUnityのワールドに反映させるかは、重要な課題でした。

解決策 : Vision ProにSwiftブリッジを作成する

UnitySendMessageを使う事で、ネイティブからUnityに情報を渡せます。これをSwiftで作成し、Vision ProのSwiftレイヤーにUnityへのブリッジ機能を持たせました。
その結果、[iPhone]と[Vision Pro]間で行われている、MultipeerConnectivityの内容を、Unityから取得できるようになります。

Vision Proには[北]がない

Vision Proは、[北]を知る手段がありません。各種センサーによって自身の回転の変化は検知できますが、絶対的な方角(地球における北)はわからないのです。

解決策 : Vision ProとiPhoneを[初期同期]する

Vision Proを装着した後に、iPhoneを同じ方向に向けた状態で通信を開始し、その瞬間を「両者が同じ向きを向いていた基準点」として扱います。
これによって、iPhoneが向いている方角が、同じくVision Proが向いている方角となり、Vision Proに絶対的な方角を持たす事ができます。

ランドマークはどの方角に存在するのか

Vision Proを装着しているその場所を[A点]、ランドマーク(例えば東京タワー)の場所を[B点]とした時に、[A点]から見て[B点]はどの方角に存在するのかを、相対的に判定する必要があります。

解決策 : 方位角(ベアリング)を計算する

[A点]と[B点]、それぞれの緯度/経度を元に方位角(ベアリング)を計算し、[B点]の方角を判定します。

double GetBearing(double lat1, double lon1, double lat2, double lon2)
{
    var phi1 = lat1 * Math.PI / 180;
    var phi2 = lat2 * Math.PI / 180;
    var deltaLambda = (lon2 - lon1) * Math.PI / 180;

    var y = Math.Sin(deltaLambda) * Math.Cos(phi2);
    var x = Math.Cos(phi1) * Math.Sin(phi2) -
            Math.Sin(phi1) * Math.Cos(phi2) * Math.Cos(deltaLambda);

    var theta = Math.Atan2(y, x);
    var bearing = (theta * 180 / Math.PI + 360) % 360;

    return bearing; // 北=0, 東=90, 南=180, 西=270
}

今後の展望と応用

LLD Compassを開発した結果、[方角]と[現在地]をMR空間に持ち込むことの意義と可能性を改めて感じました。
この技術は、下記のような、さまざまなサービスに応用可能です。

  • 地図サービスとの連携
    地図を空間に投影する事で、[足元に地図が広がっているような感覚]で、周辺の地理を把握することが可能になります。
  • フライトトラッキングなどの、リアルタイム位置情報の提供
    空を飛んでいる航空機の位置や方角をリアルタイムで表示することもできます。自分の周辺を飛んでいる機体が[どこから来て、どこへ向かっているのか]を、ビジュアル的に知ることができます。
  • 複数ユーザーの位置共有
    フィールドワークやイベント会場などで、位置情報を他のユーザーと共有すれば、複数人が同じ空間において、お互いの位置/方角を確認できる体験。

最後に

LLD Compassは、Vision ProとiPhoneという異なるデバイスの長所を組み合わせることで、 [Vision Proに絶対的な北を持たす] という、シンプルかつインパクトのある体験を実現しました。

  • Vision Proは空間表現の力を持ちながらも、位置情報の取得には限界がある
  • iPhoneがその制約を補い、センサーの役割を果たすことで、空間ナビゲーションが可能に
  • Unity x Swift x MultipeerConnectivity によるリアルタイム連携の実現
  • Vision Proを装着している場所から、相手側の方位角(ベアリング)計算も可能になる

Vision Proは、 現実世界に情報をどのように"重ね合わせるか" によって、その価値が大きく変わるデバイスです。
方角や位置という情報を空間そのものに組み込むことで、全く新しい、強いインパクトがある体験を作ることができます。
LLD Compassは、その可能性を探るためのひとつの実験でもあり、プロトタイプでもあります。

今後も、Vision Proを活かした 新しい体験とは何か 、を追求していきたいと思います。

Discussion