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

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

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

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

  • 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 במיוחד עבור האפליקציה שלך.

אירוח ותיקון עוגנים

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

אירוח עוגן

אירוח של ARAnchor מציב את העוגן במערכת קואורדינטות משותפת לכל נתון למרחב הפיזי.

בקשה ממארח שולחת נתונים חזותיים לשרת Google, שממפה אתARAnchor את המיקום במערכת קואורדינטות שמייצגת את המרחב הפיזי הנוכחי. א' בקשת מארח שהועברה בהצלחה מחזירה מזהה Cloud ימי עוגן חדש, שאותו אפשר לשתף ששימשו לזיהוי העוגן מאוחר יותר.

- (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, צריך להשתמש בתבנית הבאה כדי להעביר 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 ו-Metadata 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).

השלבים הבאים