iOS için ARCore SDK'sı, Cloud Anchor'ı sağlamak için ARKit ile arayüz oluşturur özellikleri kullanarak iOS ve Android cihazlar arasında çapaları olmasını sağlar.
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 üzeri
- 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 Anchor'ları kullanmaya yeni başladıysanız:
Bir Cloud hizmetini barındırmak ve çözmek için kullanılan süreci anladığınızdan emin olun. Sabit.
Sistem gereksinimleri için hızlı başlangıç kılavuzunu okuyun. kurulum talimatlarını burada bulabilirsiniz.
Cloud Anchor örneklerinden birine göz atın
Uygulamanızda Cloud Anchor'ları etkinleştirin
Cloud Anchors API'sini kullanmak için öncelikle bir
GARSessionConfiguration
ve cloudAnchorMode
özelliğini şu şekilde ayarlayın:
iOS'te bir ARCore oturumu yapılandırın. Tekliflerinizi otomatikleştirmek ve optimize etmek için
setConfiguration:error: (GARSession)
tıklayın.
ARCore API'yi de etkinleştirmeniz gerekir seçin.
Bağlayıcıları barındırma ve çözme
ARCore Cloud Anchor API ile bulut çapalarını barındırabilir ve çözebilirsiniz. API hem tamamlanan işlemler için geri çağırma yöntemlerini hem de Gelecekteki nesneleri içerir anket yapabilirsiniz.
Bağlayıcı barındırma
ARAnchor
barındırılması, çapa herhangi bir veri için ortak bir koordinat sistemine
fiziksel bir alan.
Bir ana makine isteği, görsel verileri bir Google sunucusuna gönderir ve bu veri, ARAnchor
koordinat sisteminde mevcut fiziksel alanı temsil eden konumdur. CEVAP
başarılı ana makine isteği, paylaşılabilen ve paylaşılabilen yeni bir Cloud Anchor Kimliği döndürür.
daha sonra sabitlemeyi çözümlemek için kullanılı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];
}
Bağlayıcı çözümleme
ARAnchor
çözümlemesi, belirli bir fiziksel alandaki Android ve iOS cihazların kullanılmasına izin verir.
kullanabilirsiniz.
Çözüm isteği, Google sunucusuna görsel verilerle birlikte bir bulut bağlantı kimliği gönderir. yeni bir düğme görürsünüz. Sunucu bu görsel verileri eşleştirmeye çalışır şu anda barındırılan Cloud Anchor'ların nerede eşlendiğine dair görüntülerle birlikte. Zaman çözümleme başarılı olursa oturuma yeni bir çapa eklenir ve geri 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
yoklama kalıbı
Metal kullanıyorsanız veya bir yoklama seçeneğine ihtiyacınız varsa ve uygulamanız
minimum 30 fps'de ARFrame
'leri şuraya aktarmak için aşağıdaki kalıbı kullanın:
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
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 |
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ı, aralıklı uygulama kilitlenmesine neden oluyor
GPU Çerçeve Yakalama ve Metal API Doğrulama şeması ayarları varsayılandır. Bu da bazen uygulamanın SDK içinde kilitlenmesine neden olabilir.
Uygulama kilitlenmelerini teşhis edin
Bir kilitlenme olduğundan şüphelendiğiniz zaman yığın izlemelere göz atın.
Yığın izlemede MTLDebugComputeCommandEncoder
görüyorsanız bunun nedeni büyük olasılıkla
varsayılan şema ayarlarına geri dönelim.
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 bağlantısını tıklayın.
GPU Frame Capture ve Metal API Validation öğelerinin devre dışı bırakıldığından emin olun.
Uygulamanızı derleyip çalıştırın.
Bilinen diğer sorunlar için Cocoapods'a CHANGELOG
göz atın.
Sınırlamalar
iOS için ARCore SDK, ARKit setWorldOrigin(relativeTransform:)
yöntem çağrısını desteklemiyor.
Performansla ilgili konular
ARCore API'yi etkinleştirdiğinizde bellek kullanımı artar. Beklenen 24 saat yüksek ağ kullanımı ve CPU kullanımı nedeniyle cihazın pil kullanımının artmasını sağlayabilir.