מדריך למפתחים של Cloud anchors ל-iOS

ה-SDK של ARCore ל-iOS מתחבר ל-ARKit כדי לספק יכולות של Cloud Anchor, ומאפשר לכם לשתף עוגנים בין מכשירים עם iOS ומכשירים עם Android באותה סביבה.

מידע על השימוש ב-ARCore Cloud Anchor API או ב-שירות ARCore Cloud Anchor באפליקציות שלכם.

דרישות מוקדמות

  • Xcode גרסה 13.0 ואילך
  • Cocoapods 1.4.0 ואילך אם משתמשים ב-Cocoapods
  • מכשיר Apple תואם ARKit עם iOS מגרסה 12.0 ואילך (נדרש יעד פריסה עם iOS מגרסה 12.0 ואילך)

אם זו הפעם הראשונה שאתם משתמשים בעוגנים של Cloud:

הפעלת מודעות עוגן בענן באפליקציה

כדי להשתמש ב-API של Cloud עוגנים, צריך ליצור GARSessionConfiguration ומגדירים לו את המאפיין cloudAnchorMode, כפי שמתואר צריך להגדיר סשן ARCore ב-iOS. משתמשים בפקודה setConfiguration:error: (GARSession) כדי להגדיר את ההגדרות.

צריך גם להפעיל את ARCore API באפליקציה.

אירוח ופתרונות של מודעות עוגן

אפשר לארח מודעות עוגן בענן ולפתור אותן באמצעות ה-API של ARCore Cloud היעדים. ה-API כולל שיטות קריאה חוזרת (callbacks) לפעולות שהושלמו, וכן אובייקטים מסוג Future שאפשר לדגום אותם.

אירוח עוגן

אירוח של 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

אם אתם משתמשים במתכת או שיש לכם אפשרות לקלפי והאפליקציה שלכם פועלת ב לפחות 30 FPS, צריך להשתמש בתבנית הבאה כדי להעביר ARFrames אל GARSession:

-(void)myOwnPersonalUpdateMethod {
  ARFrame *arFrame = arSession.currentFrame;
  NSError *error = nil;
  GARFrame *garFrame = [garSession update:arFrame error:&error];
  // your update code here
}

מכסות ל-API

ב-ARCore API מוגדרות המכסות הבאות לרוחב הפס של הבקשות:

סוג המכסה מקסימום משך תחולה
מספר העוגנים ללא הגבלה לא רלוונטי פרויקט
בקשות של מארח עוגן 30 דקה כתובת IP ופרויקט
בקשות לטיפול בעוגן 300 דקה כתובת IP ופרויקט

בעיות ידועות ופתרונות עקיפים

יש כמה בעיות ידועות בעבודה עם ARCore SDK ל-iOS.

הגדרות ברירת המחדל של הסכימה גורמות לקריסה לסירוגין של האפליקציה

ההגדרות של GPU Frame Recording ו-Meta Validation 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 לא תומך בהפעלת method setWorldOrigin(relativeTransform:) של ARKit.

שיקולי ביצועים

השימוש ב-ARCore API גדל כשמשתמשים בזיכרון. יש לצפות ל השימוש בסוללה של המכשיר עולה בגלל שימוש גבוה יותר ברשת וניצול גבוה יותר של המעבד (CPU).

השלבים הבאים