راهنمای توسعه دهنده Cloud Anchors برای iOS

ARCore SDK برای iOS با ARKit برای ارائه قابلیت‌های Cloud Anchor، به شما امکان می‌دهد لنگرها را بین دستگاه‌های iOS و Android در یک محیط به اشتراک بگذارید.

نحوه استفاده از ARCore Cloud Anchor API یا سرویس ARCore Cloud Anchor را در برنامه‌های خود بیاموزید.

پیش نیازها

  • Xcode نسخه 13.0 یا بالاتر
  • Cocoapods 1.4.0 یا بالاتر در صورت استفاده از Cocoapod
  • یک دستگاه اپل سازگار با ARKit دارای iOS 12.0 یا بالاتر (هدف استقرار iOS 12.0 یا جدیدتر مورد نیاز است)

اگر در Cloud Anchors تازه کار هستید:

Cloud Anchors را در برنامه خود فعال کنید

برای استفاده از Cloud Anchors API، باید یک GARSessionConfiguration ایجاد کنید و ویژگی cloudAnchorMode را برای آن تنظیم کنید، همانطور که در Configure an ARCore session در iOS توضیح داده شده است. از setConfiguration:error: (GARSession) برای تنظیم پیکربندی استفاده کنید.

همچنین باید ARCore API را برای برنامه خود فعال کنید.

میزبان و حل و فصل مجریان

می توانید با ARCore Cloud Anchor API میزبان و حل و فصل لنگرهای ابری باشید. 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 ارسال می‌کند. سرور تلاش خواهد کرد تا این داده‌های بصری را با تصاویر مکان‌هایی که لنگرهای ابری میزبانی فعلی نقشه‌برداری شده‌اند مطابقت دهد. هنگامی که حل با موفقیت انجام شد، یک لنگر جدید به جلسه اضافه شده و برگردانده می شود.

- (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 فریم در ثانیه اجرا می شود، از الگوی زیر برای ارسال 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 دقیقه آدرس IP و پروژه
لنگر حل و فصل درخواست 300 دقیقه آدرس IP و پروژه

مسائل شناخته شده و راه حل

هنگام کار با ARCore SDK برای iOS چند مشکل شناخته شده وجود دارد.

تنظیمات طرح پیش فرض باعث خرابی متناوب برنامه می شود

تنظیمات طرح اعتبار سنجی قاب GPU و Metal API به طور پیش‌فرض فعال هستند که گاهی اوقات باعث از کار افتادن برنامه در SDK می‌شود.

تشخیص خرابی برنامه

هر زمان که شک کردید که خرابی رخ داده است، نگاهی به ردیابی پشته خود بیندازید. اگر MTLDebugComputeCommandEncoder در ردیابی پشته می بینید، احتمالاً به دلیل تنظیمات طرح پیش فرض است.

راه حل

  1. به Product > Scheme > Edit Scheme… بروید.

  2. تب Run را باز کنید.

  3. برای مشاهده تنظیمات فعلی خود روی Options کلیک کنید.

  4. مطمئن شوید که هم GPU Frame Capture و هم Metal API Validation غیرفعال هستند.

  5. اپلیکیشن خود را بسازید و اجرا کنید.

برای مسائل شناخته شده بیشتر به Cocoapods CHANGELOG مراجعه کنید.

محدودیت ها

ARCore SDK برای iOS از فراخوانی روش ARKit setWorldOrigin(relativeTransform:) پشتیبانی نمی کند.

ملاحظات عملکرد

وقتی ARCore API را فعال می کنید، استفاده از حافظه افزایش می یابد. انتظار می رود به دلیل استفاده بیشتر از شبکه و استفاده از CPU، مصرف باتری دستگاه افزایش یابد.

مراحل بعدی