iOS için ARCore SDK'sı, Cloud Anchor özelliklerini sağlamak için ARKit ile arayüz oluşturur. Böylece, aynı ortamdaki iOS ve Android cihazlar arasında ankrajları paylaşabilirsiniz.
ARCore Cloud Anchor API veya ARCore Cloud Anchor hizmetini kendi uygulamalarınızda nasıl kullanacağınızı öğrenin.
Ön koşullar
- Xcode 13.0 veya sonraki sürümler
- CocoaPods kullanıyorsanız CocoaPods 1.4.0 veya sonraki sürümler
- iOS 12.0 veya sonraki sürümleri çalıştıran ARKit uyumlu bir Apple cihaz (iOS 12.0 veya sonraki sürümlerin dağıtım hedefi gereklidir)
Cloud Anchors'ı kullanmaya yeni başladıysanız:
Cloud Anchor'ı barındırmak ve çözmek için kullanılan süreci anladığınızdan emin olun.
Sistem gereksinimleri, kurulum ve yükleme talimatları için hızlı başlangıç bölümünü okuyun.
Cloud Anchor örneklerinden birine göz atın.
Uygulamanızda Cloud Anchors'ı etkinleştirme
Cloud Anchors API'yi kullanmak için GARSessionConfiguration
oluşturmanız ve iOS'te ARCore oturumu yapılandırma bölümünde açıklandığı gibi cloudAnchorMode
mülkünü ayarlamanız gerekir. Yapılandırmayı ayarlamak için setConfiguration:error: (GARSession)
simgesini kullanın.
Ayrıca uygulamanız için ARCore API'yi de etkinleştirmeniz gerekir.
Sabit reklamları barındırma ve çözümleme
ARCore Cloud Anchor API ile bulut ankrajları barındırabilir ve çözebilirsiniz. API, tamamlanmış işlemler için geri çağırma yöntemlerinin yanı sıra ankete tabi tutulabilen Future nesneleri içerir.
Bağlayıcı barındırma
ARAnchor
barındırmak, ankrajı belirli bir fiziksel alan için ortak bir koordinat sistemine yerleştirir.
Barındırma isteği, bir Google sunucusuna görsel veriler gönderir. Bu veriler, ARAnchor
'nin mevcut fiziksel alanı temsil eden bir koordinat sisteminde konumunu eşler. Başarılı bir barındırma isteği, paylaşılabilen ve daha sonra ankrajı çözmek için kullanılabilen yeni bir Cloud Anchor kimliği döndürür.
- (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];
}
Sabitleme noktasını çözümleme
Bir ARAnchor
'ü çözmek, belirli bir fiziksel alandaki Android ve iOS cihazların daha önce barındırılan ankrajları yeni sahnelere eklemesine olanak tanır.
Çözüm isteği, mevcut çerçevedeki görsel verilerle birlikte bir Google sunucusuna bulut ankraj kimliği gönderir. Sunucu, bu görsel verileri şu anda barındırılan Cloud Anchor'ların eşlendiği görüntülerle eşleştirmeye çalışır. Çözüm başarılı olduğunda oturuma yeni bir ankraj eklenir ve döndürülür.
- (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;
}
}
}
İsteğe bağlı GARSession
anket kalıbı
Metal kullanıyorsanız veya bir anket seçeneğine ihtiyacınız varsa ve uygulamanız en az 30 fps hızında çalışıyorsa ARFrame
'leri GARSession
'a iletmek için aşağıdaki kalıbı kullanın:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
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 |
Bilinen sorunlar ve geçici çözümler
iOS için ARCore SDK'sı ile çalışırken bilinen birkaç sorun vardır.
Varsayılan şema ayarları, uygulamanın aralıklı olarak kilitlenmesine neden oluyor
GPU çerçeve yakalama ve Metal API doğrulama şeması ayarları varsayılan olarak etkindir. Bu durum bazen uygulamanın SDK içinde kilitlenmesine neden olabilir.
Uygulama kilitlenmelerini teşhis etme
Bir kilitlenme olduğundan şüphelendiğinizde yığın izlemenize göz atın.
Yığın izlemede MTLDebugComputeCommandEncoder
görüyorsanız bunun nedeni büyük olasılıkla varsayılan şema ayarlarından kaynaklanmaktadır.
Geçici çözüm
Şuraya git: Product > Scheme > Edit Scheme….
Run sekmesini açın.
Mevcut ayarlarınızı görüntülemek için Options simgesini tıklayın.
Hem GPU Frame Capture hem de Metal API Validation'un devre dışı olduğundan emin olun.
Uygulamanızı derleyip çalıştırın.
Diğer bilinen sorunlar için Cocoapods CHANGELOG
sayfasına bakın.
Sınırlamalar
iOS için ARCore SDK'sı, ARKit setWorldOrigin(relativeTransform:)
yöntem çağrısını desteklemez.
Performansla ilgili konular
ARCore API'yi etkinleştirdiğinizde bellek kullanımı artar. Ağ kullanımı ve CPU kullanımının artması nedeniyle cihazın pil kullanımının artması beklenir.