Panduan developer Cloud Anchors untuk iOS

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:

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

  1. Buka Product > Scheme > Edit Scheme….

  2. Buka tab Run.

  3. Klik Options untuk melihat setelan saat ini.

  4. Pastikan GPU Frame Capture dan Metal API Validation dinonaktifkan.

  5. 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.

Langkah berikutnya