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

iOS के लिए ARCore SDK टूल, Cloud Anchor की सुविधाएं देने के लिए ARKit के साथ इंटरफ़ेस करता है. इससे, एक ही एनवायरमेंट में 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 Anchors का इस्तेमाल किया है, तो:

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

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

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

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

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

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

ARAnchor को होस्ट करने से, किसी दिए गए हिस्से के लिए ऐंकर को एक समान निर्देशांक सिस्टम में रखा जाता है जगह.

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

- (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 Anchors मैप किए गए हैं. जब रिज़ॉल्व हो जाता है, तो सेशन में एक नया ऐंकर जोड़ा जाता है और उसे दिखाया जाता है.

- (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 एफ़पीएस (फ़्रेम प्रति सेकंड) हो, तो ARFrames को GARSession:

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

एपीआई कोटा

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

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

पहले से मालूम समस्याएं और समाधान

iOS के लिए ARCore SDK टूल का इस्तेमाल करते समय, कुछ समस्याओं का पता चल सकता है.

डिफ़ॉल्ट स्कीम सेटिंग की वजह से ऐप्लिकेशन क्रैश होता है

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

ऐप्लिकेशन के क्रैश होने की वजह का पता लगाना

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

अगले चरण