ปืนจริงในฐานะผู้ควบคุม: วิธีนำสิ่งใดมาสู่ VR

ฉันเป็น Christopher O’Hagan วิศวกรซอฟต์แวร์ที่ @KainosSoftware และฉันทำงานในแผนกนวัตกรรมประยุกต์ มุ่งเน้นไปที่เทคโนโลยีที่สมจริง บล็อกนี้เกี่ยวกับวิธีที่เราเปลี่ยนปืนไรเฟิลที่ใช้งานได้เกือบสมบูรณ์เป็นคอนโทรลเลอร์เสมือนจริงและวิธีที่เราเอาชนะปัญหาที่มาพร้อมกับมัน

เมื่อเร็ว ๆ นี้เราได้รับการติดต่อจากลูกค้าชาวแคนาดาที่กำลังมองหาความช่วยเหลือในการสร้างนักกีฬาที่สมจริงในฐานะแหล่งท่องเที่ยวสำหรับอาเขตของพวกเขา นี่เป็นส่วนหนึ่งของแนวโน้มที่เพิ่มขึ้นที่เราได้สังเกตเห็นว่าเทคโนโลยีที่ดื่มด่ำเช่น VR ถูกใช้สำหรับธุรกิจบันเทิงในสถานที่เช่นห้องหลบหนีและรถไฟเหาะ ในขณะที่อุปกรณ์และการติดตั้งอาจมีราคาแพงมันสามารถทำงานได้เนื่องจากสภาพแวดล้อมที่ก้าวร้าวสูงและแปลกใหม่ที่นำเสนอโดยธุรกิจเหล่านี้ ตัวอย่างที่ดีของความบันเทิงในสถานที่คือเพนท์บอลเสมือนที่ บริษัท ต่างๆเช่น 'The Void' ประสบความสำเร็จในการทำ

ความท้าทายหลักของเราสำหรับนักกีฬาที่ดื่มด่ำที่เราให้ความช่วยเหลือคือการสร้างและใช้ปืนจริง ... หรืออย่างน้อยสิ่งที่ดูเหมือนและรู้สึกเหมือนเป็นหนึ่ง

รับตัวควบคุม

เดิมเราเชื่อว่าการจัดหาคอนโทรลเลอร์จะทำได้ยาก เราติดต่อผู้จำหน่าย Gear of War ทางอากาศที่นุ่มนวลในท้องที่ ความต้องการของเราคือ:

  • ปืนไรเฟิลจำลองอากาศที่ดูให้ความรู้สึกและน้ำหนักเหมือนปืนจริง
  • ปืนที่เมื่อถูกยิงจะสร้างแรงถีบกลับอย่างสมจริง
  • ทริกเกอร์และความปลอดภัยที่ถูกต่อสายเพื่อให้เราสามารถใช้พวกมันสำหรับอินพุตของการจำลองของเรา

เราคิดว่านี่น่าจะถามมาก แต่ก็แปลกใจกับความจริงที่ว่านี่เป็นเรื่องปกติสำหรับพวกเขา พวกเขาได้ทำอุปกรณ์ประกอบฉากมากมายสำหรับทีวีและภาพยนตร์ดังนั้นจึงได้รับคำขอที่แปลกประหลาด จากนั้นเราใช้ตัวติดตาม Vive ที่ติดตั้งเพื่อติดตามปืนใน VR

การตั้งค่าคอนโทรลเลอร์

นี่คือที่เราพบปัญหาหลักของเราการสั่นสะเทือน: ปัญหาเกิดจากการหดตัวของปืนจริงของเรา เนื่องจาก Vive Tracker ใช้ IMUs (หน่วยการเคลื่อนที่เฉื่อย) สำหรับการติดตามที่ความถี่สูงและระบบ Vive lighthouse สำหรับการติดตามที่ความถี่ต่ำกว่าและการแก้ไขดริฟท์ IMU ทำงานโดยการวัดความเร่งในแต่ละแกนจากนั้นคำนวณการกระจัดจากการวัดนั้น เมื่อ IMU ถูกสั่นสะเทือนอย่างรุนแรงเช่นเมื่อติดตั้งกับอาวุธที่ยิงได้สมจริงพวกเขาจะไม่สามารถติดตามได้อย่างแม่นยำ นี่เป็นปัญหา

เนื่องจากเราไม่ใช่ผู้เชี่ยวชาญด้านการสั่นสะเทือนเราจึงพยายามแก้ไขปัญหา แต่ยังไม่คืบหน้ามากนัก จากนั้นเราตัดสินใจทำการโพสต์ reddit ไปที่ r / Vive การตอบกลับของชุมชนนั้นมีประโยชน์แก้ไขสิ่งง่าย ๆ ที่เราพลาดเช่นตัวติดตามที่อยู่ไกลเกินไป ด้วยความประหลาดใจของเรา HTC ติดต่อเราเกี่ยวกับโครงการที่แสดงความสนใจในสิ่งที่เราพยายามทำ พวกเขามีเฟิร์มแวร์ Vive Tracker รุ่นเบต้าซึ่งสามารถช่วยเหลือตัวกรองความถี่ต่ำสำหรับ IMU ซึ่งพวกเขาให้เรา

กราฟของอินพุตปกติกับอินพุตหลังจากใช้ฟิลเตอร์กรองความถี่ต่ำ

ตัวกรองสัญญาณความถี่ต่ำสามารถกำหนดค่าผ่านอินเทอร์เฟซ USB HID เราสามารถส่งรายงาน '0xB3' ซึ่งส่งข้อมูลพื้นฐานเกี่ยวกับอุปกรณ์ที่ใช้รวมถึงการกำหนดค่า low pass จาก MacBook ไปยังตัวติดตามด้วยการตั้งค่าที่เหมาะสมเพื่อรองรับการสั่นสะเทือนอย่างเพียงพอ ขั้นตอนต่อไปคือการส่งรายงานคุณสมบัติซึ่งช่วยให้เราสามารถสื่อสารการเปลี่ยนแปลงในการตั้งค่ารวมทั้งอุปกรณ์ควบคุม HID ไปยังตัวติดตามจากราสเบอร์รี่ pi ตามที่เราต้องการบางสิ่งที่สามารถใส่เข้าไปในตลับปืนเพื่อให้ผู้ใช้ไม่สามารถ ดูสายไฟ

กรองผ่านต่ำ

เหล่านี้เป็นขั้นตอนในการตั้งค่า Raspberry Pi สำหรับโครงการประเภทนี้

  • ติดตั้งราสเบียนบนราสเบอร์รี่ปี่
  • อัปเดตรุ่น i Node.js ’ของ pi
  • ติดตั้งไลบรารี ‘node-hid’ ลงในโครงการของคุณเพื่อรับคำแนะนำเฉพาะใน pi ดูที่นี่
  • เพิ่มไฟล์ใน udev ชื่อ `60-HTC-Vive-perms.rules` ด้วยบรรทัดนี้
KERNEL == "hidraw *", ระบบย่อย == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

ปัญหาที่คุณสามารถทำได้คือมีการใช้ค่า wIndex ที่ไม่ถูกต้องโดย node-hid ในกรณีนี้ wIndex ใช้เพื่อระบุอินเตอร์เฟสหรือตำแหน่งที่ส่งรายงาน ต่อไปนี้เป็นสิ่งที่จะช่วยให้คุณเข้าใจเรื่องคำขอ USB ‘Node-hid’ ไม่อนุญาตให้คุณระบุอินเทอร์เฟซ โชคดีที่เมื่อฉันมองย้อนกลับไปที่ .j show-devices.js ’ซึ่งมาพร้อมกับ‘ node-hid ’และเอาท์พุทอุปกรณ์ HID ที่เชื่อมต่อทั้งหมดมันมีเส้นทางที่แตกต่างกันสำหรับแต่ละอินเตอร์เฟส

การใช้ show-devices.js ซึ่งมาพร้อมกับไลบรารี node-hid คุณสามารถค้นหาเส้นทางที่จะใช้ในรหัสในกรณีที่มันแตกต่างกัน

หากคุณมีปัญหาอื่น ๆ เกี่ยวกับสคริปต์ ‘usbmon’ จะมาพร้อมกับ Raspbian และให้คุณดูคำขอ usb ทั้งหมดที่กำลังทำ นี่คือลิงค์ที่มีประโยชน์เพื่อช่วยคุณถอดรหัสคำขอเหล่านั้น (เริ่มที่หน้า 15)

ข้อสรุป

การใช้ปืนเป็นตัวควบคุม VR นั้นไม่ง่ายเลย การสั่นสะเทือนของการยิงปืนนั้นแข็งแกร่งพอที่จะขัดขวางความสามารถของ IMU ในการติดตามตัวมันเองอย่างแม่นยำ การใช้คุณสมบัติตัวกรองความถี่ต่ำของตัวติดตามและตัวราสเบอร์รี่ปี่บนกระดานเราสามารถเอาชนะปัญหานี้ได้โดยไม่ต้องติดตามหรือบังคับให้ปืนสั่นสะเทือน

ขอบคุณที่อ่าน
@ cohagan154