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 Anchor را درک می کنید.
برای اطلاع از الزامات سیستم، راه اندازی و دستورالعمل های نصب ، راه اندازی سریع را بخوانید.
یکی از نمونههای Cloud Anchor را بررسی کنید
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
در ردیابی پشته می بینید، احتمالاً به دلیل تنظیمات طرح پیش فرض است.
راه حل
به Product > Scheme > Edit Scheme… بروید.
تب Run را باز کنید.
برای مشاهده تنظیمات فعلی خود روی Options کلیک کنید.
مطمئن شوید که هم GPU Frame Capture و هم Metal API Validation غیرفعال هستند.
اپلیکیشن خود را بسازید و اجرا کنید.
برای مسائل شناخته شده بیشتر به Cocoapods CHANGELOG
مراجعه کنید.
محدودیت ها
ARCore SDK برای iOS از فراخوانی روش ARKit setWorldOrigin(relativeTransform:)
پشتیبانی نمی کند.
ملاحظات عملکرد
وقتی ARCore API را فعال می کنید، استفاده از حافظه افزایش می یابد. انتظار می رود به دلیل استفاده بیشتر از شبکه و استفاده از CPU، مصرف باتری دستگاه افزایش یابد.