Das ARCore SDK for iOS verbindet sich mit ARKit und ermöglicht so Cloud Anchor. können Sie Anker zwischen iOS- und Android-Geräten im in derselben Umgebung.
Weitere Informationen zur Verwendung der ARCore Cloud Anchor API oder des ARCore Cloud Anchor-Dienstes in Ihren eigenen Apps
Vorbereitung
- Xcode Version 13.0 oder höher
- CocoaPods 1.4.0 oder höher bei Verwendung von CocoaPods
- Ein ARKit-kompatibles Apple-Gerät mit iOS 12.0 oder höher (Bereitstellungsziel für iOS 12.0 oder höher erforderlich)
Wenn Sie Cloud-Anker noch nicht kennen:
Informieren Sie sich über den Prozess zum Hosten und Auflösen einer Cloud Anker.
In der Kurzanleitung finden Sie Informationen zu den Systemanforderungen sowie zur Einrichtung und Installation.
Sehen Sie sich eines der Cloud Anchor-Beispiele an.
Cloud-Markierungen in Ihrer App aktivieren
Wenn Sie die Cloud Anchors API verwenden möchten, müssen Sie einen
GARSessionConfiguration
und legen Sie die Eigenschaft cloudAnchorMode
dafür fest, wie in
Konfigurieren Sie eine ARCore-Sitzung unter iOS. Verwenden Sie
setConfiguration:error: (GARSession)
um die Konfiguration festzulegen.
Sie müssen außerdem die ARCore API für Ihre Anwendung aktivieren.
Anker hosten und auflösen
Mit der ARCore Cloud Anchor API können Sie Cloud-Markierungen hosten und auflösen. Die API umfasst Rückrufmethoden für abgeschlossene Vorgänge sowie Future-Objekte, die abgefragt werden können.
Anker hosten
Beim Hosten eines ARAnchor
wird der Anker für ein bestimmtes Koordinatensystem in einem gemeinsamen Koordinatensystem gespeichert.
einem physischen Raum.
Eine Hostanfrage sendet visuelle Daten an einen Google-Server, der die Position der ARAnchor
in einem Koordinatensystem abbildet, das den aktuellen physischen Raum darstellt. A
erfolgreiche Hostanfrage gibt eine neue Cloud Anchor-ID zurück, die freigegeben und
zum Auflösen des Ankers.
- (void)addAnchorWithTransform:(matrix_float4x4)transform {
self.arAnchor = [[ARAnchor alloc] initWithTransform:transform];
[self.sceneView.session addAnchor:self.arAnchor];
__weak ExampleViewController *weakSelf = self;
self.hostFuture = [self.cloudAnchorManager
hostCloudAnchor:self.arAnchor
completion:^(NSString *anchorId, GARCloudAnchorState cloudState) {
[weakSelf handleHostAnchor:anchorId cloudState:cloudState];
}
error:nil];
[self enterState:HelloARStateHosting];
}
Anker auflösen
Wenn Sie eine ARAnchor
auflösen, können Android- und iOS-Geräte in einem bestimmten physischen Raum neuen Szenen zuvor gehostete Anker hinzufügen.
Bei einer Resolve-Anfrage wird eine Cloud-Anchor-ID zusammen mit visuellen Daten an einen Google-Server gesendet. aus dem aktuellen Frame. Der Server versucht, diese visuellen Daten mit den Bildern abzugleichen, an denen derzeit gehostete Cloud-Anchors zugeordnet sind. Wenn die Auflösung erfolgreich war, wird der Sitzung ein neuer Anker hinzugefügt und zurückgegeben.
- (void)resolveAnchorWithIdentifier:(NSString *)identifier {
GARResolveCloudAnchorFuture *garFuture =
[self.gSession resolveCloudAnchorWithIdentifier:identifier
completionHandler:completion
error:&error];
}
// Pass the ARFRame to the ARCore session every time there is a frame update.
// This returns a GARFrame that contains a list of updated anchors. If your
// anchor's pose or tracking state changed, your anchor will be in the list.
- (void)cloudAnchorManager:(CloudAnchorManager *)manager didUpdateFrame:(GARFrame *)garFrame {
for (GARAnchor *garAnchor in garFrame.updatedAnchors) {
if ([garAnchor isEqual:self.garAnchor] && self.resolvedAnchorNode) {
self.resolvedAnchorNode.simdTransform = garAnchor.transform;
self.resolvedAnchorNode.hidden = !garAnchor.hasValidTransform;
}
}
}
Optionales GARSession
-Polling-Muster
Wenn Sie Metal verwenden oder eine Umfrageoption benötigen und Ihre App mit einer
mindestens 30 fps erreichen möchten, verwenden Sie das folgende Muster, um ARFrame
s an die
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
API-Kontingente
Bei der ARCore API gelten die folgenden Kontingente für die Anfragebandbreite:
Kontingenttyp | Maximum | Dauer | Gilt für |
---|---|---|---|
Anzahl der Anker | Unbegrenzt | – | Projekt |
host-Anfragen verankern | 30 | Minute | IP-Adresse und Projekt |
Anfragen an Anchor bearbeiten | 300 | Minute | IP-Adresse und Projekt |
Bekannte Probleme und Problemumgehungen
Bei der Arbeit mit dem ARCore SDK for iOS gibt es einige bekannte Probleme.
Standardschemaeinstellungen führen zu gelegentlichen App-Abstürzen
Die Schemaeinstellungen für GPU Frame Capture und Metal API Validation werden durch Das kann dazu führen, dass die App innerhalb des SDK abstürzt.
App-Absturz diagnostizieren
Wenn Sie vermuten, dass ein Absturz aufgetreten ist, sehen Sie sich den Stack-Trace an.
Wenn Sie im Stacktrace MTLDebugComputeCommandEncoder
sehen, liegt das wahrscheinlich
auf die Einstellungen für
Standardschema zurück.
Problemumgehung
Öffnen Sie Product > Scheme > Edit Scheme….
Öffnen Sie den Tab Run.
Klicken Sie auf Options, um Ihre aktuellen Einstellungen aufzurufen.
Achten Sie darauf, dass sowohl GPU Frame Capture als auch Metal API Validation deaktiviert sind.
Erstellen Sie Ihre App und führen Sie sie aus.
Weitere bekannte Probleme finden Sie in der CHANGELOG
von CocoaPods.
Beschränkungen
Das ARCore SDK für iOS unterstützt den ARKit-Methodenaufruf setWorldOrigin(relativeTransform:)
nicht.
Hinweise zur Leistung
Wenn Sie die ARCore API aktivieren, erhöht sich die Arbeitsspeichernutzung. Aufgrund der höheren Netzwerk- und CPU-Auslastung steigt der Akkuverbrauch des Geräts.