iOS এর জন্য ক্লাউড অ্যাঙ্করস ডেভেলপার গাইড

ক্লাউড অ্যাঙ্কর ক্ষমতা প্রদান করতে ARKit-এর সাথে iOS ইন্টারফেসের জন্য ARCore SDK, আপনাকে একই পরিবেশে iOS এবং Android ডিভাইসের মধ্যে অ্যাঙ্কর শেয়ার করতে দেয়।

আপনার নিজের অ্যাপে ARCore Cloud Anchor API , বা ARCore Cloud Anchor পরিষেবা কীভাবে ব্যবহার করবেন তা শিখুন।

পূর্বশর্ত

  • Xcode সংস্করণ 13.0 বা তার পরে
  • Cocoapods 1.4.0 বা তার পরে যদি Cocoapods ব্যবহার করা হয়
  • একটি ARKit-সামঞ্জস্যপূর্ণ Apple ডিভাইস যেটি iOS 12.0 বা তার পরবর্তী সংস্করণে চলে (iOS 12.0 বা তার পরবর্তী সংস্করণের স্থাপনার লক্ষ্য প্রয়োজন)

আপনি যদি ক্লাউড অ্যাঙ্করগুলিতে নতুন হন:

আপনার অ্যাপে ক্লাউড অ্যাঙ্কর সক্ষম করুন

Cloud Anchors API ব্যবহার করতে, আপনাকে একটি GARSessionConfiguration তৈরি করতে হবে এবং এর জন্য cloudAnchorMode প্রপার্টি সেট করতে হবে, যেমনটি iOS-এ ARCore সেশন কনফিগার করুন -এ বর্ণিত আছে। কনফিগারেশন সেট করতে setConfiguration:error: (GARSession) ব্যবহার করুন।

আপনার অ্যাপ্লিকেশনের জন্য আপনাকে অবশ্যই ARCore API সক্ষম করতে হবে।

নোঙ্গর হোস্ট এবং সমাধান

আপনি ARCore ক্লাউড অ্যাঙ্কর 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
}

API কোটা

ARCore API-তে অনুরোধ ব্যান্ডউইথের জন্য নিম্নলিখিত কোটা রয়েছে:

কোটার ধরন সর্বোচ্চ সময়কাল প্রযোজ্য
অ্যাঙ্কর সংখ্যা আনলিমিটেড N/A প্রকল্প
অ্যাঙ্কর হোস্ট অনুরোধ 30 মিনিট আইপি ঠিকানা এবং প্রকল্প
অ্যাঙ্কর সমাধান অনুরোধ 300 মিনিট আইপি ঠিকানা এবং প্রকল্প

পরিচিত সমস্যা এবং সমাধান

iOS-এর জন্য ARCore SDK-এর সাথে কাজ করার সময় কয়েকটি পরিচিত সমস্যা রয়েছে।

ডিফল্ট স্কিম সেটিংস বিরতিমূলক অ্যাপ ক্র্যাশ ঘটায়

GPU ফ্রেম ক্যাপচার এবং মেটাল API যাচাইকরণ স্কিম সেটিংস ডিফল্টরূপে সক্রিয় থাকে, যা কখনও কখনও 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 চালু করলে মেমরির ব্যবহার বেড়ে যায়। উচ্চ নেটওয়ার্ক ব্যবহার এবং CPU ব্যবহারের কারণে ডিভাইসের ব্যাটারি ব্যবহার বাড়বে বলে আশা করা হচ্ছে।

পরবর্তী পদক্ষেপ