L'SDK ARCore per iOS si interfaccia con ARKit per fornire il servizio Cloud Anchor che consentono di condividere gli ancoraggi tra i dispositivi iOS e Android stesso ambiente.
Scopri come utilizzare l'API Cloud Anchor ARCore, o il servizio ARCore Cloud Anchor, nelle tue app.
Prerequisiti
- Xcode 13.0 o versioni successive
- Cocoapods 1.4.0 o versione successiva se utilizzi Cocoapods
- Un dispositivo Apple compatibile con ARKit con iOS 12.0 o versioni successive (è richiesta la destinazione del deployment di iOS 12.0 o versioni successive)
Se non hai mai utilizzato gli ancoraggi Cloud:
Assicurati di comprendere il processo utilizzato per ospitare e risolvere un account Cloud Effettua ancoraggio.
Leggi la guida rapida per i requisiti di sistema. le istruzioni di configurazione e installazione.
Dai un'occhiata a uno degli esempi di anchor Cloud
Abilita gli ancoraggi Cloud nella tua app
Per utilizzare l'API Cloud Anchors, devi creare una
GARSessionConfiguration
e imposta la proprietà cloudAnchorMode
, come descritto in
Configura una sessione ARCore in iOS. Utilizza le funzionalità di
setConfiguration:error: (GARSession)
per impostare la configurazione.
Devi anche abilitare l'API ARCore. per la tua applicazione.
Ospita e risolvi gli anchor
Puoi ospitare e risolvere i cloud anchor con l'API ARCore Cloud Anchor. L'API include metodi di callback per le operazioni completate, nonché gli oggetti futuri che possono essere intervistati.
Ospita un ancoraggio
L'hosting di un ARAnchor
consente di inserire l'ancoraggio in un sistema di coordinate comune per qualsiasi
spazio fisico.
Una richiesta di host invia dati visivi a un server Google, che mappa il server ARAnchor
posizione in un sistema di coordinate che rappresenta lo spazio fisico attuale. R
una richiesta host completata restituisce un nuovo ID di ancoraggio Cloud, che può essere condiviso
per risolvere l'anchor in un secondo momento.
- (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];
}
Risolvi un ancoraggio
La risoluzione di un ARAnchor
consente ai dispositivi Android e iOS in un determinato spazio fisico
per aggiungere ancoraggi ospitati in precedenza alle nuove scene.
Una richiesta di risoluzione invia a un server Google un ID Cloud anchor insieme a dati visivi dal frame corrente. Il server tenterà di trovare una corrispondenza con questi dati visivi con le immagini dei punti in cui sono mappati gli ancoraggi Cloud attualmente ospitati. Quando viene risolto correttamente, viene aggiunto un nuovo ancoraggio alla sessione e viene restituito.
- (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;
}
}
}
Pattern di polling GARSession
facoltativo
Se usi Metal o ti serve un'opzione di polling e la tua app viene eseguita a un
almeno 30 f/s, usa il seguente pattern per passare ARFrame
s alla
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Quote API
L'API ARCore prevede le seguenti quote per la larghezza di banda delle richieste:
Tipo di quota | Massimo | Durata | Si applica a |
---|---|---|---|
Numero di ancoraggi | Illimitato | N/D | Progetto |
Ancorare le richieste host | 30 | minuto | Indirizzo IP e progetto |
Richieste di risoluzione di ancoraggio | 300 | minuto | Indirizzo IP e progetto |
Problemi noti e soluzioni alternative
Esistono alcuni problemi noti relativi all'utilizzo dell'SDK ARCore per iOS.
Le impostazioni dello schema predefinito causano l'arresto anomalo intermittente dell'app
Le impostazioni dello schema GPU Frame Capture e Metal API Validation sono abilitate da che a volte possono causare l'arresto anomalo dell'app all'interno dell'SDK.
Diagnosticare un arresto anomalo dell'app
Ogni volta che sospetti che si sia verificato un arresto anomalo, controlla l'analisi dello stack.
Se vedi MTLDebugComputeCommandEncoder
nell'analisi dello stack, probabilmente la causa è
alle impostazioni predefinite dello schema.
Soluzione alternativa
Vai a Product > Scheme > Edit Scheme….
Apri la scheda Run.
Fai clic su Options per visualizzare le impostazioni attuali.
Assicurati che GPU Frame Capture e Metal API Validation siano disattivati.
Crea ed esegui la tua app.
Consulta la pagina CHANGELOG
di Cocoapod per conoscere altri problemi noti.
Limitazioni
L'SDK ARCore per iOS non supporta la chiamata al metodo ARKit setWorldOrigin(relativeTransform:)
.
Considerazioni sulle prestazioni
La memoria utilizzata aumenta quando abiliti l'API ARCore. Sono previsti l'utilizzo della batteria da parte del dispositivo potrebbe aumentare a causa di un maggiore utilizzo della rete e della CPU.