web-dev-qa-db-ja.com

複数のユーザーを持つARKit

Appleの新しいARKitを複数のユーザー/デバイスで使用する場合、最良の方法はありますか?

各デバイスは、独自のシーンを個別に理解するようです。これまでの私の最善の推測は、ARKitは絶対参照参照を提供しないため、生の機能ポイントの位置を使用し、デバイス間でそれらを一致させて異なる視点を接着しようとすることです。

===編集1、試したこと===

1)特徴点

露出した未加工の機能ポイントで遊んでみましたが、現在の状態では行き止まりであると確信しています。

  • それらは生の特徴点ではなく、位置のみを公開しますが、追跡される特徴点に通常見られる属性はありません
  • それらのインスタンス化はフレームからフレームに引き継がれず、位置もまったく同じではありません
  • 多くの場合、カメラの入力がほとんど変化せず、多くの特徴が現れたり消えたりして、報告される特徴点が大きく変化することがあります。

したがって、全体としては、いくつかのデバイスはもちろん、1つのデバイス内で適切なポイントマッチングを行うことができず、意味のある方法でそれらを使用しようとするのは不合理だと思います。代わりに、独自の特徴点の検出とマッチングを実装することもできますが、ARKitを活用するよりも、ARKitに取って代わります。

2)QRコード

@Ricksterが示唆したように、私はQRコードのような簡単に識別可能なオブジェクトを識別し、その固定点から相対的な参照変更を取得しようとしました( この質問 を参照)カメラのポーズを推定するopenCV。しかし、より重要なことは、非常に制限的なことです

26
Guig

現在、WWDC 2018でARKit 2.0をリリースした後、2〜6人のユーザー向けのゲームを作成することが可能になりました。

このためには、ARWorldMapクラスを使用する必要があります。 world mapsを保存し、それらを使用して新しいセッションを開始することで、iOSアプリケーションは新しい拡張現実機能、マルチユーザーおよび永続的なARエクスペリエンスを追加できるようになりました。

ARマルチユーザーエクスペリエンス。これで、アーカイブされたARWorldMapオブジェクトを近くのiPhoneまたはiPadに送信して、参照の共有フレームを作成できます。複数のデバイスが同時に同じworld mapを追跡すると、すべてのユーザー(最大6人)が同じ仮想3Dコンテンツを共有および表示できるエクスペリエンスを構築できます(3Dには新しいPixarのUSDZファイル形式を使用しますXcode 10およびiOS 12)。

session.getCurrentWorldMap { worldMap, error in 
    guard let worldMap = worldMap else {
        showAlert(error)
        return
    }
}

let configuration = ARWorldTrackingConfiguration()
configuration.initialWorldMap = worldMap
session.run(configuration)

AR Persistent experienceworld mapを保存してからiOSアプリケーションが非アクティブになった場合、アプリの次の起動時と同じ物理環境で簡単に復元できます。再開されたworld mapARAnchorsを使用して、以前の保存されたセッションと同じ位置に同じ仮想3Dコンテンツ(USDZまたはDAE形式)を配置できます。

4
ARGeo

いくつかの新しい回答が追加されたように、マルチユーザーARはARKit 2(別名iOS 12のARKit)のヘッドライン機能です。 ARKit 2のWWDC18トーク には概要があり、Appleには開始を支援する2つの開発者サンプルコードプロジェクトがあります:a 基本的な例 =これは、2台以上のデバイスを共有エクスペリエンスに取り込むだけであり、 SwiftShot 、AR用に構築された実際のマルチプレイヤーゲームです。

主なポイント:

  1. ARWorldMap は、ARKitがローカル環境について知っているすべてをシリアル化可能なオブジェクトにラップするため、後で保存したり、別のデバイスに送信したりできます。後者の場合、同じローカル環境内の別のデバイスによって保存された世界地図に「再ローカライズ」すると、両方のデバイスに同じ参照フレーム(世界座標系)が与えられます。

  2. 選択したネットワークテクノロジーを使用して、デバイス間でARWorldMapを送信します:AirDrop、クラウド共有、 伝書鳩などはすべて機能しますが、Appleの Multipeer Connectivityフレームワーク は優れた、簡単で安全なオプションの1つなので、サンプルプロジェクトでAppleが使用するものです。

  3. これはすべて、共有エクスペリエンスを作成するためのbasisのみを提供します。複数のデバイス上のアプリ上の複数のコピーはすべて、整列する世界座標系を使用します同じ現実の環境。複数のユーザーに同じstaticARコンテンツを体験させるために必要なのはそれだけですが、それらをinteractARでは、お気に入りのネットワークテクノロジーをさらに使用する必要があります。

    Appleの 基本的なマルチユーザーARデモ は、ARAnchorのエンコードとピアへの送信を示しているため、1人のユーザーがタップして世界に3Dモデルを配置し、他のすべてのユーザーがそれを見ることができます。 SwiftShot game example は、ネットワークプロトコル全体を構築し、すべてのユーザーが同じゲームプレイアクション(互いにパチンコを発射するなど)および物理結果を同期する(打たれた後に落下するブロックなど)ようにします。両方とも Multipeer Connectivity を使用します。

(ところで、上記の2番目と3番目のポイントは、 @ andy's answer から「2〜6」の数字を取得する場所です。ARKitには何人の人がいるかわからないため、ARKit側に制限はありません。ただし、マルチピアコネクティビティには8ピアの制限があります。この上に構築するゲーム/アプリ/エクスペリエンスには、ピアを追加するときに遅延/パフォーマンススケーリングの問題が発生する場合がありますが、それは技術と設計。)

歴史的な興味のための元の答え...


これはiOS開発者コミュニティで活発に研究されている分野のようです。先週WWDCでそれを解明しようとしているいくつかのチームに会いましたが、まだ誰も解読し始めていませんでした。だから、たとえ実行可能な方法であっても、「最善の方法」があるかどうかはまだわかりません。

特徴点はセッションに対して相対的に配置され、個別に識別されないため、複数のユーザー間でそれらを相関させるのは難しいと思います。

セッション調整モード gravityAndHeading が役立つ場合があります。これは、すべての方向を(推定/推定絶対参照フレームになりますが、positionsは、セッションが開始されたときにデバイスがあった場所に相対的です。その位置を絶対的なもの(緯度/経度、またはiBeaconなど)に関連付ける方法を見つけて、十分な精度で信頼性の高い方法を見つけることができれば...複数のユーザーが共有しているため、ロケーションベースのARの主要な要素もあります。 (空港のゲートA113に着くために、すぐそこにターンと言う浮動仮想矢印のように)

私が議論したと聞いた別の手段は、画像分析です。複数のユーザーを考慮して、実際のマーカー(QRコードなどの簡単に機械認識できるもの)を配置できる場合、何らかの形のオブジェクト認識または追跡(MLモデル、おそらく?)を使用して、マーカーの位置と方向を正確に識別することができます各ユーザーに相対的であり、そこから戻って共有の参照フレームを計算します。ダンノはそれがどれだけ実現可能か。 (ただし、そのルートに行く場合、または同様の場合、キャプチャされたカメラフレームごとに ARKitがピクセルバッファーを公開します に注意してください。)

幸運を!

10
rickster

回避策のような防弾の答えではありませんが、これらは役に立つかもしれません。すべてのプレイヤーが同じ場所にいると仮定しています。

  1. [〜#〜] diy [〜#〜] ARKitは、ARセッションが開始された後、すぐにワールド座標系を設定します。したがって、すべてのプレーヤーを次々に配置して、デバイスを同じ物理的な場所に配置して位置合わせし、そこでセッションを開始できるようにしたら、そこに行きます。利用可能なものに固定されたL正方形定規の内側のエッジを想像してください。または、穴のある平らな面:カメラで穴から覗く電話を保持し、セッションを(再)開始します。

  2. Medium @Ricksterが説明したのと同じように、画像解析で現実世界のマーカーを検出する代わりに、電話を手動で調整するプレーヤーを保存します。

  3. Involved Core MLモデルをトレーニングして、iPhoneおよびiPadとそれらのカメラの位置を認識します。人間の顔と目で行われたように。サーバー上のデータを集約し、MLをオフにして電力を節約します。注:モデルがカバーのないことを確認してください。 :)

1
diviaki

これは非常に困難な問題です。それに取り組んでいる最も有名なスタートアップは 6D.ai です。

「マルチプレイヤーAR」は永続的なSLAMと同じ問題であり、自分で作成していないマップに自分自身を配置する必要があります。ほとんどの自動運転自動車会社が積極的に取り組んでいる問題です。

0
Jordan

ゲームコントローラーフレームワーク( https://github.com/robreuss/VirtualGameController )を更新して、共有コントローラー機能をサポートしているので、すべてのデバイスは上のコントロール要素から入力を受け取りますすべてのデバイスの画面。この機能強化の目的は、ARKitベースのマルチプレイヤー機能をサポートすることです。開発者はdiviakiが言及した最初のアプローチを使用すると想定しています。仮想空間の一般的な位置付けは、各デバイスで物理空間の共通ポイントからセッションを開始することで定義され、参照を共有します。具体的には、テーブルの反対側。すべてのデバイスが同時にゲームを起動し、物理的なサイズに関連する共通の座標空間を利用し、すべてのコントローラーからの入力を使用して、ゲームはすべてのデバイスで理論的に同期したままになります。まだテスト中。明らかな潜在的な問題は、ネットワークの遅延または中断であり、同期はばらばらになり、ゲームを再起動しない限り回復することは困難です。アプローチとフレームワークは、一部の種類のゲームではかなりうまく機能する可能性があります-たとえば、単純なアーケードスタイルのゲームですが、他の多くのゲームではそうではありません-たとえば、デバイス間で調整できないかなりのランダム性を持つゲームです。

0
Rob Reuss