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 ANCHORD
อ่านคู่มือเริ่มต้นใช้งานเพื่อดูข้อกำหนดของระบบ การตั้งค่า และวิธีการติดตั้ง
ดูตัวอย่าง 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 ในพื้นที่จริงหนึ่งๆ เพิ่มหมุดที่โฮสต์ไว้ก่อนหน้านี้ไปยังฉากใหม่ได้
คำขอแก้ไขจะส่งรหัสหมุดเมฆพร้อมกับข้อมูลภาพจากเฟรมปัจจุบันไปยังเซิร์ฟเวอร์ของ 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 มีโควต้าแบนด์วิดท์คำขอดังต่อไปนี้
ประเภทโควต้า | สูงสุด | ระยะเวลา | ใช้กับ |
---|---|---|---|
จํานวนหมุดยึด | ไม่จำกัด | ไม่มี | โปรเจ็กต์ |
เพิ่มคำขอโฮสต์ | 30 | นาที | ที่อยู่ IP และโปรเจ็กต์ |
คำขอresolveของ Anchor | 300 | นาที | ที่อยู่ IP และโปรเจ็กต์ |
ปัญหาที่ทราบและวิธีแก้ปัญหาเบื้องต้น
มีปัญหาที่ทราบอยู่ 2-3 ข้อเมื่อใช้ ARCore SDK สําหรับ iOS
การตั้งค่ารูปแบบเริ่มต้นทําให้แอปขัดข้องเป็นพักๆ
การตั้งค่ารูปแบบการจับเฟรม GPU และ Metal API Validation จะเปิดใช้โดยค่าเริ่มต้น ซึ่งบางครั้งอาจทําให้แอปขัดข้องใน SDK
วิเคราะห์ข้อขัดข้องของแอป
เมื่อใดก็ตามที่คุณสงสัยว่าเกิดข้อขัดข้อง ให้ดูสแต็กเทรซ
หากเห็น MTLDebugComputeCommandEncoder
ในสแต็กเทรซ แสดงว่าอาจเกิดจากการตั้งค่ารูปแบบเริ่มต้น
วิธีแก้ปัญหา
ไปที่ Product > Scheme > Edit Scheme…
เปิดแท็บ Run
คลิก Options เพื่อดูการตั้งค่าปัจจุบัน
ตรวจสอบว่าทั้ง GPU Frame Capture และ Metal API Validation ปิดใช้อยู่
สร้างและเรียกใช้แอป
ดูปัญหาที่ทราบเพิ่มเติมของ Cocoapods CHANGELOG
ข้อจำกัด
ARCore SDK สําหรับ iOS ไม่รองรับการเรียกใช้เมธอด ARKit setWorldOrigin(relativeTransform:)
ข้อพิจารณาด้านประสิทธิภาพ
การใช้งานหน่วยความจําจะเพิ่มขึ้นเมื่อคุณเปิดใช้ ARCore API คาดว่าการใช้งานแบตเตอรี่ของอุปกรณ์จะเพิ่มขึ้นเนื่องจากมีการใช้งานเครือข่ายและ CPU มากขึ้น