Pakiet ARCore SDK na iOS współpracuje z ARKit, aby udostępniać funkcje kotwicy w chmurze, które umożliwiają udostępnianie kotwic między urządzeniami z iOS i Androidem w tym samym środowisku.
Dowiedz się, jak używać interfejsu ARCore Cloud Anchor API lub usługi ARCore Cloud Anchor w własnych aplikacjach.
Wymagania wstępne
- Xcode w wersji 13.0 lub nowszej
- Cocoapods w wersji 1.4.0 lub nowszej (jeśli używasz Cocoapods).
- Urządzenie Apple z ARKit w wersji 12.0 lub nowszej (wymagany jest cel wdrożenia w wersji iOS 12.0 lub nowszej)
Jeśli dopiero zaczynasz korzystać z Cloud Anchors:
Upewnij się, że rozumiesz proces używany do hostowania i rozwiązywania punktu zakotwiczenia Cloud Anchor.
Przeczytaj podręcznik, aby poznać wymagania systemowe oraz instrukcje konfiguracji i instalacji.
Zapoznaj się z jednym z przykładów Cloud Anchor.
Włączanie Cloud Anchors w aplikacji
Aby korzystać z interfejsu Cloud Anchors, musisz utworzyć GARSessionConfiguration
i ustawić dla niego właściwość cloudAnchorMode
zgodnie z opisem w artykule Konfigurowanie sesji ARCore w iOS. Użyj aplikacji setConfiguration:error: (GARSession)
, aby skonfigurować ustawienia.
Musisz też włączyć w swojej programie interfejs ARCore API.
Hostowanie i rozwiązywanie zakotwiczeń
Możesz hostować i rozwiązywać uchwyty w chmurze za pomocą interfejsu ARCore Cloud Anchor API. Interfejs API zawiera metody wywołania zwrotnego dla zakończonych operacji oraz obiekty Future, które można sprawdzać.
Host an anchor
Hostowanie ARAnchor
umieszcza kotwicę w wspólnym układzie współrzędnych w dowolnej przestrzeni fizycznej.
Żądanie hosta wysyła dane wizualne na serwer Google, który mapuje pozycję ARAnchor
w układzie współrzędnych reprezentującym bieżącą przestrzeń fizyczną. Pomyślna prośba o hostowanie zwraca nowy identyfikator Cloud Anchor, który można udostępnić i użyć do rozwiązania zakotwiczenia w przyszłości.
- (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];
}
Rozwiązywanie problemu z kotwicą
Rozwiązanie problemu ARAnchor
umożliwia urządzeniom z Androidem i iOS w danej przestrzeni fizycznej dodawanie wcześniej hostowanych kotwic do nowych scen.
Żądanie rozwiązania wysyła do serwera Google identyfikator uchwytu w chmurze wraz z danymi wizualnymi z bieżącego klatki. Serwer spróbuje dopasować te dane wizualne do obrazów, w których zmapowane są obecnie hostowane punkty Cloud Anchors. Gdy adres zostanie rozwiązany, nowy kotwnik zostanie dodany do sesji i zwrócony.
- (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;
}
}
}
Opcjonalny GARSession
wzór próbkowania
Jeśli używasz Metalu lub potrzebujesz opcji pollingu, a Twoja aplikacja działa z minimalną częstotliwością 30 FPS, użyj tego wzoru, aby przekazać ARFrame
do GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Limity interfejsu API
Interfejs ARCore API ma te limity przepustowości żądań:
Typ limitu | Maksimum | Czas trwania | Dotyczy: |
---|---|---|---|
Liczba kotwic | Bez ograniczeń | Nie dotyczy | Projekt |
Prośby o zakotwiczenie hosta | 30 | minuta | Adres IP i projekt |
Anuluj resolve | 300 | minuta | Adres IP i projekt |
Znane problemy i obejścia
Podczas pracy z pakietem ARCore SDK na iOS występuje kilka znanych problemów.
Domyślne ustawienia schematu powodują sporadyczne zamykanie się aplikacji
Ustawienia schematu GPU Frame Capture i Metal API Validation są domyślnie włączone, co może czasami powodować awarię aplikacji w pakiecie SDK.
Diagnostyka awarii aplikacji
Jeśli podejrzewasz, że doszło do awarii, sprawdź ślad stosu.
Jeśli w wyświetleniu stosu widzisz MTLDebugComputeCommandEncoder
, prawdopodobnie jest to spowodowane ustawieniami domyślnymi schematu.
Obejście
Jedź do: Product > Scheme > Edit Scheme….
Otwórz kartę Run.
Kliknij Options, aby wyświetlić bieżące ustawienia.
Upewnij się, że funkcje GPU Frame Capture i Metal API Validation są wyłączone.
Kompilowanie i uruchamianie aplikacji.
Aby dowiedzieć się więcej o znanych problemach, zapoznaj się z informacjami na stronie Cocoapods CHANGELOG
.
Ograniczenia
Pakiet ARCore SDK na iOS nie obsługuje wywołania metody ARKit setWorldOrigin(relativeTransform:)
.
Możliwe spowolnienie działania witryny
Włączenie interfejsu ARCore API zwiększa wykorzystanie pamięci. Zużycie baterii urządzenia wzrośnie z powodu większego wykorzystania sieci i procesora.