Android NDK (C) için Cloud Anchor geliştirici kılavuzu

Cloud Anchors'ı kendi uygulamalarınızda nasıl kullanacağınızı öğrenin.

Ön koşullar

Devam etmeden önce temel AR kavramlarını ve ARCore oturumunu nasıl yapılandıracağınızı anladığınızdan emin olun.

Cloud Anchors'ı kullanmaya yeni başladıysanız sabit noktaların ve Cloud Anchors'ın nasıl çalıştığını anladığınızdan emin olun.

ARCore API'yi etkinleştirme

Cloud Anchors'ı uygulamanızda kullanmadan önce uygulamanızda ARCore API'yi etkinleştirmeniz gerekir.

Oturum yapılandırmasında Cloud Anchor özelliklerini etkinleştirme

Uygulamanızda Cloud Anchors işlevi etkinleştirildikten sonra, ARCore API ile iletişim kurabilmesi için uygulamanızın AR oturumu yapılandırmasında Cloud Anchors özelliklerini etkinleştirin:

// 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);

Cloud Anchor'ı barındırma

Barındırma, ArSession_hostCloudAnchorAsync() çağrısıyla başlar. ARCore, görsel verileri, cihazın duruşunu ve ankraj duruşunu ARCore API'ye yükler. Ardından API, 3D özellik haritası oluşturmak için bu bilgileri işler ve sonuç olarak cihaza sabitleme için benzersiz bir Cloud Anchor kimliği döndürür.

ARCore Cloud Anchor Management API'yi kullanarak barındırılan bir ankrajın ömrünü de uzatabilirsiniz.

Uygulamanız, Cloud Anchor'ı barındırma işlemini tamamlamak için aşağıdaki adımları uygulamalıdır:

  1. ArSession_hostCloudAnchorAsync() numaralı telefonu arayın.
  2. Geri aramayı bekleyin veya işlem tamamlanana kadar gelecek durumunu sürekli olarak kontrol edin.
  3. İşlemin başarılı olup olmadığını belirlemek için sonuç durumunu kontrol edin veya başarısız olursa hata kodunu yorumlayın.
  4. Sonuç Cloud Anchor kimliğini diğer istemcilerle paylaşın ve Cloud Anchor'ı ArSession_resolveCloudAnchorAsync() ile çözmek için kullanın.

Özellik noktalarının eşleme kalitesini kontrol etme

ArFeatureMapQuality, belirli bir kamera pozundan önceki birkaç saniye içinde ARCore tarafından görülen özellik noktalarının kalitesini gösterir. Daha yüksek kaliteli özellikler kullanılarak barındırılan Cloud Anchor'lar genellikle daha doğru şekilde çözülür. Belirli bir kamera pozu için özellik haritası kalitesiyle ilgili bir tahmin almak üzere ArSession_estimateFeatureMapQualityForHosting() öğesini kullanın.

Değer Açıklama
INSUFFICIENT Önceki birkaç saniyedeki duruştan tanımlanan özellik noktalarının kalitesi düşük. Bu durum, ARCore'un Cloud Anchor'ı çözme konusunda daha fazla zorluk yaşayacağını gösterir. Kullanıcıyı, barındırmak istediği Cloud Anchor'ın istenen konumunun farklı açılardan görüntülenebilmesi için cihazı hareket ettirmeye teşvik edin.
SUFFICIENT Önceki birkaç saniye içinde pozdan tanımlanan özellik noktalarının kalitesi, ARCore'un bir Cloud Anchor'ı başarıyla çözmesi için yeterli olabilir. Ancak çözülen pozun doğruluğu muhtemelen azalır. Kullanıcıyı, barındırmak istediği Cloud Anchor'ın istenen konumunun farklı açılardan görüntülenebilmesi için cihazı hareket ettirmeye teşvik edin.
GOOD Önceki birkaç saniye içinde pozdan tanımlanan özellik noktalarının kalitesi, ARCore'un bir Cloud Anchor'ı yüksek doğruluk derecesiyle başarıyla çözmesi için yeterli olabilir.

Daha önce barındırılan bir ankrajı çözme

Barındırılan bir Cloud Anchor'ı çözmek için ArSession_resolveCloudAnchorAsync() numaralı telefonu arayın. ARCore API, kullanıcının ankraja göre konumunu ve yönünü belirlemek için sahnedeki görsel özellikleri ankrajın 3D özellik haritasıyla düzenli olarak karşılaştırır. API, eşleşme bulduğunda barındırılan Cloud Anchor'ın pozunu döndürür.

Sırayla birden fazla Cloud Anchor'ın çözülmesini başlatabilirsiniz. Aynı anda en fazla 40 eşzamanlı Cloud Anchor işlemi bulunabilir.

İşlemi iptal etme veya Cloud Anchor'ı kaldırma

Beklemede olan bir Cloud Anchor işlemini iptal etmek için ArFuture_cancel() numaralı telefonu arayın. İzlemeyi durdurmak ve önceden çözülmüş bir Cloud Anchor'ı unutmak için ArAnchor_detach() numaralı telefonu arayın. Sabit noktaya yapılan referanslar, ArAnchor_release() çağrısı yapılarak ayrı olarak serbest bırakılmalıdır.

Cloud Anchor işleminin sonuç durumunu kontrol etme

Barındırma veya çözümleme işleminin sonuç durumunu (hatalar dahil) kontrol etmek için ArCloudAnchorState'i kullanın.

Değer Açıklama
AR_CLOUD_ANCHOR_STATE_ERROR_CLOUD_ID_NOT_FOUND ARCore API, sağlanan Cloud Anchor kimliğini bulamadığı için çözümleme başarısız oldu.
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_DATASET_PROCESSING_FAILED Sunucu, belirli bir ankrajın veri kümesini başarıyla işleyemediğinden barındırma işlemi başarısız oldu. Cihaz ortamdan daha fazla veri topladıktan sonra tekrar deneyin.
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_SERVICE_UNAVAILABLE ARCore API'ye erişilemedi. Bu bir dizi nedenden kaynaklanabilir. Cihaz uçak modunda olabilir veya internet bağlantısı çalışmıyor olabilir. Sunucuya gönderilen istek zaman aşımına uğramış ve yanıt alınamamış olabilir. Kötü bir ağ bağlantısı, DNS'nin kullanılamaması, güvenlik duvarı sorunları veya cihazın ARCore API'ye bağlanma özelliğini etkileyebilecek başka bir şey olabilir.
AR_CLOUD_ANCHOR_STATE_ERROR_INTERNAL Bu ankraj için barındırma veya çözümleme görevi dahili bir hatayla sonlandırıldı. Uygulama bu hatayı düzeltmeye çalışmamalıdır.
AR_CLOUD_ANCHOR_STATE_ERROR_NOT_AUTHORIZED ARCore API yetkilendirmesiyle ilgili sorunları giderme başlıklı makaleyi inceleyin.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_NEW Sabitleyiciyi çözmek için kullanılan SDK sürümü, sabitleyiciyi barındırmak için kullanılan sürümden daha yeni ve bu sürümle uyumlu olmadığı için Cloud sabitleyici çözülemedi.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_OLD Sabitleyiciyi çözmek için kullanılan SDK sürümü, sabitleyiciyi barındırmak için kullanılan sürümden daha eski ve bu sürümle uyumlu olmadığı için Cloud sabitleyici çözülemedi.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOURCE_EXHAUSTED Uygulama, belirli bir Google Cloud projesine ayrılan istek kotasını tüketmiştir. Google Developers Console'dan projeniz için ARCore API'ye ek kota isteğinde bulunmanız gerekir.
AR_CLOUD_ANCHOR_STATE_SUCCESS Bu ankraj için bir barındırma veya çözümleme görevi başarıyla tamamlandı.

Barındırma ve çözümleme istekleri için API kotaları

ARCore API'de istek bant genişliği için aşağıdaki kotalar geçerlidir:

Kota türü Maksimum Süre Geçerlilik kapsamı:
Sabitleme noktası sayısı sınırsız Yok proje
Sabit barındırma istekleri 30 dakika IP adresi ve proje
Sabit resolve istekleri 300 dakika IP adresi ve proje

İyi bir kullanıcı deneyimi için en iyi uygulamalar

Uygulamanızda iyi bir kullanıcı deneyimi sağlamak için kullanıcılara aşağıdakileri yapmalarını söyleyin:

  • Sabitleme noktası oluşturmayı denemeden önce oturum başladıktan sonra birkaç saniye bekleyin (ör. bir nesne yerleştirerek). Bu sayede izlemenin kararlı hâle gelmesi için biraz zaman tanınır.
  • Sabitlenecek konumu seçerken birbirinden kolayca ayırt edilebilen görsel özelliklere sahip bir alan bulmaya çalışın. En iyi sonuçlar için yansıtıcı yüzeylerden veya boş beyaz duvarlar gibi görsel özellikleri olmayan yüzeylerden kaçının.
  • Kamerayı ilgi alanının üzerinde tutarak cihazı ilgi alanının etrafında hareket ettirin. Bu sırada, yaklaşık olarak aynı fiziksel mesafeyi koruyarak ortamın haritasını farklı açılardan çıkarın. Bu, daha fazla görsel veri yakalamanıza ve çözme işleminin daha güçlü olmasına yardımcı olur.

  • Cloud Anchor'ları barındırırken ve çözerken gerçek ortamda yeterli ışık olduğundan emin olun.

Kullanımdan kaldırma politikası

  • ARCore SDK'sı 1.12.0 veya sonraki sürümler ile oluşturulan uygulamalar, Cloud Anchor API'nin desteğinin sonlandırılması politikası kapsamındadır.
  • ARCore SDK 1.11.0 veya önceki sürümler ile oluşturulan uygulamalar, SDK'nın eski ve desteği sonlandırılmış bir ARCore API'si kullanması nedeniyle Cloud Anchor'ları barındıramaz veya çözemez.

Sırada ne var?