רובים אמיתיים כבקרים: איך להשיג הכל ב- VR

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

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

האתגר הגדול ביותר שלנו עבור היורה הסוחף בו עזרנו היה לבנות ולהשתמש בכלי ירייה אמיתי ... או לפחות במשהו שנראה והרגיש כמו אחד.

קבל את הבקר

במקור חשבנו שקשה להשיג בקר. הגענו לספקית נשק רך מקומי, Gear of War. הדרישות שלנו היו:

  • רובה רך אוויר שנראה, הרגיש ושקול כמו רובה אמיתי
  • נשק שכאשר יורה הוא מייצר רתיעה מציאותית
  • טריגר ואבטחה מחוברים כדי שנוכל להשתמש בהם לתשומות לסימולציה שלנו

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

הגדרת הבקר

זה המקום בו חווינו את הבעיה העיקרית שלנו, הרטט: הבעיה נגרמה על ידי רתיעה מציאותית של הנשק שלנו. מכיוון ש- Vive Tracker משתמש ב- IMU (יחידות תנועה אינרציאליות) לצורך מעקב בתדירות גבוהה ובמערכת Vive Lighthouse למעקב בתדירות נמוכה יחסית ולתיקון סחיפה. IMUs עובדים על ידי מדידת התאוצה בכל ציר ואז חישוב העקירה מאותה מדידה. כש- IMU רוטט באגרסיביות, למשל ב. אם הם מותקנים על כלי נשק ריאליסטי, הם לא יכולים לעקוב מקרוב. זו הייתה בעיה.

מכיוון שאיננו מומחים ברטט, עשינו כמה ניסיונות לפתור את הבעיה אך התקדמנו מעט. לאחר מכן החלטנו לשלוח פוסט reddit ל- r / Vive. תגובת הקהילה הועילה. תיקנו כמה דברים פשוטים שהתעלמנו מהם, כמו הגשש שהיה גבוה מדי על המסילה. להפתעתנו, HTC יצרה קשר עם הפרויקט וגילתה עניין במה שניסינו לעשות. הייתה להם גרסת בטא של הקושחה Vive Tracker שתוכל לעזור ליצור מסנן נמוך לעבור עבור ה- IMU שהם נתנו לנו.

גרף של קלט רגיל לעומת קלט לאחר שימוש בפילטר נמוך לעבור

ניתן להגדיר את מסנן המעבר הנמוך באמצעות ממשק ה- USB-HID. הצלחנו לשלוח דוחות 0xB3 השולחים מידע בסיסי אודות המכשיר הנמצא בשימוש, כמו גם את תצורת המעבר הנמוך ממקבוק לגשש, ויש לנו את ההגדרות הנכונות כדי להרטיב את התנודות מספיק. השלב הבא היה שליחת הדוח הפונקציונלי, שיאפשר לנו לשלוח שינויים בהגדרות וכן שליטה במכשירי HID מ- Raspberry Pi לגשש, מכיוון שהיינו זקוקים למשהו שיכול להתאים איתו למחסנית האקדח. המשתמש לא יכול היה לראות את החיווט.

מסנן מעביר נמוך

אלה השלבים להגדרת ה- Raspberry Pi עבור פרויקט מסוג זה

  • התקן את Raspberry ב- Raspberry Pi
  • עדכן את גרסת ה- Pi של "Node.js"
  • התקן את ספריית "הצומת הוסתר" בפרויקט שלך לקבלת הוראות ספציפיות
  • ב- udev, הוסף קובץ בשם "60-HTC-Vive-perms.rules" עם שורה זו
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

בעיה פוטנציאלית היא שערך האינדקס השגוי נמצא בשימוש על ידי הצומת. במקרה זה האינדקס משמש לזיהוי הממשק או למשלוח הדוח. הנה משהו להכיר בקשות USB. אינך יכול לציין את הממשק עם "Node-Hid". למרבה המזל, לקובץ "show-devices.js" שהגיע עם הספרייה "הסתיר הצומת" ומציג את כל התקני ה- HID המחוברים היו נתיבים שונים לכל ממשק.

השתמש בקובץ show-devices.js שמגיע עם הספרייה המסתתרת בצומת. אתה יכול למצוא את הנתיב לשימוש בקוד שלך למקרה שהוא נראה אחרת

אם יש לך בעיות אחרות בתסריט, 'usbmon' מגיע עם Raspbian ומאפשר לך להציג את כל בקשות ה- USB שמתבצעות. הנה קישור שימושי שבו תוכלו להשתמש כדי לפענח דרישות אלה. (מתחיל בעמוד 15)

סיכום

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

תודה שקראתם @ cohagan154