คู่มือนักพัฒนาซอฟต์แวร์ Cloud Anchors สำหรับ iOS

ARCore SDK สําหรับ iOS จะอินเทอร์เฟซกับ ARKit เพื่อมอบความสามารถของหมุดบนระบบคลาวด์ ซึ่งช่วยให้คุณแชร์หมุดระหว่างอุปกรณ์ iOS และ Android ในสภาพแวดล้อมเดียวกันได้

ดูวิธีใช้ ARCore Cloud Anchor API หรือบริการ ARCore Cloud Anchor ในแอปของคุณเอง

ข้อกำหนดเบื้องต้น

  • Xcode เวอร์ชัน 13.0 ขึ้นไป
  • CocoaPods 1.4.0 ขึ้นไปหากใช้ CocoaPods
  • อุปกรณ์ Apple ที่ใช้ ARKit ได้ซึ่งใช้ iOS 12.0 ขึ้นไป (ต้องใช้เป้าหมายการติดตั้งใช้งาน iOS 12.0 ขึ้นไป)

หากคุณเพิ่งเริ่มใช้ Cloud Anchor ให้ทำดังนี้

เปิดใช้ Cloud Anchor ในแอป

หากต้องการใช้ Cloud Anchors API คุณต้องสร้าง GARSessionConfiguration และตั้งค่าพร็อพเพอร์ตี้ cloudAnchorMode สำหรับรายการดังกล่าว ตามที่อธิบายไว้ใน กำหนดค่าเซสชัน ARCore ใน iOS ใช้ setConfiguration:error: (GARSession) เพื่อกำหนดค่าการกำหนดค่า

คุณต้องเปิดใช้ ARCore API สำหรับแอปพลิเคชันด้วย

โฮสต์และแก้ไข Anchor

คุณสามารถโฮสต์และแก้ไขหมุดบนระบบคลาวด์ด้วย ARCore Cloud Anchor API API นี้ประกอบด้วยเมธอด Callback สําหรับการดำเนินการที่เสร็จสมบูรณ์ รวมถึงออบเจ็กต์ Future ที่ทำการโพลได้

โฮสต์ Anchor

การโฮสต์ ARAnchor จะวางสมอไว้ในระบบพิกัดร่วมสำหรับ พื้นที่ทางกายภาพ

คำขอของโฮสต์จะส่งข้อมูลภาพไปยังเซิร์ฟเวอร์ของ Google ซึ่งจะแมปตำแหน่งของ ARAnchor ในระบบพิกัดที่แสดงถึงพื้นที่ทางกายภาพปัจจุบัน คำขอโฮสต์ที่ดำเนินการสำเร็จจะแสดงรหัส Cloud Anchor ใหม่ ซึ่งสามารถแชร์และใช้เพื่อแก้ไข Anchor ในภายหลังได้

- (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];
}

แก้ปัญหาเกี่ยวกับหมุด

การแก้ไข ARAnchor จะทำให้อุปกรณ์ Android และ iOS เข้าถึงพื้นที่ทางกายภาพที่กำหนดได้ เพื่อเพิ่ม Anchor ที่โฮสต์ก่อนหน้านี้ ไปยังฉากใหม่

คำขอแก้ไขจะส่งรหัสหมุดเมฆพร้อมกับข้อมูลภาพจากเฟรมปัจจุบันไปยังเซิร์ฟเวอร์ของ Google เซิร์ฟเวอร์จะพยายามจับคู่ข้อมูลภาพนี้ ด้วยภาพของตำแหน่งที่มีการทำแผนที่ Cloud Anchor ที่โฮสต์อยู่ในปัจจุบัน เมื่อแก้ไขสำเร็จ ระบบจะเพิ่มหมุดใหม่ลงในเซสชันและแสดงผล

- (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;
    }
  }
}

รูปแบบแบบสำรวจ GARSession ที่ไม่บังคับ

หากคุณใช้ Metal หรือต้องการตัวเลือกการโหวต และแอปของคุณทำงานที่ 30 fps เป็นอย่างน้อย ให้ใช้รูปแบบต่อไปนี้เพื่อส่ง ARFrame ไปยัง GARSession

-(void)myOwnPersonalUpdateMethod {
  ARFrame *arFrame = arSession.currentFrame;
  NSError *error = nil;
  GARFrame *garFrame = [garSession update:arFrame error:&error];
  // your update code here
}

โควต้า API

ARCore API มีโควต้าแบนด์วิดท์คำขอดังต่อไปนี้

ประเภทโควต้า สูงสุด ระยะเวลา ใช้กับ
จํานวนหมุดยึด ไม่จำกัด ไม่มี โปรเจ็กต์
คำขอสำหรับโฮสต์ Anchor 30 นาที ที่อยู่ IP และโปรเจ็กต์
คำขอ Anchor แก้ปัญหา 300 นาที ที่อยู่ IP และโปรเจ็กต์

ปัญหาที่ทราบและวิธีแก้ปัญหาเบื้องต้น

มีปัญหาที่ทราบอยู่ 2-3 ข้อเมื่อใช้ ARCore SDK สําหรับ iOS

การตั้งค่ารูปแบบเริ่มต้นทําให้แอปขัดข้องเป็นพักๆ

เปิดใช้การตั้งค่ารูปแบบ GPU Frame Capture และการตรวจสอบ API ของโลหะ ค่าเริ่มต้น ซึ่งบางครั้งอาจทำให้แอปขัดข้องภายใน SDK

วิเคราะห์ข้อขัดข้องของแอป

เมื่อใดก็ตามที่คุณสงสัยว่าเกิดข้อขัดข้อง ให้ตรวจสอบสแต็กเทรซ หากเห็น MTLDebugComputeCommandEncoder ในสแต็กเทรซ แสดงว่าอาจเป็นเพราะ เป็นการตั้งค่าชุดรูปแบบเริ่มต้น

วิธีแก้ปัญหา

  1. ไปที่ Product > Scheme > Edit Scheme…

  2. เปิดแท็บ Run

  3. คลิก Options เพื่อดูการตั้งค่าปัจจุบัน

  4. ตรวจสอบว่าปิดใช้ทั้ง GPU Frame Capture และ Metal API Validation แล้ว

  5. สร้างและเรียกใช้แอป

ดูปัญหาที่ทราบเพิ่มเติมของ Cocoapods CHANGELOG

ข้อจำกัด

ARCore SDK สําหรับ iOS ไม่รองรับการเรียกใช้เมธอด ARKit setWorldOrigin(relativeTransform:)

ข้อพิจารณาด้านประสิทธิภาพ

การใช้งานหน่วยความจำจะเพิ่มขึ้นเมื่อคุณเปิดใช้ ARCore API คาดหวังว่า การใช้งานแบตเตอรี่ของอุปกรณ์จะเพิ่มขึ้นเนื่องจากการใช้งานเครือข่ายและการใช้งาน CPU มากขึ้น

ขั้นตอนถัดไป