תוכן עניינים:

הצבת אובייקטים של AR בקואורדינטות GPS במציאות מוגברת: 8 שלבים (עם תמונות)
הצבת אובייקטים של AR בקואורדינטות GPS במציאות מוגברת: 8 שלבים (עם תמונות)

וִידֵאוֹ: הצבת אובייקטים של AR בקואורדינטות GPS במציאות מוגברת: 8 שלבים (עם תמונות)

וִידֵאוֹ: הצבת אובייקטים של AR בקואורדינטות GPS במציאות מוגברת: 8 שלבים (עם תמונות)
וִידֵאוֹ: Основные ошибки при возведении перегородок из газобетона #5 2024, יולי
Anonim
הצבת אובייקטים של AR בקואורדינטות GPS במציאות מוגברת
הצבת אובייקטים של AR בקואורדינטות GPS במציאות מוגברת

ההנחיה הזו הולכת על יישום אפליקציה לנייד להצבת אובייקטים של AR בקואורדינטות GPS עם ARkit ו- ARCore באמצעות Unity3D. אני אלווה אותך בהקמת פרויקט שהכנתי באמצעות Mapbox המאפשר לנו לתייג הודעות במיקומי GPS מסוימים ולכתוב אותן למסד נתונים של GameSparks.

כל התוכנות והפרויקטים בהם נשתמש כאן הינם בחינם.

הורד את Unity 3D כאן אם עדיין אין לך את זה:

unity3d.com/

שלב 1: משוכות …

משוכות…
משוכות…

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

למען האמת החפצים מופיעים היכן שהם אמורים להגיע לכ- 50% מהזמן. כך שהתוצאות אינן נהדרות, אך הן הופכות ליותר מדויקות ככל שמתקרבים לאובייקטים.

כך או כך, אני חושב שדרך טובה יותר ל- AR מבוסס GPS בשלב זה תהיה שימוש במפה כמו שעושה פוקימון גו וכאשר אתה מתקרב לאובייקט המצלמה נפתחת ורואים רק את האובייקט הזה מולך. בעתיד הייתי רוצה לעשות הדרכה מלאה על יישום פשוט יותר כזה.

כך או כך השתמשתי בעבר ב- Mapbox ואני יודע שיש להם מחלקת המרה הכוללת פונקציות להמרת קואורדינטות GPS לקואורדינטות של עולם אחדות. חשבתי שאני יכול פשוט להעביר כמה קואורדינטות GPS והם יופיעו איפה שאני רוצה אותם. לא עבד.

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

הבעיה היא שהמצפן בטלפון שלך אף פעם לא מדויק לגמרי.

שלב 2: מצפן טיפשי

מצפן טיפשי
מצפן טיפשי
מצפן טיפשי
מצפן טיפשי

הבעיה העיקרית היא כאשר הצבת חפצים רחוקים מהמצלמה, אם הרעיון של הצפון האמיתי שלך כבוי אפילו כמה מעלות, אובייקטים ממרחק יופיעו רחוק מאוד.

כמעט וויתרתי על המיזם הזה אבל חבר סיפר לי על פרויקט GitHub הזה:

github.com/mapbox/mapbox-ar-unity

זהו ניסיון לעשות AR "בקנה מידה עולמי" ממפהבוקס, שם אובייקטים מעוגנים לקואורדינטות GPS כך שחוויות מציאות רבודה יכולות לעבוד בחוץ למרחקים ארוכים במקום רק בתוך חדר קטן בבית שלך.

הפרויקט שלהם משתמש ב- AR Position deltas ו- GPS Position deltaas כדי לחשב זווית שהיא הקיזוז של מצלמת ה- AR לצפון האמיתי. אז בעצם קח קריאת GPS אחת כשהמשתמש מפעיל את האפליקציה ותן להם ללכת בקו ישר ולקחת קריאת GPS נוספת. ואז עם שתי הנקודות האלה אתה יכול לדעת לאיזה כיוון אותו אדם הלך (בהנחה שהמצלמה שלו מצביעה בכיוון שהוא הולך). הם גילו שזה מדויק יותר מהשימוש במצפן בטלפון.

הנושא הנוסף שהם מנסים לפתור הוא הסחף עם ARkit. המעקב בסדר בתוך חדר קטן, אך כאשר החוץ שלך הולך למרחקים ארוכים אובייקטים של AR בסופו של דבר נסחפים רחוק מהמקום בו הם אמורים להיות.

שלב 3: סוף סוף פתרון

סוף סוף פתרון!
סוף סוף פתרון!

אז פרויקט Mapbox הזה הציע דרך להשיג כיוון פנים אמין ביחס לצפון האמיתי, כך שנותר רק למקם את האובייקטים בעולם.

בסופו של דבר הרחבתי קצת את הדוגמה הזו כדי שאוכל לתייג הודעת טקסט במיקום GPS מסוים ולאחר מכן לכתוב את המידע הזה למסד נתונים של GameSparks. זה מה שאני הולך להראות לך כיצד להשתמש.

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

למה שאני מתכוון ביישור הוא שמכיוון שמאפבוקס משתמשת בדלתות מיקום לחישוב הכותרת, כאשר אתה פותח את האפליקציה לראשונה ועליך לוודא שמזהה מטוס קרקע ולאחר מכן ללכת לזמן מה בקו ישר עד לחישוב יישור נכון.

במובן זה UX היא מכשול נוסף, אך בשיפורים של הפרויקט הם נותנים דוגמה להצבת קוביות מול המשתמש לעבור דרכו כדי להבטיח יישור טוב.

אז עכשיו שאתה יודע את המגבלות של הפרויקט הזה הרשה לי להראות לך כיצד להשתמש בו כדי שחבר'ה יוכלו לשחק. בסופו של דבר תצטרך ליצור חשבון mapbox וחשבון פארקס פארקים ששניהם בחינם. השתמשתי בפארקי משחקים רק כדי שאוכל לשמור קואורדינטות GPS איפשהו כיוון שבמהלך הבדיקה תפעיל מחדש ותבנה מחדש את האפליקציה לעתים קרובות למדי.

כמו כן, זה אמור לעבוד הן עם ARkit והן ב- ARcore, אך יש לי כרגע רק אייפון כך שזה כל מה שיכולתי לבדוק.

שלב 4: מאפשר להפעיל את האפליקציה

מאפשר להפעיל את האפליקציה!
מאפשר להפעיל את האפליקציה!

ראשית, הורד את הפרויקט הזה מ- GitHub:

שמור את הקובץ על שולחן העבודה שלך ופתח אותו ב- Unity.

עבור לקובץ, בנה הגדרות והחלף את הפלטפורמה שלך ל- Android או ל- IOS.

כעת עבור אל Mapbox.com וצור חשבון אם עדיין אין לך חשבון.

תפוס את מפתח ה- API שלך וחזור ליחידות, לחץ על הכרטיסייה Mapbox בחלק העליון ולחץ על הגדר. הדבק שם את מפתח ה- API שלך.

כעת צור חשבון ב- GameSparks.com ולחץ על הלחצן בפינה השמאלית העליונה כדי ליצור אפליקציה חדשה.

תקרא לזה איך שאתה רוצה והעתק את מפתח ה- API ואת סוד האפליקציה שלך. חזור ליחידות ומצא את הכרטיסייה GameSparks בחלק העליון. לחץ על הגדר והדבק גם שם את אישוריך.

שלב 5: הגדר את GameSparks

הגדר את GameSparks
הגדר את GameSparks

עכשיו לפני שהאפליקציה תפעל, עלינו להגדיר את מסד הנתונים שלנו.

GameSparks משתמש ב- noSQL ולכן עלינו ליצור תחילה אוסף ולהוסיף את האירועים בהם האפליקציה שלנו משתמשת בכדי לקרוא, לכתוב ולמחוק מהשרת.

ראשית צור אוסף חדש באתר GameSparks וקרא לזה איך שאתה רוצה.

כעת עלינו ליצור 3 אירועים.

הדבר הראשון שהאפליקציה צריכה לעשות הוא לכתוב אובייקט הודעה למסד הנתונים.

להודעה יש קו אורך, קו אורך ואז טקסט ההודעה.

אז לך למעצב והוסף אירוע חדש. צור את הקוד הקצר "SAVE_GEO_MESSAGE".

שים מה שאתה רוצה בשביל השם והתיאור.

הוסף את הקוד הקצר ל -3 תכונות:

"LAT" "LON"

"טֶקסט"

הגדר כל סוג נתונים למחרוזת והגדר את ערך ברירת המחדל ל- 0. הפוך את סוג צבירת ברירת המחדל של כל אחד מהם ל"שימוש בסקריפט ".

שלב 6: הוסף את אירועי הגמר …

הוסף את אירועי הגמר…
הוסף את אירועי הגמר…

האפליקציה גם צריכה לטעון את כל ההודעות ממאגר הנתונים ולקרוא אותן ל- Unity כאשר האפליקציה מתחילה, כך שנוכל למקם הודעות AR המאוחסנות במסד הנתונים.

צור אירוע נוסף וקרא לו "LOAD_MESSAGE"

לאירוע זה אין צורך בתכונות. שוב שים מה שאתה רוצה עבור השם והתיאור.

עשו את אותו הדבר לאירוע אחר וקראו לו "REMOVE_MESSAGES"

זה אפילו לא צריך שום תכונות.

כעת הדבר האחרון שעלינו לעשות הוא להוסיף קצת "קוד ענן" או קוד בצד השרת שיתקבל כאשר כל אירוע יופעל מהאפליקציה שלנו.

שלב 7: הוסף את קוד הענן

ב- GameSparks עבור אל המגדיר וקוד הענן.

עלינו להוסיף סקריפט לכל אירוע שעשינו זה עתה.

באירוע LOAD_MESSAGE הוסף את הקוד הזה ושמור אותו:

var messageData = Spark.runtimeCollection ("GeoMessage");

סמן var = messageData.find ();

var allMessages = ;

while (cursor.hasNext ()) {

var obj = cursor.next ();

מחק (obj ["_id"]);

allMessages.push (obj);

}

Spark.setScriptData ("all_Messages", allMessages); // החזר את כל הנתונים

באירוע REMOVE_MESSAGES הוסף את הקוד הזה:

var messageData = Spark.runtimeCollection ("GeoMessage");

messageData.remove ({});

לבסוף באירוע SAVE_MESSAGES הוסף את זה:

var geoMessageList = Spark.runtimeCollection ("GeoMessage");

var messageLat = Spark.getData (). LAT;

var messageLon = Spark.getData (). LON;

var messageText = Spark.getData (). TEXT;

var currentMessage = {

"messLat": messageLat,

"messLon": messageLon,

"messText": messageText,

};

geoMessageList.insert (currentMessage);

שלב 8: סיימנו

אנחנו גמרנו!
אנחנו גמרנו!

פרויקט זה משתמש במזהה הייחודי של המכשיר שלך לאימות עם שרת GameSparks, כך שתוכל כעת לחזור ל- Unity וללחוץ על play, ותראה בקונסולה "מכשיר מאומת …"

כעת עבור לקובץ, בנה הגדרות ולחץ על build. אם מעולם לא יצרת אפליקציה עבור Android או IOS, ייתכן שיהיה עליך להקים חשבון פיתוח עם גוגל או אפל.

לאחר שהאפליקציה נמצאת בטלפון שלך, עליך לוודא תחילה ש- ARKit או ARCore מזהים מטוס קרקע. כעת לחץ על כפתור היומן בפינה השמאלית התחתונה. צעד כמה צעדים קדימה ותראה "יישור מחושב" עולה בצבע תכלת. כעת לחצני ממשק המשתמש אמורים להופיע ואם הודעות כלשהן נטענו במסד הנתונים שלך יופיעו בעולם.

כדי לתייג הודעת GPS חדשה של GPS במקום כלשהו, הלכו אל המיקום שתרצו שההודעה תהיה ולחצו על סמל ההודעה בפינה השמאלית העליונה של המסך. הקלד כל הודעה שתרצה ולחץ על כפתור הצמד!

מוּמלָץ: