ARCore SDK for iOS berinteraksi dengan ARKit untuk menyediakan kemampuan Cloud Anchor, yang memungkinkan Anda berbagi anchor antara perangkat iOS dan Android di lingkungan yang sama.
Pelajari cara menggunakan ARCore Cloud Anchor API, atau layanan ARCore Cloud Anchor, di aplikasi Anda sendiri.
Prasyarat
- Xcode versi 13.0 atau yang lebih baru
- Cocoapods 1.4.0 atau yang lebih baru jika menggunakan Cocoapods
- Perangkat Apple yang kompatibel dengan ARKit yang menjalankan iOS 12.0 atau yang lebih baru (target deployment iOS 12.0 atau yang lebih baru diperlukan)
Jika Anda baru menggunakan Cloud Anchors:
Pastikan Anda memahami proses yang digunakan untuk menghosting dan me-resolve Cloud Anchor.
Baca panduan memulai untuk mengetahui persyaratan sistem, penyiapan, dan petunjuk penginstalan.
Lihat salah satu contoh Cloud Anchor
Mengaktifkan Cloud Anchors di aplikasi Anda
Untuk menggunakan Cloud Anchors API, Anda harus membuat
GARSessionConfiguration
dan menetapkan properti cloudAnchorMode
untuknya, seperti yang dijelaskan dalam
Mengonfigurasi sesi ARCore di iOS. Gunakan
setConfiguration:error: (GARSession)
untuk menetapkan konfigurasi.
Anda juga harus mengaktifkan ARCore API untuk aplikasi Anda.
Menghosting dan me-resolve anchor
Anda dapat menghosting dan me-resolve anchor cloud dengan ARCore Cloud Anchor API. API ini menyertakan metode callback untuk operasi yang telah selesai, serta objek Future yang dapat di-polling.
Menghosting anchor
Menghosting ARAnchor
akan menempatkan anchor dalam sistem koordinat umum untuk ruang fisik
tertentu.
Permintaan host mengirimkan data visual ke server Google, yang memetakan posisi ARAnchor
dalam sistem koordinat yang mewakili ruang fisik saat ini. Permintaan host yang berhasil akan menampilkan ID Cloud Anchor baru, yang dapat dibagikan dan digunakan untuk me-resolve anchor nanti.
- (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];
}
Me-resolve anchor
Me-resolve ARAnchor
memungkinkan perangkat Android dan iOS di ruang fisik tertentu
untuk menambahkan anchor yang dihosting sebelumnya ke scene baru.
Permintaan penyelesaian mengirimkan ID anchor cloud ke server Google beserta data visual dari frame saat ini. Server akan mencoba mencocokkan data visual ini dengan gambar tempat Cloud Anchors yang saat ini dihosting dipetakan. Jika penyelesaian berhasil, anchor baru akan ditambahkan ke sesi dan ditampilkan.
- (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;
}
}
}
Pola polling GARSession
opsional
Jika Anda menggunakan Metal atau memerlukan opsi polling, dan aplikasi Anda berjalan dengan
minimal 30 fps, gunakan pola berikut untuk meneruskan ARFrame
ke
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Kuota API
ARCore API memiliki kuota berikut untuk bandwidth permintaan:
Jenis kuota | Maksimum | Durasi | Berlaku untuk |
---|---|---|---|
Jumlah anchor | Tidak terbatas | T/A | Project |
Permintaan host Anchor | 30 | menit | Alamat IP dan project |
Permintaan resolve anchor | 300 | menit | Alamat IP dan project |
Masalah umum dan solusinya
Ada beberapa masalah umum saat menggunakan ARCore SDK untuk iOS.
Setelan skema default menyebabkan error aplikasi yang terputus-putus
Setelan skema Validasi Metal API dan Frame Capture GPU diaktifkan secara default, yang terkadang dapat menyebabkan aplikasi error dalam SDK.
Mendiagnosis error aplikasi
Setiap kali Anda menduga bahwa error telah terjadi, lihat pelacakan tumpukan Anda.
Jika Anda melihat MTLDebugComputeCommandEncoder
di pelacakan tumpukan, kemungkinan hal ini disebabkan
oleh setelan skema default.
Solusi
Buka Product > Scheme > Edit Scheme….
Buka tab Run.
Klik Options untuk melihat setelan saat ini.
Pastikan GPU Frame Capture dan Metal API Validation dinonaktifkan.
Build dan jalankan aplikasi Anda.
Lihat CHANGELOG
Cocoapods untuk mengetahui masalah umum lainnya.
Batasan
ARCore SDK untuk iOS tidak mendukung panggilan metode setWorldOrigin(relativeTransform:)
ARKit.
Pertimbangan performa
Penggunaan memori meningkat saat Anda mengaktifkan ARCore API. Penggunaan baterai perangkat akan meningkat karena penggunaan jaringan dan penggunaan CPU yang lebih tinggi.