Le SDK ARCore pour iOS interagit avec ARKit afin de fournir Cloud Anchor ce qui vous permet de partager des ancres entre des appareils iOS et Android dans le dans le même environnement.
Découvrez comment utiliser l'API ARCore Cloud Anchor ou le service ARCore Cloud Anchor dans vos propres applications.
Prérequis
- Xcode version 13.0 ou ultérieure
- CocoaPods 1.4.0 ou version ultérieure si vous utilisez CocoaPods
- Un appareil Apple compatible avec ARKit fonctionnant sous iOS 12.0 ou version ultérieure (cible de déploiement d'iOS 12.0 ou version ultérieure requise)
Si vous débutez avec Cloud Anchors:
Assurez-vous de bien comprendre le processus utilisé pour héberger et résoudre un Ancrage :
Lisez le guide de démarrage rapide pour connaître la configuration système requise. de configuration et d'installation.
Découvrez l'un des exemples Cloud Anchor
Activer Cloud Anchors dans votre application
Pour utiliser l'API Cloud Anchors, vous devez créer un
GARSessionConfiguration
et définissez la propriété cloudAnchorMode
correspondante, comme décrit dans
Configurez une session ARCore dans iOS. Utilisez
setConfiguration:error: (GARSession)
pour définir la configuration.
Vous devez également activer l'API ARCore pour votre application.
Héberger et résoudre des ancres
Vous pouvez héberger et résoudre des ancres cloud avec l'API ARCore Cloud Anchor. L'API Il inclut des méthodes de rappel pour les opérations terminées, ainsi que des objets Future. qui peut être interrogé.
Héberger une ancre
L'hébergement d'un ARAnchor
place l'ancre dans un système de coordonnées commun pour tout
dans l'espace physique.
Une requête d'hôte envoie des données visuelles à un serveur Google, qui mappe les ARAnchor
dans un système de coordonnées
qui représente l'espace physique actuel. A
de la requête hôte réussie renvoie un nouvel ID d'ancre cloud, qui peut être partagé et
pour résoudre l'ancre ultérieurement.
- (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];
}
Résoudre une ancre
Résoudre un ARAnchor
autorise les appareils Android et iOS dans un espace physique donné
pour ajouter des ancres précédemment hébergées à de nouvelles scènes.
Une requête de résolution envoie à un serveur Google un ID d'ancre cloud ainsi que des données visuelles. à partir de l'image actuelle. Le serveur tentera de faire correspondre ces données visuelles avec les images de l'emplacement où sont mappées les ancres cloud actuellement hébergées. Quand ? réussit, une nouvelle ancre est ajoutée à la session et renvoyée.
- (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;
}
}
}
Schéma d'interrogation GARSession
facultatif
Si vous utilisez Metal ou si vous avez besoin d'une option de sondage, et que votre application s'exécute à un
minimale de 30 ips, utilisez le format suivant pour transmettre des ARFrame
s à la
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Quotas d'API
L'API ARCore dispose des quotas suivants pour la bande passante des requêtes:
Type de quota | Maximum | Durée | Applicable à |
---|---|---|---|
Nombre d'ancres | Illimité | N/A | Projet |
Demandes d'ancrage host | 30 | minute | Adresse IP et projet |
Requêtes resolve ancrées | 300 | minute | Adresse IP et projet |
Problèmes connus et solutions temporaires
Le SDK ARCore pour iOS présente quelques problèmes connus.
Les paramètres du schéma par défaut entraînent un plantage intermittent de l'application
Les paramètres du schéma de capture d'image GPU et de validation de l'API Metal sont activés en par défaut, ce qui peut parfois entraîner le plantage de l'application dans le SDK.
Diagnostiquer un plantage de l'application
Si vous pensez qu'un plantage s'est produit, consultez la trace de votre pile.
Si MTLDebugComputeCommandEncoder
apparaît dans la trace de la pile, cela est probablement dû à
aux paramètres du schéma par défaut.
Solution
Accédez à Product > Scheme > Edit Scheme….
Ouvrez l'onglet Run.
Cliquez sur Options pour afficher vos paramètres actuels.
Assurez-vous que GPU Frame Capture et Metal API Validation sont désactivés.
Créez et exécutez votre application.
Consultez le CHANGELOG
CocoaPods pour connaître les autres problèmes connus.
Limites
Le SDK ARCore pour iOS n'est pas compatible avec l'appel de méthode ARKit setWorldOrigin(relativeTransform:)
.
Considérations sur les performances
L'utilisation de la mémoire augmente lorsque vous activez l'API ARCore. Attendez-vous à ce que de la batterie de votre appareil en raison d'une utilisation plus élevée du réseau et du processeur.