Przewodnik dla programistów Cloud Anchors dla pakietu Android NDK (C)

Dowiedz się, jak używać kotwic w chmurze we własnych aplikacjach.

Wymagania wstępne

Zanim przejdziesz dalej, upewnij się, że znasz podstawowe pojęcia związane z AR i wiesz, jak skonfigurować sesję ARCore.

Jeśli nie masz doświadczenia z kotwicami w chmurze, upewnij się, że wiesz, jak działają kotwice i zakotwiczone w chmurze.

Włącz interfejs ARCore API

Zanim użyjesz w swojej aplikacji kotwicy Cloud, musisz włączyć w niej ARCore API.

Włącz możliwości usługi Cloud Anchor w konfiguracji sesji

Gdy włączysz funkcję kotwicy Cloud w aplikacji, włącz jej funkcje w konfiguracji sesji AR w aplikacji, aby mogły komunikować się z interfejsem ARCore API:

// Create a new ARCore session.
ArSession* session = NULL;
CHECK(ArSession_create(env, context, &session) == AR_SUCCESS);

// Create a session config.
ArConfig* config = NULL;
ArConfig_create(session, &config);
ArSession_getConfig(session, config);

// Enable Cloud Anchor mode.
ArConfig_setCloudAnchorMode(session, config,
                            AR_CLOUD_ANCHOR_MODE_ENABLED);

// Configure the session.
ArSession_configure(session, config);
ArConfig_destroy(config);

Hostowanie kotwicy w chmurze

Hosting rozpoczyna się od wywołania metody ArSession_hostCloudAnchorAsync(). ARCore prześle do interfejsu ARCore API dane wizualne, pozycje urządzeń i pozycję kotwicy. Interfejs API przetwarza te informacje, aby utworzyć mapę funkcji 3D, a ostatecznie zwraca do urządzenia unikalny identyfikator kotwicy w chmurze.

Możesz też przedłużyć czas życia hostowanej kotwicy za pomocą interfejsu ARCore Cloud Anchor Management API.

Aby zakończyć hosting usługi kotwicy w chmurze, aplikacja powinna wykonać te czynności:

  1. Zadzwoń pod numer ArSession_hostCloudAnchorAsync().
  2. Poczekaj na wywołanie zwrotne lub stale sprawdzaj stan przyszły, dopóki się nie zakończy.
  3. Sprawdź stan wyniku, aby określić, czy operacja się powiodła, lub zinterpretuj kod błędu, jeśli się nie uda.
  4. Udostępnij wynik identyfikatora kotwicy Cloud innym klientom i użyj go do rozpoznania kotwicy Cloud za pomocą: ArSession_resolveCloudAnchorAsync().

Sprawdzanie jakości mapowania punktów cech

ArFeatureMapQuality wskazuje jakość punktów cech zarejestrowanych przez ARCore w ciągu ostatnich kilku sekund w danej pozycji kamery. Kotwice w chmurze hostowane z użyciem funkcji wyższej jakości są zwykle dokładniej rozpoznawane. Użyj narzędzia ArSession_estimateFeatureMapQualityForHosting(), aby oszacować jakość mapy obiektów w danej pozycji kamery.

Wartość Opis
INSUFFICIENT Jakość punktów cech zidentyfikowanych na podstawie pozycji w ostatnich kilku sekundach jest niska. Ten stan wskazuje, że ARCore prawdopodobnie będzie mieć większe problemy z rozpoznaniem usługi kotwicy w chmurze. Zachęć użytkownika do przesunięcia urządzenia tak, aby żądana pozycja kotwicy w chmurze, którą chce hostować, była widoczna pod różnymi kątami.
SUFFICIENT Jakość punktów cech zidentyfikowanych w pozycji w ciągu ostatnich kilku sekund jest prawdopodobnie wystarczająca do rozpoznania zakotwiczenia w chmurze przez ARCore, ale dokładność zatwierdzonej pozycji prawdopodobnie się zmniejszy. Zachęć użytkownika do przesunięcia urządzenia tak, aby żądana pozycja kotwicy w chmurze, którą chce hostować, była widoczna pod różnymi kątami.
GOOD Jakość punktów cech zidentyfikowanych w pozycji w ciągu ostatnich kilku sekund wystarczy, aby aplikacja ARCore mogła skutecznie rozpoznać kotwicę w chmurze z dużą dokładnością.

Rozwiązywanie wcześniej hostowanej kotwicy

Wywołaj ArSession_resolveCloudAnchorAsync(), aby znaleźć hostowaną kotwicę Cloud. Interfejs ARCore API okresowo porównuje cechy wizualne ze sceny z mapą funkcji 3D kotwicy, aby określić położenie i orientację użytkownika względem kotwicy. Po znalezieniu dopasowania interfejs API zwraca pozycję hostowanej kotwicy Cloud.

Możesz zainicjować rozstrzygnięcia dla wielu zakotwiczonych w chmurze w sekwencji. W danym momencie może istnieć do 40 równoczesnych operacji w Cloud Anchor.

Anulowanie operacji lub usuwanie kotwicy w chmurze

Wywołaj ArFuture_cancel(), aby anulować oczekującą operację kotwicy Cloud. Wywołaj metodę ArAnchor_detach(), aby zatrzymać śledzenie i zapomnieć już rozwiniętą kotwicę Cloud. Odniesienia do kotwicy muszą być zwolnione oddzielnie, wywołując metodę ArAnchor_release().

Sprawdzanie stanu wyniku operacji zakotwiczonej w chmurze

Użyj parametru ArCloudAnchorState, aby sprawdzić stan wyników operacji hostingu lub rozwiązywania problemów, w tym błędy.

Wartość Opis
AR_CLOUD_ANCHOR_STATE_ERROR_CLOUD_ID_NOT_FOUND Nie udało się rozwiązać problemu, ponieważ interfejs ARCore API nie mógł znaleźć podanego identyfikatora kotwicy w chmurze.
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_DATASET_PROCESSING_FAILED Hostowanie nie powiodło się, ponieważ serwer nie mógł przetworzyć zbioru danych dla danej kotwicy. Spróbuj ponownie, gdy urządzenie zbierze więcej danych ze środowiska.
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_SERVICE_UNAVAILABLE Interfejs ARCore API był nieosiągalny. Możliwych jest kilka przyczyn takiej sytuacji. Urządzenie może być w trybie samolotowym lub nie ma działającego połączenia z internetem. Żądanie wysłane do serwera mogło zostać przekroczony i nie uzyskać odpowiedzi. Może to być złe połączenie sieciowe, niedostępność DNS, problemy z zaporą sieciową lub coś innego, co wpływa na zdolność urządzenia do łączenia się z interfejsem ARCore API.
AR_CLOUD_ANCHOR_STATE_ERROR_INTERNAL Zadanie hostingu lub rozwiązywania problemów z tą kotwicą zostało zakończone z błędem wewnętrznym. Aplikacja nie powinna podejmować prób usunięcia konta po tym błędzie.
AR_CLOUD_ANCHOR_STATE_ERROR_NOT_AUTHORIZED Zobacz Rozwiązywanie problemów z autoryzacją w interfejsie ARCore API.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_NEW Nie udało się ustalić wersji pakietu SDK Cloud, ponieważ wersja pakietu SDK użyta do rozpoznania kotwicy jest nowsza i niezgodna z wersją użytą do jej hostowania.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_OLD Nie udało się ustalić wersji pakietu SDK Cloud, ponieważ wersja pakietu SDK użyta do rozpoznania kotwicy jest starsza i niezgodna z wersją użytą do jej hostowania.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOURCE_EXHAUSTED Aplikacja wyczerpała limit żądań przypisany do danego projektu Google Cloud. Aby zgłosić prośbę o zwiększenie limitu interfejsu ARCore API w projekcie, skorzystaj z Google Developers Console.
AR_CLOUD_ANCHOR_STATE_SUCCESS Udało się wykonać zadanie hostingu lub rozwiązywania problemów tej kotwicy.

Limity interfejsów API dotyczące żądań hostów i rozwiązywania

W interfejsie ARCore API obowiązują następujące limity przepustowości żądań:

Typ limitu Maksimum Czas działania Dotyczy:
Liczba kotwic bez ograniczeń Nie dotyczy projekt
Żądania kotwicy hosta 30 minuta Adres IP i projekt
resolve żądań zakotwiczonych 300 minuta Adres IP i projekt

Sprawdzone metody dbania o wygodę użytkowników

Poproś ich o wykonanie tych czynności, aby zapewnić im dobre wrażenia z aplikacji:

  • Zaczekaj kilka sekund po rozpoczęciu sesji, zanim spróbujesz hostować kotwicę (np. umieszczając obiekt). To zapewni trochę czasu na ustabilizowanie się śledzenia.
  • Wybierając miejsce, w którym ma się wyświetlać kotwica, znajdź obszar z elementami wizualnymi, które łatwo się od siebie odróżnić. Aby uzyskać najlepsze wyniki, unikaj powierzchni odbijających światło i powierzchni pozbawionych elementów wizualnych, np. pustych białych ścian.
  • Kamera powinna być ustawiona w taki sposób, aby znalazła się w centrum zainteresowania, i poruszać urządzenie po całym centrum, aby zmapować środowisko z różnych kątów, zachowując mniej więcej taką samą odległość jak tutaj. Pomoże to rejestrować więcej danych wizualnych i zwiększyć dokładność rozpoznawania.

  • Podczas hostowania i rozmowywania kotwic w chmurze upewnij się, że w rzeczywistym środowisku jest wystarczająco oświetlone.

Zasady wycofywania

  • Aplikacje utworzone przy użyciu pakietu SDK ARCore w wersji 1.12.0 lub nowszej są objęte zasadami wycofywania interfejsu Cloud Anchor API.
  • Aplikacje utworzone przy użyciu pakietu SDK w wersji 1.11.0 lub starszej ARCore nie mogą hostować ani wyświetlać kotwic w chmurze, ponieważ pakiet SDK używa starszego, wycofanego interfejsu ARCore API.

Co dalej