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

iOS के लिए ARKit के साथ आने वाले ARCore SDK टूल का इस्तेमाल, Cloud Anchor के साथ किया जा सकता है सुविधाओं की मदद से, 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 ऐंकर को मैप किया गया है. टास्क कब शुरू होगा समाधान हो जाता है, तो सेशन में एक नया ऐंकर जोड़ा जाता है और उसे वापस लाया जाता है.

- (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 टूल का इस्तेमाल करते समय, कुछ समस्याओं का पता चल सकता है.

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

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

अगले चरण