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.
Hier erfahren Sie, wie Sie die ARCore Cloud Anchor API bzw. den ARCore Cloud Anchor-Dienst in Ihren eigenen Apps verwenden.
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 noch nicht mit Cloud Anchors vertraut sind:
Informieren Sie sich über den Prozess zum Hosten und Auflösen einer Cloud Anker.
Lesen Sie die Kurzanleitung zu Systemanforderungen, Einrichtungs- und Installationsanleitung.
Sehen Sie sich eines der Cloud Anchor-Beispiele an.
Cloud-Anchors in Ihrer Anwendung 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.
Außerdem müssen Sie die ARCore API aktivieren für Ihre Anwendung.
Anchors hosten und auflösen
Sie können Cloud-Anchors mit der ARCore Cloud Anchor API hosten und auflösen. Die API enthält Callback-Methoden 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.
Bei einer Hostanfrage werden visuelle Daten an einen Google-Server gesendet, der die von der ARAnchor
Position in einem Koordinatensystem, das den aktuellen physischen Raum darstellt. A
erfolgreiche Hostanfrage gibt eine neue Cloud Anchor-ID zurück, die freigegeben und
mit denen der Anker später aufgelöst werden kann.
- (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 du ein ARAnchor
auflöst, kannst du Android- und iOS-Geräte in einem bestimmten physischen Bereich nutzen
um zuvor gehostete Anker neuen Szenen hinzuzufügen.
Eine Resolve-Anfrage sendet eine Cloud-Anchor-ID zusammen mit visuellen Daten an einen Google-Server. aus dem aktuellen Frame. Der Server versucht, diese visuellen Daten abzugleichen mit dem Bild der aktuell gehosteten Cloud-Anker. Wann? aufgelöst wird, wird ein neuer Anker zur Sitzung 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
-Abfragemuster
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
Die ARCore API hat 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 |
Anker klärt Anfragen | 300 | Minute | IP-Adresse und Projekt |
Bekannte Probleme und Behelfslösungen
Bei der Arbeit mit dem ARCore SDK for iOS gibt es einige bekannte Probleme.
Standardschemaeinstellungen führen zu zeitweiligem Absturz der App
Die Schemaeinstellungen „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 Ihren Stacktrace an.
Wenn Sie im Stacktrace MTLDebugComputeCommandEncoder
sehen, liegt das wahrscheinlich
auf die Einstellungen für das
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 for iOS unterstützt den ARKit-Methodenaufruf setWorldOrigin(relativeTransform:)
nicht.
Hinweise zur Leistung
Wenn Sie die ARCore API aktivieren, erhöht sich die Arbeitsspeichernutzung. Freuen Sie sich auf die Akkunutzung des Geräts aufgrund höherer Netzwerk- und CPU-Auslastung steigen.