El SDK de ARCore para iOS interactúa con ARKit para proporcionar Cloud Anchor de máximo rendimiento, lo que te permite compartir anclas entre dispositivos iOS y Android en la mismo entorno.
Aprende a usar la API de Cloud Anchor de ARCore o el servicio de Cloud Anchor de ARCore en tus propias apps.
Requisitos previos
- Xcode versión 13.0 o posterior
- Cocoapods 1.4.0 o una versión posterior si usas Cocoapods
- Un dispositivo Apple compatible con ARKit que ejecute iOS 12.0 o versiones posteriores (se requiere un objetivo de implementación de iOS 12.0 o versiones posteriores)
Si es la primera vez que usas los anclas de Cloud, haz lo siguiente:
Asegúrate de comprender el proceso que se usa para alojar y resolver un problema Fijo.
Lee la guía de inicio rápido para conocer los requisitos del sistema. instalación y configuración.
Consulta una de las muestras de Cloud Anchors.
Habilita Cloud Anchors en tu app
Para usar la API de Cloud Anchors, debes crear una
GARSessionConfiguration
y establecer la propiedad cloudAnchorMode
para él, como se describe en
Configura una sesión de ARCore en iOS. Usa setConfiguration:error: (GARSession)
para establecer la configuración.
También debes habilitar la API de ARCore para tu aplicación.
Aloja y resuelve anclas
Puedes alojar y resolver las anclas de nube con la API de Cloud Anchor de ARCore. La API incluye métodos de devolución de llamada para operaciones completadas, así como objetos Future que se pueden consultar.
Aloja un ancla
Alojar un ARAnchor
coloca el ancla en un sistema de coordenadas común para cualquier
espacio físico.
Una solicitud de host envía datos visuales a un servidor de Google, que asigna la posición de ARAnchor
en un sistema de coordenadas que representa el espacio físico actual. R
si la solicitud de host correcta muestra un nuevo ID de Cloud Anchor, que puede compartirse y
que más adelante se usarán para resolver el ancla.
- (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];
}
Resuelve un ancla
Resolver un ARAnchor
permite usar dispositivos iOS y Android en un espacio físico determinado
para agregar anclas alojadas con anterioridad a escenas nuevas.
Una solicitud de resolución envía un ID de ancla de la nube a un servidor de Google junto con datos visuales del fotograma actual. El servidor intentará hacer coincidir estos datos visuales con imágenes de dónde se asignan los Cloud Anchors alojados en la actualidad. Cuándo si la resolución es exitosa, se agrega una nueva ancla a la sesión y se muestra.
- (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;
}
}
}
Patrón de sondeo opcional GARSession
Si usas Metal o necesitas una opción de sondeo, y tu app se ejecuta a un mínimo de 30 fps, usa el siguiente patrón para pasar ARFrame
a GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Cuotas de la API
La API de ARCore tiene las siguientes cuotas para el ancho de banda de solicitudes:
Tipo de cuota | Máximo | Duración | Se aplica a |
---|---|---|---|
Cantidad de anclas | Ilimitado | N/A | Proyecto |
Solicitudes de host de ancla | 30 | minuto | Dirección IP y proyecto |
Cómo fijar solicitudes de resolución | 300 | minuto | Dirección IP y proyecto |
Problemas conocidos y soluciones
Hay algunos problemas conocidos cuando se trabaja con el SDK de ARCore para iOS.
La configuración predeterminada del esquema causa fallas intermitentes de la app
La configuración de los esquemas de los esquemas de captura de marco de GPU y validación de la API de Metal está habilitada por de forma predeterminada, lo que a veces puede hacer que la app falle en el SDK.
Cómo diagnosticar una falla de la app
Cuando sospeches que se produjo una falla, echa un vistazo al seguimiento de pila.
Si ves MTLDebugComputeCommandEncoder
en el seguimiento de pila, es probable que se deba a la configuración predeterminada del esquema.
Solución alternativa
Ve a Product > Scheme > Edit Scheme….
Abre la pestaña Run.
Haz clic en Options para ver la configuración actual.
Asegúrate de que GPU Frame Capture y Metal API Validation estén inhabilitados.
Compila y ejecuta tu app.
Consulta CHANGELOG
de Cocoapods para obtener más problemas conocidos.
Limitaciones
El SDK de ARCore para iOS no admite la llamada al método setWorldOrigin(relativeTransform:)
de ARKit.
Consideraciones de rendimiento
El uso de memoria aumenta cuando habilitas la API de ARCore. Es posible que el uso de batería del dispositivo aumente debido al mayor uso de red y CPU.