iOS के लिए ARCore SDK टूल, Cloud Anchor की सुविधाएं देने के लिए ARKit के साथ इंटरफ़ेस करता है. इससे, एक ही एनवायरमेंट में iOS और Android डिवाइसों के बीच ऐंकर शेयर किए जा सकते हैं.
अपने ऐप्लिकेशन में ARCore Cloud Anchor API या ARCore Cloud Anchor सेवा का इस्तेमाल करने का तरीका जानें.
ज़रूरी शर्तें
- Xcode का 13.0 या इसके बाद का वर्शन
- Cocoapods का इस्तेमाल करने पर, Cocoapods 1.4.0 या इसके बाद का वर्शन
- ARKit के साथ काम करने वाला Apple डिवाइस, जिसमें iOS 12.0 या इसके बाद का वर्शन हो (iOS 12.0 या इसके बाद के वर्शन पर डिप्लॉयमेंट टारगेट होना ज़रूरी है)
अगर आपने Cloud Anchors का इस्तेमाल पहले कभी नहीं किया है, तो:
पक्का करें कि आपने Cloud Anchor को होस्ट करने और उससे जुड़ी समस्या हल करने की प्रोसेस को समझ लिया हो.
सिस्टम की ज़रूरी शर्तों, सेटअप, और इंस्टॉल करने के निर्देशों के लिए, क्विकस्टार्ट पढ़ें.
Cloud Anchor का कोई सैंपल देखें
अपने ऐप्लिकेशन में क्लाउड ऐंकर की सुविधा चालू करना
Cloud Anchors एपीआई का इस्तेमाल करने के लिए, आपको एक
GARSessionConfiguration
बनाना होगा और इसके लिए cloudAnchorMode
प्रॉपर्टी सेट करनी होगी. इसके बारे में ज़्यादा जानने के लिए, iOS में ARCore सेशन कॉन्फ़िगर करना लेख पढ़ें. कॉन्फ़िगरेशन सेट करने के लिए,
setConfiguration:error: (GARSession)
का इस्तेमाल करें.
आपको अपने ऐप्लिकेशन के लिए, ARCore API भी चालू करना होगा.
होस्ट और ऐंकर को हल करना
ARCore Cloud Anchor API की मदद से, क्लाउड ऐंकर होस्ट किए जा सकते हैं और उन्हें रिज़ॉल्व किया जा सकता है. एपीआई में, पूरे हो चुके ऑपरेशन के लिए कॉलबैक तरीके शामिल हैं. साथ ही, ऐसे फ़्यूचर ऑब्जेक्ट भी शामिल हैं जिन्हें पोल किया जा सकता है.
ऐंकर होस्ट करना
ARAnchor
को होस्ट करने पर, किसी भी जगह के लिए ऐंकर को एक सामान्य निर्देशांक सिस्टम में रखा जाता है.
होस्ट का अनुरोध, Google सर्वर पर विज़ुअल डेटा भेजता है. यह डेटा, ARAnchor
की स्थिति को ऐसे निर्देशांक सिस्टम में मैप करता है जो मौजूदा जगह की जानकारी दिखाता है. होस्ट के अनुरोध को स्वीकार करने पर, एक नया Cloud 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 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
पोलिंग पैटर्न (ज़रूरी नहीं)
अगर 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
}
एपीआई कोटा
ARCore API में, अनुरोध बैंडविड्थ के लिए ये कोटा हैं:
कोटा का टाइप | ज़्यादा से ज़्यादा | कुल समय | इस पर लागू होता है |
---|---|---|---|
ऐंकर की संख्या | अनलिमिटेड | लागू नहीं | प्रोजेक्ट |
ऐंकर होस्ट के अनुरोध | 30 | मिनट | आईपी पता और प्रोजेक्ट |
ऐंकर resolve अनुरोध | 300 | मिनट | आईपी पता और प्रोजेक्ट |
पहले से मालूम समस्याएं और उन्हें हल करने के तरीके
iOS के लिए ARCore SDK टूल का इस्तेमाल करते समय, कुछ समस्याएं आ सकती हैं.
डिफ़ॉल्ट स्कीम सेटिंग की वजह से, ऐप्लिकेशन कभी-कभी क्रैश हो जाता है
जीपीयू फ़्रेम कैप्चर और Metal API की पुष्टि करने वाली स्कीम की सेटिंग डिफ़ॉल्ट रूप से चालू होती हैं. इसकी वजह से, कभी-कभी ऐप्लिकेशन, SDK टूल में क्रैश हो सकता है.
ऐप्लिकेशन के क्रैश होने की वजह का पता लगाना
जब भी आपको लगे कि ऐप्लिकेशन क्रैश हो गया है, तो अपने स्टैक ट्रेस को देखें.
अगर आपको स्टैक ट्रेस में MTLDebugComputeCommandEncoder
दिखता है, तो हो सकता है कि यह डिफ़ॉल्ट स्कीम सेटिंग की वजह से हो.
समाधान
Product > Scheme > Edit Scheme… पर जाएं.
Run टैब खोलें.
अपनी मौजूदा सेटिंग देखने के लिए, Options पर क्लिक करें.
पक्का करें कि GPU Frame Capture और Metal API Validation, दोनों बंद हों.
अपना ऐप्लिकेशन बनाएं और चलाएं.
अन्य समस्याओं के बारे में जानने के लिए, Cocoapods CHANGELOG
देखें.
सीमाएं
iOS के लिए ARCore SDK टूल, ARKit setWorldOrigin(relativeTransform:)
मेथड कॉल के साथ काम नहीं करता.
प्रदर्शन संबंधी विचार
ARCore API चालू करने पर, मेमोरी का इस्तेमाल बढ़ जाता है. नेटवर्क के ज़्यादा इस्तेमाल और सीपीयू के इस्तेमाल की वजह से, डिवाइस की बैटरी खपत बढ़ सकती है.