webentwicklung-frage-antwort-db.com.de

ARKit mit mehreren Benutzern

Was ist der beste Weg, um das neue ARKit von Apple mit mehreren Benutzern/Geräten zu verwenden?

Es scheint, dass jedes Gerät sein eigenes Szenenverständnis erhält. Meine bisher beste Vermutung ist, dass Sie die Position der Roh-Feature-Punkte verwenden und versuchen, sie an verschiedene Geräte anzupassen, um die verschiedenen Ansichten miteinander zu verbinden, da ARKit keinen absoluten referenziellen Bezug bietet.

=== Edit1, Dinge, die ich ausprobiert habe ===

1) Merkmalspunkte

Ich habe herumgespielt und mit den exponierten rohen Features Punkten und ich bin jetzt überzeugt, dass sie in ihrem jetzigen Zustand eine Sackgasse sind:

  • dabei handelt es sich nicht um reine Feature-Punkte, sondern nur um Positionen, aber keines der Attribute, die normalerweise in verfolgten Feature-Punkten gefunden werden
  • ihre Instantiierung wird nicht von Frame zu Frame übertragen, und die Positionen sind nicht exakt gleich
  • es kommt häufig vor, dass gemeldete Feature-Punkte sich stark ändern, wenn sich die Kameraeingabe fast nicht ändert und entweder viel erscheint oder verschwindet.

Insgesamt halte ich es für unangemessen, zu versuchen, sie auf eine sinnvolle Art und Weise zu verwenden, da ich nicht in der Lage bin, irgendeinen guten Punktabgleich innerhalb eines Geräts vorzunehmen, geschweige denn mehrere .. _. Aber das würde ARKit mehr ersetzen, als es zu nutzen.

2) QR-Code

Wie von @Rickster vorgeschlagen, habe ich auch versucht, ein leicht identifizierbares Objekt wie einen QR-Code zu identifizieren und die relative Referenzänderung von diesem festen Punkt aus zu ermitteln (siehe diese Frage ) Kamerahaltung. Vor allem aber sehr einschränkend

26
Guig

Nach der Veröffentlichung von ARKit 2.0 auf der WWDC 2018 ist es jetzt möglich, Spiele für 2 bis 6 Benutzer zu erstellen. 

Dazu müssen Sie die ARWorldMap-Klasse verwenden. Wenn Sie world maps speichern und zum Starten neuer Sitzungen verwenden, kann Ihre iOS-Anwendung jetzt neue Augmented Reality-Funktionen hinzufügen: Mehrbenutzer- und permanente AR-Erfahrung.

AR Mehrbenutzererfahrungen . Jetzt können Sie einen freigegebenen Frame einer Referenz erstellen, indem Sie archivierte ARWorldMap-Objekte an ein nahegelegenes iPhone oder iPad senden. Mit mehreren Geräten, die gleichzeitig denselben world map verfolgen, können Sie ein Erlebnis erstellen, bei dem alle Benutzer (bis zu 6) denselben virtuellen 3D-Inhalt freigeben und anzeigen können (verwenden Sie das neue Pixar-Dateiformat USDZ für 3D in Xcode 10 und 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 Anhaltende Erfahrungen . Wenn Sie einen world map speichern und Ihre iOS-Anwendung inaktiv wird, können Sie sie beim nächsten Start der App und in derselben physischen Umgebung problemlos wiederherstellen. Sie können ARAnchors aus dem wiederaufgenommenen world map verwenden, um denselben virtuellen 3D-Inhalt (im USDZ- oder DAE-Format) an denselben Positionen der vorherigen gespeicherten Sitzung zu platzieren.

3
ARGeo

Wie einige neuere Antworten hinzugefügt haben, ist die Mehrbenutzer-AR eine Schlagzeilenfunktion von ARKit 2 (auch bekannt als ARKit unter iOS 12). Der WWDC18-Vortrag auf ARKit 2 bietet eine Übersicht über Nizza. Apple bietet zwei Beispielprojekte für Entwickler, die Ihnen den Einstieg erleichtern: ein einfaches Beispiel , das nur 2 Geräte in eine gemeinsam genutzte Umgebung bringt, und SwiftShot , ein echtes Multiplayer-Spiel für AR.

Die wichtigsten Punkte:

  1. ARWorldMap fasst alles, was ARKit über die lokale Umgebung weiß, in ein serialisierbares Objekt zusammen, damit Sie es für später speichern oder an ein anderes Gerät senden können. Im letzteren Fall werden durch das "Relokalisieren" auf eine Weltkarte, die von einem anderen Gerät in derselben lokalen Umgebung gespeichert wurde, beide Geräte denselben Referenzrahmen (Weltkoordinatensystem).

  2. Verwenden Sie die Netzwerktechnologie Ihrer Wahl, um die ARWorldMap zwischen Geräten zu senden: AirDrop, Cloud-Shares, brieftaubeusw. Alles funktioniert, aber das Multipeer Connectivity Framework von Apple ist eine gute, einfache und sichere Option. Daher verwendet es Apple in seinen Beispielprojekten. 

  3. All dies gibt Ihnen nur das Basis für das Erstellen einer gemeinsamen Erfahrung - mehrere Kopien Ihrer App auf mehreren Geräten, die alle ein Weltkoordinatensystem verwenden, das sich in derselben realen Umgebung befindet. Das ist alles, was Sie brauchen, damit mehrere Benutzer denselben statisch AR-Inhalt erhalten. Wenn Sie jedoch möchten, dass sie interact in AR verwenden, müssen Sie Ihre bevorzugte Netzwerktechnologie noch etwas mehr nutzen. 

    Apples basic AR-Demo für mehrere Benutzer zeigt die Kodierung einer ARAnchor Und das Senden an Peers, so dass ein Benutzer auf tippen kann, um ein 3D-Modell in der Welt zu platzieren, und alle anderen können es sehen. Das SwiftShot-Spielbeispiel baut ein ganzes Netzwerkprotokoll auf, sodass alle Benutzer dieselben Gameplay-Aktionen (wie z. B. gegenseitige Abfeuern von Slingshots) und synchronisierte physische Ergebnisse (wie Blöcke, die nach einem Angriff fallen) erhalten. Beide verwenden Multipeer Connectivity .

(Übrigens, der zweite und dritte Punkt oben ist der Punkt, an dem Sie die "2 bis 6" - Zahl von @ andys Antwort erhalten) - der ARKit-Seite sind keine Grenzen gesetzt, da ARKit keine Ahnung hat, wie viele Menschen die Welt erhalten haben Die von Ihnen gespeicherte Karte. Die Multipeer-Konnektivität hat jedoch ein Peer-Limit von 8. Was auch immer für Spiele/Apps/Erlebnisse Sie aufbauen, kann zu Problemen bei der Latenz/Performance-Skalierung führen, wenn Sie weitere Peers hinzufügen. Dies hängt jedoch von Ihrer Technologie und Ihrem Design ab.

Originalantwort unten für historisches Interesse ...


Dies scheint ein Bereich aktiver Forschung in der iOS-Entwicklergemeinde zu sein. Ich habe letzte Woche auf der WWDC mehrere Teams kennengelernt, die versucht haben, dies herauszufinden, und bis jetzt hatte noch niemand damit angefangen. Ich bin mir nicht sicher, ob es noch einen "besten Weg" gibt, ob überhaupt einen machbaren Weg. 

Feature-Punkte werden relativ zur Sitzung positioniert und nicht einzeln identifiziert. Daher kann ich mir vorstellen, dass die Zuordnung zwischen mehreren Benutzern schwierig ist. 

Der Sitzungsausrichtungsmodus gravityAndHeading könnte sich als hilfreich erweisen: Dadurch werden alle Richtungen auf einen (vermutlich angenommenen/geschätzten) absoluten Referenzrahmen festgelegt, aber Positionen sind immer noch relativ zu dem Ort Das Gerät war zu Beginn der Sitzung. Wenn Sie einen Weg finden könnten, diese Position mit etwas absolutem zu verknüpfen - einem Lat/Long oder vielleicht einem iBeacon - und dies zuverlässig und mit ausreichender Genauigkeit tun ... Nun, Sie hätten nicht nur einen Referenzrahmen, der sein könnte Wenn Sie von mehreren Benutzern gemeinsam genutzt werden, haben Sie auch die Hauptzutaten für standortbasiertes AR. (Sie wissen, wie ein schwebender virtueller Pfeil, der an der Abbiegung rechts dort steht, um zum Gate A113 am Flughafen zu gelangen, oder was auch immer.)

Eine andere Möglichkeit, die ich gehört habe, ist die Bildanalyse. Wenn Sie einige echte Marker setzen könnten - leicht maschinell erkennbare Dinge wie QR-Codes -, könnten Sie angesichts mehrerer Benutzer möglicherweise eine Form der Objekterkennung oder -verfolgung (ein ML-Modell, vielleicht?) Verwenden, um die Position und Ausrichtung der Marker genau zu bestimmen relativ zu jedem Benutzer, und arbeiten Sie von dort zurück, um einen gemeinsamen Referenzrahmen zu berechnen. Weiß nicht, wie machbar das sein könnte. (Wenn Sie jedoch diese Route oder eine ähnliche Route wählen, beachten Sie, dass ARKit einen Pixelpuffer für jeden erfassten Kamerabild verfügbar macht.)

Viel Glück! 

10
rickster

Keine kugelsicheren Antworten, eher wie Problemumgehungen, aber vielleicht finden Sie diese hilfreich. Alle gehen davon aus, dass sich die Spieler am selben Ort befinden.

  1. DIYARKit richtet schnell nach dem Start der AR-Sitzung sein Weltkoordinatensystem ein. Wenn Sie also alle Spieler nacheinander dazu bringen können, ihre Geräte an demselben physischen Standort abzulegen und auszurichten und sie die Sitzung dort beginnen zu lassen, dann können Sie loslegen. Stellen Sie sich die inneren Kanten eines Lineales mit L-Quadrat vor, das an den verfügbaren Stellen befestigt ist. Oder eine ebene Fläche mit einem Loch: Halten Sie das Telefon gegen die Oberfläche, die durch das Loch blickt, mit der Kamera.

  2. Mittel Speichern Sie den Player, indem Sie das Telefon manuell ausrichten, und erkennen Sie stattdessen einen Real-World-Marker mit Bildanalyse wie bei @Rickster beschrieben.

  3. Involved Trainieren Sie ein Core ML-Modell, um iPhones und iPads und ihren Kamerastandort zu erkennen. So wie es mit menschlichem Gesicht und Augen gemacht wird. Sammeln Sie Daten auf einem Server, und deaktivieren Sie ML, um Strom zu sparen. Hinweis: Stellen Sie sicher, dass Ihr Modell abdeckungssicher ist. :)

1
diviaki

Dies ist ein enorm schwieriges Problem - das bekannteste Startup, das daran arbeitet, ist 6D.ai .

"Multiplayer AR" ist das gleiche Problem wie das permanente SLAM, bei dem Sie sich auf einer Karte positionieren müssen, die Sie möglicherweise nicht selbst erstellt haben. Es ist das Problem, an dem die meisten selbstfahrenden Autofirmen aktiv arbeiten.

0
Jordan

Ich bin dabei, mein Game-Controller-Framework ( https://github.com/robreuss/VirtualGameController ) zu aktualisieren, um eine gemeinsam genutzte Controller-Funktion zu unterstützen, sodass alle Geräte Eingaben von den Steuerelementen auf den Bildschirmen von erhalten alle Geräte. Der Zweck dieser Erweiterung ist die Unterstützung von ARKit-basierten Multiplayer-Funktionen. Ich gehe davon aus, dass die Entwickler den ersten von diviaki genannten Ansatz verwenden werden, bei dem die generelle Positionierung des virtuellen Raums definiert wird, indem die Sitzung auf jedem Gerät von einem gemeinsamen Punkt im physischen Raum aus, einer gemeinsamen Referenz, gestartet wird auf gegenüberliegenden Seiten eines Tisches. Alle Geräte würden das Spiel zur gleichen Zeit starten und einen gemeinsamen Koordinatenraum relativ zur physischen Größe verwenden. Wenn Sie die Eingänge aller Controller verwenden, bleibt das Spiel theoretisch auf allen Geräten synchron. Noch testen. Das offensichtliche mögliche Problem ist die Latenzzeit oder Unterbrechung des Netzwerks, und die Synchronisierung fällt auseinander, und es wäre schwierig, sie wiederherzustellen, es sei denn, Sie starten das Spiel neu. Der Ansatz und das Framework funktionieren möglicherweise für einige Arten von Spielen recht gut - zum Beispiel für einfache Arcade-Spiele, aber sicherlich nicht für viele andere - zum Beispiel für jedes Spiel mit erheblicher Zufälligkeit, das nicht geräteübergreifend koordiniert werden kann. 

0
Rob Reuss