Antarmuka ARCore SDK untuk iOS dengan ARKit untuk menyediakan Cloud Anchor memungkinkan Anda membagikan anchor antara perangkat iOS dan Android 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 Anchor:
Pastikan Anda memahami proses yang digunakan untuk menghosting dan menyelesaikan masalah Anchor.
Baca panduan memulai untuk mengetahui persyaratan sistem, penyiapan, dan petunjuk penginstalan.
Lihat salah satu contoh Cloud Anchor
Mengaktifkan Cloud Anchor di aplikasi Anda
Untuk menggunakan Cloud Anchors API, Anda harus membuat
GARSessionConfiguration
dan menyetel properti cloudAnchorMode
untuknya, seperti yang dijelaskan di
Mengonfigurasi sesi ARCore di iOS. Gunakan
setConfiguration:error: (GARSession)
untuk mengatur 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
menempatkan anchor dalam sistem koordinat umum untuk semua
secara fisik.
Permintaan host mengirimkan data visual ke server Google, yang memetakanARAnchor
posisi 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 bersama dengan data visual ke server Google dari {i>frame <i}yang sedang digunakan. Server akan mencoba mencocokkan data visual ini dengan gambar tempat Cloud Anchors yang saat ini dihosting dipetakan. Kapan penyelesaian berhasil, anchor baru 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 sesekali
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 telah terjadi error, lihat pelacakan tumpukan Anda.
Jika Anda melihat MTLDebugComputeCommandEncoder
dalam stack trace, hal itu mungkin karena
ke 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. Anda akan penggunaan baterai perangkat meningkat karena penggunaan jaringan dan penggunaan CPU yang lebih tinggi.