Panduan developer Cloud Anchors untuk iOS

ARCore SDK untuk antarmuka iOS dengan ARKit menyediakan kemampuan Cloud Anchor, sehingga Anda dapat 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 untuk API tersebut, 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 mencakup metode callback untuk operasi yang 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];
}

Menyelesaikan anchor

Dengan menyelesaikan ARAnchor, perangkat Android dan iOS di ruang fisik tertentu dapat menambahkan anchor yang sebelumnya dihosting ke scene baru.

Permintaan penyelesaian mengirimkan ID cloud anchor bersama dengan data visual dari frame saat ini ke server Google. Server akan mencoba mencocokkan data visual ini dengan gambar tempat Cloud Anchors yang saat ini dihosting dipetakan. Saat 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 berjalan 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 GPU Frame Capture dan Metal API Validation diaktifkan secara default, yang terkadang dapat menyebabkan aplikasi mengalami error dalam SDK.

Mendiagnosis error aplikasi

Setiap kali Anda mencurigai adanya error, lihat pelacakan tumpukan Anda. Jika Anda melihat MTLDebugComputeCommandEncoder dalam 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 Anda saat ini.

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

  5. Bangun dan jalankan aplikasi Anda.

Lihat CHANGELOG Cocoapods untuk masalah umum lainnya.

Batasan

ARCore SDK untuk iOS tidak mendukung panggilan metode ARKit setWorldOrigin(relativeTransform:).

Pertimbangan performa

Penggunaan memori akan meningkat saat Anda mengaktifkan ARCore API. Penggunaan baterai perangkat akan meningkat karena penggunaan jaringan dan pemakaian CPU yang lebih tinggi.

Langkah berikutnya