Interfejsy ARCore SDK na iOS z ARKit do obsługi usługi Cloud Anchor umożliwia udostępnianie zakotwiczonych elementów między urządzeniami z iOS i Androidem w tym samym środowisku.
Dowiedz się, jak używać ARCore Cloud Anchor API lub ARCore Cloud Anchor we 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 zgodne z ARKit z systemem iOS 12.0 lub nowszym (wymagany jest system operacyjny iOS 12.0 lub nowszy)
Jeśli dopiero zaczynasz korzystać z Cloud Anchors:
Upewnij się, że wiesz, na czym polega proces hostowania i rozwiązywania problemów z Google Cloud. Reklama zakotwiczona.
Zapoznaj się z podręcznikiem, 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
setConfiguration:error: (GARSession)
aby ustawić konfigurację.
Musisz też włączyć w swojej programie interfejs ARCore API.
Hostowanie i rozwiązywanie reklam zakotwiczonych
Możesz hostować i rozwiązywać kotwice w chmurze za pomocą interfejsu ARCore Cloud Anchor API. Interfejs API obejmuje metody wywołań zwrotnych dla zakończonych operacji oraz obiekty przyszłe które mogą być ankietowane.
Hostowanie kotwicy
Hostowanie ARAnchor
umieszcza kotwicę w wspólnym układzie współrzędnych w dowolnej przestrzeni fizycznej.
Żądanie hosta wysyła dane wizualne do serwera Google, który mapuje interfejs ARAnchor
położenie w układzie współrzędnych, który reprezentuje 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 kotwicy
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 Anchor. 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 wzorzec odpytywania GARSession
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 następujące 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 prośby o rozwiązanie | 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.
Ustawienia schematu domyślnego powodują sporadyczną awarię aplikacji
Ustawienia schematu GPU Frame Capture i Metal weryfikacji API są włączone przez co może czasami powodować awarię aplikacji z poziomu pakietu SDK.
Diagnozowanie 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.
Utworzyć i uruchomić aplikację.
Dodatkowe znane problemy znajdziesz w artykule CHANGELOG
Cocoapods.
Ograniczenia
Pakiet ARCore SDK na iOS nie obsługuje wywołania metody ARKit setWorldOrigin(relativeTransform:)
.
Możliwe spowolnienie działania witryny
Wykorzystanie pamięci zwiększy się po włączeniu interfejsu ARCore API. Oczekuj wykorzystanie baterii przez urządzenie wzrośnie z powodu większego wykorzystania sieci i CPU.