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

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

Ön koşullar

Temel artırılmış gerçeklik kavramlarını anladığınızdan emin olun ve devam etmeden önce ARCore oturumunun nasıl yapılandırılacağı hakkında daha fazla bilgi edinin.

Cloud Anchor'ları kullanmaya yeni başladıysanız çapaların ve Cloud Anchor'larının işleyiş şeklini anladığınızdan emin olun.

ARCore API'yi etkinleştirme

Uygulamanızda Cloud Anchor'ları kullanmadan önce öncelikle uygulamanızda ARCore API'yi etkinleştirmeniz gerekir.

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

Uygulamanızda Cloud Anchors işlevi etkinleştirildikten sonra, uygulamanızın ARCore API ile iletişim kurabilmesi için AR oturumu yapılandırmasında Cloud Anchor ö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'u Barındırın

Barındırma, ArSession_hostCloudAnchorAsync() aramasıyla başlar. ARCore, görsel verileri, cihaz duruşlarını ve sabitleme duruşunu ARCore API'ye yükler. Daha sonra API, bu bilgileri işleyerek bir 3D özellik haritası oluşturur ve sonuçta cihaz bağlantısı için benzersiz bir Cloud Anchor kimliği döndürür.

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

Uygulamanız, bir 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 çağırmayı bekleyin veya işlem tamamlanana kadar Gelecekteki durumu kontrol edin.
  3. Sonuç durumunu kontrol etme kullanın.
  4. Elde edilen Cloud Anchor Kimliği'ni diğer istemcilerle paylaşın ve Cloud Anchor kimliğini kullanarak ArSession_resolveCloudAnchorAsync().

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

ArFeatureMapQuality, belirli bir kamera pozunda ö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ümlenir. Belirli bir kamera pozunun özellik haritası kalitesi hakkında tahmin almak için ArSession_estimateFeatureMapQualityForHosting() simgesini kullanın.

Değer Açıklama
INSUFFICIENT Önceki birkaç saniyede pozda tanımlanan özellik noktalarının kalitesi düşük. Bu durum, ARCore'un Cloud Anchor'ı çözümlemede muhtemelen daha fazla zorluk yaşayacağını gösterir. Barındırmak istediği Cloud Anchor'un istenen konumunun farklı açılardan görülebilmesi için kullanıcıyı cihazı hareket ettirmeye teşvik edin.
SUFFICIENT Önceki birkaç saniyede pozda tanımlanan özellik noktalarının kalitesi, ARCore'un bir Cloud Anchor'u başarıyla çözmesi için muhtemelen yeterli olsa da çözülmüş pozun doğruluğu büyük olasılıkla azalacaktır. Barındırmak istediği Cloud Anchor'un istenen konumunun farklı açılardan görülebilmesi için kullanıcıyı cihazı hareket ettirmeye teşvik edin.
GOOD Önceki birkaç saniyede pozda tanımlanan özellik noktalarının kalitesi, ARCore'un bir Cloud Anchor'u yüksek doğruluk derecesiyle başarıyla çözmesi için muhtemelen yeterli olacaktır.

Önceden barındırılan bir bağlayıcıyı çözümleme

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

Birden fazla Cloud Anchor için sırayla çözümleme başlatabilirsiniz. Aynı anda en fazla 40 eşzamanlı Cloud Anchor işlemi olabilir.

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

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

Cloud Anchor işleminin sonuç durumunu kontrol etme

Hatalar da dahil olmak üzere barındırma veya çözümleme işleminin sonuç durumunu 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ığından çözüm başarısız oldu.
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_DATASET_PROCESSING_FAILED Sunucu, belirtilen bağlantı için veri kümesini başarılı bir şekilde işleyemediğinden barındırma 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şilemiyor. Bu bir dizi nedenden kaynaklanabilir. Cihaz uçak modunda olabilir veya çalışan bir internet bağlantısı olmayabilir. Sunucuya gönderilen istek, yanıt alınmadan zaman aşımına uğramış olabilir. Kötü bir ağ bağlantısı, DNS'nin kullanılamaması, güvenlik duvarı sorunları veya cihazın ARCore API'ye bağlanmasını etkileyebilecek başka herhangi bir şey olabilir.
AR_CLOUD_ANCHOR_STATE_ERROR_INTERNAL Bu bağlayıcı için barındırma veya çözümleme görevi dahili bir hatayla tamamlandı. Uygulamanın bu hatadan kurtulmaya çalışmaması gerekir.
AR_CLOUD_ANCHOR_STATE_ERROR_NOT_AUTHORIZED ARCore API yetkilendirmesi ile ilgili sorunları giderme bölümüne bakın.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_NEW Sabitleyiciyi çözmek için kullanılan SDK sürümü, barındırmak için kullanılan sürümden daha yeni ve bu sürümle uyumsuz olduğundan Cloud Anchor çözülemedi.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_OLD Bağlayıcıyı çözmek için kullanılan SDK sürümü, barındırmak için kullanılan sürümden daha eski ve sürümle uyumsuz olduğundan Cloud Anchor çözülemedi.
AR_CLOUD_ANCHOR_STATE_ERROR_RESOURCE_EXHAUSTED Uygulama, belirtilen Google Cloud projesine ayrılan istek kotasını tüketti. Google Developers Console'dan projenizle ilgili ARCore API'si için ek kota istemeniz gerekir.
AR_CLOUD_ANCHOR_STATE_SUCCESS Bu bağlantı için barındırma veya çözümleme görevi başarıyla tamamlandı.

Ana makine ve çözümleme istekleri için API kotaları

ARCore API, istek bant genişliği için aşağıdaki kotalara sahiptir:

Kota türü Maksimum Süre Geçerlilik kapsamı:
Bağlayıcı sayısı sınırsız Yok proje
Sabit ana makine istekleri 30 dakika IP adresi ve proje
Sabit çözüm 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ılardan aşağıdakileri yapmalarını isteyin:

  • Bir bağlayıcı barındırmaya çalışmadan önce oturum başladıktan sonra birkaç saniye bekleyin (bir nesne vb. yerleştirerek). Bu, izlemenin dengelenmesi için biraz zaman tanır.
  • Sabit reklamın barındırılacağı bir konum seçerken, birbirlerinden kolayca ayırt edilebilen görsel özelliklere sahip bir alan bulmaya çalışın. En iyi sonuçlar için ışığı yansıtan yüzeylerden veya boş beyaz duvarlar gibi görsel özelliklerin eksik olduğu yüzeylerden kaçının.
  • Kamerayı ilgi merkezinde eğitimli şekilde tutun ve cihazı hareket ettirin çevreyi farklı açılardan haritalamak için ilgi alanı merkezidir ve sizinle hemen hemen aynı fiziksel mesafeyi korur. Bu sayede daha fazla görsel veri elde edebilir ve çözüm sürecini daha sağlam hâle getirebilirsiniz.

  • Cloud Anchor'ları barındırıp çözümlerken, gerçek ortamdaki aydınlatmanın yeterli olduğundan emin olun.

Kullanımdan kaldırma politikası

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

Sırada ne var?