ARCore SDK สำหรับอินเทอร์เฟซ iOS ที่ใช้ ARKit ทำให้สามารถใช้ Cloud Anchor แชร์ Anchor ระหว่างอุปกรณ์ 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
อ่านquickstartเพื่อดูข้อกำหนดของระบบ การตั้งค่า และวิธีการติดตั้ง
ดูตัวอย่าง Cloud Anchor
เปิดใช้ Cloud Anchor ในแอปของคุณ
หากต้องการใช้ Cloud Anchors API คุณจะต้องสร้าง GARSessionConfiguration
และตั้งค่าพร็อพเพอร์ตี้ cloudAnchorMode
สำหรับ API ดังกล่าวตามที่อธิบายไว้ในกำหนดค่าเซสชัน ARCore ใน iOS ใช้ setConfiguration:error: (GARSession)
เพื่อกำหนดค่า
คุณต้องเปิดใช้ ARCore API สำหรับแอปพลิเคชันด้วย
โฮสต์และแก้ไขปัญหา Anchor
คุณโฮสต์และแก้ไข Anchor ของระบบคลาวด์ได้ด้วย ARCore Cloud Anchor API API มีวิธีเรียกกลับสำหรับการดำเนินการที่เสร็จสมบูรณ์ รวมถึงออบเจ็กต์ในอนาคตที่สำรวจได้
โฮสต์แท็ก Anchor
การโฮสต์ ARAnchor
จะวาง Anchor ในระบบพิกัดทั่วไปสำหรับพื้นที่ทางกายภาพที่กำหนด
คำขอของโฮสต์จะส่งข้อมูลภาพไปยังเซิร์ฟเวอร์ของ 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];
}
แก้ปัญหาแท็ก Anchor
การแก้ปัญหา ARAnchor
จะทำให้อุปกรณ์ Android และ iOS ในพื้นที่ทางกายภาพหนึ่งๆ เพิ่ม Anchor ที่โฮสต์ก่อนหน้านี้ลงในฉากใหม่ได้
คำขอแก้ไขจะส่งรหัส Cloud Anchor ให้กับเซิร์ฟเวอร์ของ Google พร้อมกับข้อมูลภาพจากเฟรมปัจจุบัน เซิร์ฟเวอร์จะพยายามจับคู่ข้อมูลภาพนี้กับภาพของตำแหน่งที่มีการแมป Cloud Anchor ที่โฮสต์อยู่ในปัจจุบัน เมื่อแก้ไขปัญหาสำเร็จ ระบบจะเพิ่ม 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
s ไปยัง
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 resolve | 300 | นาที | ที่อยู่ IP และโปรเจ็กต์ |
ปัญหาที่ทราบและวิธีแก้ไขเบื้องต้น
มีปัญหาที่ทราบอยู่ 2-3 ข้อเมื่อทำงานกับ ARCore SDK สำหรับ iOS
การตั้งค่าสคีมเริ่มต้นทำให้แอปขัดข้องเป็นพักๆ
การตั้งค่ารูปแบบการตรวจสอบสิทธิ์ API ของ GPU เฟรมและการตรวจสอบโลหะจะเปิดอยู่โดยค่าเริ่มต้น ซึ่งบางครั้งอาจทำให้แอปขัดข้องภายใน 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 มากขึ้น