O SDK do ARCore para iOS interage com o ARKit para fornecer o Cloud Anchor permitindo que você compartilhe âncoras entre dispositivos iOS e Android na mesmo ambiente.
Saiba como usar a API ARCore Cloud Anchor ou o serviço ARCore Cloud Anchor nos seus apps.
Pré-requisitos
- Xcode versão 13.0 ou posterior
- Cocoapods 1.4.0 ou posterior, se estiver usando Cocoapods
- Um dispositivo Apple compatível com ARKit com iOS 12.0 ou mais recente (destino de implantação do iOS 12.0 ou posterior obrigatório)
Se você não tem experiência com o Cloud Anchors:
Entenda o processo usado para hospedar e resolver um problema Âncora.
Leia o guia de início rápido para saber os requisitos do sistema. configuração e instruções de instalação.
Confira um dos exemplos do Cloud Anchor
Ativar o Cloud Anchors no seu app
Para usar a API Cloud Anchors, você precisa criar uma
GARSessionConfiguration
e defina a propriedade cloudAnchorMode
para ele, conforme descrito em
Configure uma sessão do ARCore no iOS. Usar
setConfiguration:error: (GARSession)
para definir a configuração.
Você também precisa ativar a API ARCore para seu aplicativo.
Hospedar e resolver âncoras
É possível hospedar e resolver âncoras da nuvem com a API ARCore Cloud Anchor. A API inclui métodos de callback para operações concluídas, bem como objetos Future que podem ser consultadas.
Hospedar uma âncora
Hospedar uma ARAnchor
coloca a âncora em um sistema de coordenadas comum para qualquer
espaço físico.
Uma solicitação de host envia dados visuais para um servidor do Google, que mapeia o ARAnchor
posição em um sistema de coordenadas que representa o espaço físico atual. Um
solicitação de host bem-sucedida retorna um novo ID do Cloud Anchor, que pode ser compartilhado e
usada para resolver a âncora mais tarde.
- (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];
}
Resolver uma âncora
Resolver uma ARAnchor
permite que dispositivos Android e iOS em um determinado espaço físico.
para adicionar âncoras hospedadas anteriormente a novas cenas.
Uma solicitação de resolução envia um servidor do Google um ID de âncora na nuvem junto com dados visuais do frame atual. O servidor tentará fazer a correspondência desses dados visuais com as imagens de onde os Cloud Anchors hospedados atualmente estão mapeados. Quando se resolve o problema, uma nova âncora é adicionada à sessão e retornada.
- (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;
}
}
}
Padrão de pesquisa GARSession
opcional
Se você estiver usando o Metal ou precisar de uma opção de pesquisa e seu app for executado em um
mínimo de 30 QPS, use o seguinte padrão para transmitir ARFrame
s ao
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Cotas da API
A API ARCore tem as seguintes cotas para largura de banda de solicitação:
Tipo da cota | Máximo | Duração | Aplicável a |
---|---|---|---|
Número de âncoras | Ilimitado | N/A | Projeto |
Solicitações de âncora host | 30 | minuto | Endereço IP e projeto |
Ancorar solicitações resolve | 300 | minuto | Endereço IP e projeto |
Problemas conhecidos e soluções alternativas
Existem alguns problemas conhecidos ao trabalhar com o SDK do ARCore para iOS.
As configurações do esquema padrão causam falhas intermitentes no app
As configurações do esquema de captura de frames da GPU e de validação da API Metal são ativadas por: padrão, o que às vezes pode fazer com que o app falhe no SDK.
Diagnosticar falha no app
Sempre que você suspeitar que ocorreu uma falha, verifique seu stack trace.
Se houver MTLDebugComputeCommandEncoder
no stack trace, é provável que isso
com as configurações de esquema padrão.
Alternativa
Acesse Product > Scheme > Edit Scheme….
Abra a guia Run.
Clique em Options para ver as configurações atuais.
Confira se GPU Frame Capture e Metal API Validation estão desativados.
Compile e execute o app.
Acesse o CHANGELOG
do Cocoapods para ver outros problemas conhecidos.
Limitações
O SDK do ARCore para iOS não oferece suporte à chamada de método setWorldOrigin(relativeTransform:)
do ARKit.
Considerações sobre desempenho
O uso de memória aumenta quando você ativa a API ARCore. Espere o o uso da bateria do dispositivo aumente devido ao maior uso da rede e da CPU.