iOS के लिए Cloud anchors डेवलपर गाइड

ARKit के साथ iOS इंटरफ़ेस के लिए ARCore SDK टूल की मदद से, क्लाउड ऐंकर की सुविधाएं दी जा सकती हैं. इससे, iOS और Android डिवाइसों के बीच, एक ही प्लैटफ़ॉर्म पर ऐंकर शेयर किए जा सकते हैं.

अपने ऐप्लिकेशन में ARCore Cloud anchor API या ARCore Cloud anchor सेवा इस्तेमाल करने का तरीका जानें.

ज़रूरी शर्तें

  • Xcode 13.0 या इसके बाद का वर्शन
  • अगर Cocoapods का इस्तेमाल किया जा रहा है, तो Cocoapods 1.4.0 या उसके बाद के वर्शन
  • iOS 12.0 या इसके बाद के वर्शन पर चलने वाला, ARKit के साथ काम करने वाला Apple डिवाइस (iOS 12.0 या इसके बाद के वर्शन वाला डिप्लॉयमेंट टारगेट ज़रूरी है)

अगर आपने Cloud ऐंकर का इस्तेमाल पहले कभी नहीं किया है, तो:

अपने ऐप्लिकेशन में क्लाउड ऐंकर चालू करें

Cloud anchors API का इस्तेमाल करने के लिए, आपको एक GARSessionConfiguration बनाना होगा और इसके लिए cloudAnchorMode प्रॉपर्टी सेट करनी होगी, जैसा कि iOS में ARCore सेशन कॉन्फ़िगर करें में बताया गया है. कॉन्फ़िगरेशन को सेट करने के लिए, setConfiguration:error: (GARSession) का इस्तेमाल करें.

आपको अपने ऐप्लिकेशन के लिए ARCore API भी चालू करना होगा.

ऐंकर को होस्ट करना और रिज़ॉल्व करना

आप ARCore Cloud anchor API की मदद से क्लाउड ऐंकर होस्ट कर सकते हैं और उन्हें ठीक कर सकते हैं. इस एपीआई में, पूरे किए गए ऑपरेशन के लिए कॉलबैक करने के तरीके और फ़्यूचर ऑब्जेक्ट शामिल होते हैं, जिन्हें पोल कराया जा सकता है.

ऐंकर होस्ट करना

ARAnchor को होस्ट करने से ऐंकर, किसी भी फ़िज़िकल स्पेस के लिए कॉमन कोऑर्डिनेट सिस्टम में चला जाता है.

होस्ट के अनुरोध से, Google के सर्वर को विज़ुअल डेटा भेजा जाता है. यह डेटा, कॉर्डिनेट सिस्टम में ARAnchor की पोज़िशन को मैप करता है, जो मौजूदा फ़िज़िकल स्पेस को दिखाता है. होस्ट करने का अनुरोध पूरा होने पर, नया क्लाउड ऐंकर आईडी दिखाया जाता है. इसे शेयर किया जा सकता है और बाद में ऐंकर को ठीक करने के लिए इस्तेमाल किया जा सकता है.

- (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 सर्वर को मौजूदा फ़्रेम से विज़ुअल डेटा के साथ ही एक क्लाउड ऐंकर आईडी भेजा जाता है. सर्वर इस विज़ुअल डेटा को उस इमेज से मैच करने की कोशिश करेगा जहां हाल ही में होस्ट किए गए क्लाउड ऐंकर मैप किए गए हैं. जब समाधान पूरा हो जाता है, तो सेशन में एक नया ऐंकर जोड़ा जाता है और वापस भेज दिया जाता है.

- (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 पोलिंग पैटर्न ज़रूरी नहीं है

अगर आप मेटल का इस्तेमाल कर रहे हैं या आपको पोलिंग का विकल्प चाहिए और आपका ऐप्लिकेशन कम से कम 30 FPS (फ़्रेम प्रति सेकंड) पर चलता है, तो ARFrame को GARSession पर भेजने के लिए, नीचे दिए गए पैटर्न का इस्तेमाल करें:

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

एपीआई कोटा

अनुरोध बैंडविड्थ के लिए ARCore API के पास ये कोटा हैं:

कोटा टाइप ज़्यादा से ज़्यादा कुल अवधि इस पर लागू होता है
ऐंकर की संख्या अनलिमिटेड लागू नहीं प्रोजेक्ट
ऐंकर होस्ट अनुरोध 30 मिनट आईपी पता और प्रोजेक्ट
ऐंकर अनुरोधों का resolve 300 मिनट आईपी पता और प्रोजेक्ट

ज्ञात समस्याएं और समाधान

iOS के लिए ARCore SDK टूल के साथ काम करते समय, आम तौर पर कुछ समस्याएं आती हैं.

डिफ़ॉल्ट स्कीम सेटिंग की वजह से, बीच-बीच में ऐप्लिकेशन क्रैश होने की सुविधा

जीपीयू फ़्रेम कैप्चर और मेटल एपीआई पुष्टि स्कीम की सेटिंग डिफ़ॉल्ट रूप से चालू होती हैं. इससे कभी-कभी SDK टूल में ऐप्लिकेशन क्रैश हो सकता है.

ऐप्लिकेशन बंद होने की समस्या का पता लगाना

जब भी आपको लगे कि क्रैश हुआ है, तो अपने स्टैक ट्रेस को देखें. अगर आपको स्टैक ट्रेस में MTLDebugComputeCommandEncoder दिखता है, तो हो सकता है कि स्कीम की डिफ़ॉल्ट सेटिंग की वजह से ऐसा हो.

समाधान

  1. Product > Scheme > Edit Scheme… पर जाएं

  2. Run टैब खोलें.

  3. मौजूदा सेटिंग देखने के लिए, Options पर क्लिक करें.

  4. यह पक्का करें कि GPU Frame Capture और Metal API Validation, दोनों बंद हों.

  5. अपना ऐप्लिकेशन बनाएं और चलाएं.

ऐसी अन्य समस्याओं के बारे में जानने के लिए, CocoaPods CHANGELOG पर जाएं जिनके बारे में पहले से जानकारी है.

सीमाएं

iOS के लिए ARCore SDK टूल में, ARKit setWorldOrigin(relativeTransform:) तरीके वाला कॉल काम नहीं करता है.

प्रदर्शन संबंधी विचार

ARCore API चालू करने पर, मेमोरी का इस्तेमाल बढ़ जाता है. नेटवर्क और सीपीयू के ज़्यादा इस्तेमाल की वजह से, डिवाइस की बैटरी खर्च बढ़ सकती है.

अगले चरण