اسلحه های واقعی به عنوان کنترل کننده: چگونه همه چیز را در VR بدست آوریم

من کریستوفر اوهاگان ، مهندس نرم افزار درKainosSoftware هستم و در بخش نوآوری کاربردی کار می کنم. روی فناوریهای همهجانبه تمرکز کنید. این وبلاگ در مورد این است که چگونه اخیراً یک تفنگ کاملاً کاربردی را به یک کنترل کننده واقعیت مجازی تبدیل کرده ایم و چگونه با مشکلات همراه آن کنار آمده ایم.

به تازگی مشتری کانادایی به ما مراجعه کرده است که به دنبال کمک برای ساخت یک تیرانداز واقع گرایانه به عنوان جاذبه بازی های خود است. این بخشی از روند رو به رشدی است که ما شاهد بوده ایم زیرا فناوری های غوطه وری مانند VR برای مشاغل سرگرمی در محل مانند اتاق فرار و زیر بشکهای غلتکی استفاده می شود. تجهیزات و راه اندازی ، گرچه گران است ، اما به دلیل ترافیک زیاد و محیط های جدیدی که این شرکت ها ارائه می دهند ، سودآور هستند. یک مثال خوب برای سرگرمی در محل ، پینت بال مجازی است که توسط شرکت هایی مانند The Void ساخته شده است.

بزرگترین چالش ما برای تیرانداز غوطه وری که به آن کمک کردیم ساخت و استفاده از یک اسلحه گرم واقعی بود ... یا حداقل چیزی که شبیه یک اسلحه بود.

کنترلر را بگیرید

ما در ابتدا فکر می کردیم که تهیه یک کنترل کننده دشوار است. ما با یک منبع محلی سلاح نرم ، Gear of War تماس گرفتیم. نیازهای ما این بود:

  • یک تفنگ نرم هوا که مانند یک تفنگ واقعی به نظر می رسید ، احساس و وزن می کرد
  • سلاحی که در صورت شلیک ، عقب نشینی واقعی ایجاد می کند
  • ماشه و امنیت سیم کشی شده اند تا بتوانیم از آنها برای ورودی های شبیه سازی خود استفاده کنیم

ما فکر می کردیم این سوال زیادی خواهد بود اما از اینکه این مسئله برای آنها طبیعی به نظر می رسید متعجب شدیم. آنها لوازم زیادی برای تلویزیون و فیلم درست کردند ، بنابراین درخواست های عجیب تری داشتند. سپس ما از ردیاب Vive سوار شده برای ردیابی اسلحه در VR استفاده کردیم.

راه اندازی کنترل کننده

اینجاست که ما مشکل اصلی خود یعنی لرزش را تجربه کردیم: این مشکل به دلیل عقب انداختن واقع بینانه سلاح ما ایجاد شد. زیرا Vive Tracker از IMU (واحدهای حرکتی اینرسی) برای ردیابی با فرکانس بالا و سیستم Vive Lighthouse برای ردیابی با فرکانس نسبتاً پایین و تصحیح رانش استفاده می کند. IMU با اندازه گیری شتاب در هر محور و سپس محاسبه تغییر مکان از آن اندازه گیری کار می کند. وقتی IMU ها به صورت تهاجمی لرزش می کنند ، به عنوان مثال ب - اگر آنها بر روی سلاحی واقعاً شلیک شده سوار شوند ، نمی توانند از نزدیک دنبال کنند. این یک مشکل بود

از آنجا که در ارتعاش متخصص نیستیم ، برای حل مشکل تلاش هایی انجام داده ایم اما پیشرفت چندانی نداشته ایم. سپس تصمیم گرفتیم یک پست reddit برای r / Vive ارسال کنیم. پاسخ جامعه مفید بوده است. ما چند مورد ساده را که نادیده گرفته شدیم ، مانند اینکه ردیاب بیش از حد در ریل قرار دارد ، رفع کردیم. در کمال تعجب ، HTC با این پروژه تماس گرفت و به کاری که می خواهیم انجام دهیم علاقه نشان داد. آنها یک نسخه بتا از میان افزار Vive Tracker داشتند که می تواند به ایجاد یک فیلتر کم عبور برای IMU که به ما دادند کمک کند.

نمودار ورودی نرمال در مقابل ورودی پس از استفاده از فیلتر کم عبور

فیلتر کم گذر را می توان از طریق رابط USB-HID پیکربندی کرد. ما قادر به ارسال گزارش های 0xB3 بودیم که اطلاعات اولیه مربوط به دستگاه مورد استفاده و همچنین پیکربندی کم عبور از MacBook را به ردیاب ارسال می کند و دارای تنظیمات صحیح برای لرزش کافی است. گام بعدی ارسال گزارش عملکردی بود که به ما امکان می دهد تا تنظیمات و همچنین کنترل دستگاه های HID را از Raspberry Pi به ردیاب ارسال کنیم زیرا به چیزی نیاز داشتیم که بتواند درون آن قرار گیرد. کاربر نمی تواند سیم کشی را ببیند.

فیلتر پایین گذر

این مراحل راه اندازی Raspberry Pi برای این نوع پروژه ها است

  • تمشک را روی Raspberry Pi نصب کنید
  • نسخه Pi "Node.js" را به روز کنید
  • برای راهنمایی های خاص ، کتابخانه "node-hide" را در پروژه خود نصب کنید
  • در udev ، فایلی با نام "60-HTC-Vive-perms.rules" را با این خط اضافه کنید
KERNEL == "hidraw *" ، SUBSYSTEM == "hidraw" ، ATTRS {idVendor} == "28de" ، ATTRS {idProduct} == "2022" ، TAG + = "uaccess"

یک مشکل بالقوه این است که مقدار شاخص اشتباه توسط node-hide استفاده می شود. در این حالت از ایندکس برای شناسایی رابط کاربری یا ارسال گزارش استفاده می شود. در اینجا چیزی برای آشنایی با درخواستهای USB وجود دارد. نمی توانید رابط کاربری را با "Node-Hid" مشخص کنید. خوشبختانه پرونده "show-devices.js" که همراه با کتابخانه "node-hide" است و تمام دستگاه های HID متصل را نشان می دهد مسیرهای مختلفی برای هر رابط داشت.

از فایل show-devices.js همراه با کتابخانه پنهان شده در گره استفاده کنید. درصورتی که متفاوت به نظر برسد می توانید مسیری را برای استفاده در کد خود پیدا کنید

اگر با اسکریپت مشکلات دیگری دارید ، "usbmon" به همراه Raspbian ارائه می شود و به شما امکان می دهد هرگونه درخواست USB که در حال انجام است را مشاهده کنید. در اینجا یک لینک مفید وجود دارد که می توانید برای رمزگشایی این نیازها استفاده کنید. (شروع در صفحه 15)

نتیجه

استفاده از اسلحه به عنوان کنترل کننده VR به هیچ وجه آسان نبود. ارتعاشات حاصل از شلیک اسلحه به اندازه کافی قوی است که توانایی IMU در ردیابی دقیق خود را مختل می کند. با استفاده از فیلتر کم عبور ردیاب و Raspberry Pi داخلی ، ما توانستیم این مشکل را بدون تأثیر بر ردیابی یا نیرویی که تفنگ به لرزه در می آورد ، حل کنیم.

با تشکر از شما برای خواندن @ cohagan154