Panduan developer Cloud Anchors untuk iOS

Antarmuka ARCore SDK untuk iOS dengan ARKit untuk menyediakan Cloud Anchor memungkinkan Anda membagikan 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 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 menyertakan metode callback untuk operasi yang telah selesai, serta objek Future yang dapat disurvei.

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. J permintaan host yang berhasil akan menampilkan ID Cloud Anchor baru, yang dapat dibagikan dan yang 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 dapat ditempatkan 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 Anchor yang saat ini dihosting akan 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 di minimum 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
Anchor permintaan resolve 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 Frame Capture GPU dan Validasi API Logam diaktifkan oleh default, yang terkadang dapat menyebabkan aplikasi error di 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

  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 Cocoapods CHANGELOG untuk masalah umum lainnya.

Batasan

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

Pertimbangan performa

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

Langkah berikutnya