Сапраўдныя стрэльбы як кантролеры: як атрымаць усё ў 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 на Raspberry Pi
  • Абнавіце версію Pi "Node.js"
  • Усталюйце ў праект бібліятэку "node-hid" для атрымання канкрэтных інструкцый
  • У udev дадайце ў гэты радок файл з імем "60-HTC-Vive-perms.rules"
KERNEL == "hidraw *", СУБСІСТЭМА == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Патэнцыйная праблема заключаецца ў тым, што node-hid выкарыстоўвае няправільнае значэнне індэкса. У гэтым выпадку індэкс выкарыстоўваецца для ідэнтыфікацыі інтэрфейсу альбо для адпраўкі справаздачы. Вось што-небудзь, каб азнаёміцца ​​з запытамі USB. Вы не можаце паказаць інтэрфейс з "Node-Hid". На шчасце, файл "show-devices.js", які пастаўляецца з бібліятэкай "node-hid" і паказвае ўсе падлучаныя HID-прылады, мае розныя шляхі для кожнага інтэрфейсу.

Выкарыстоўвайце файл show-devices.js, які пастаўляецца з бібліятэкай, якая схавана ў вузле. Вы можаце знайсці шлях для выкарыстання ў сваім кодзе, калі ён выглядае інакш

Калі ў вас ёсць іншыя праблемы са скрыптам, "usbmon" пастаўляецца з Raspbian і дазваляе праглядаць любыя USB-запыты, якія зроблены. Вось карысная спасылка, па якой можна расшыфраваць гэтыя патрабаванні. (Пачынаецца на старонцы 15)

Выснова

Выкарыстоўваць пісталет у якасці кантролера VR было зусім не проста. Вібрацыі ад стрэлу стрэльбы досыць моцныя, каб перашкодзіць здольнасці IMU дакладна адсочваць сябе. Выкарыстоўваючы фільтр нізкіх частот трэкера і ўбудаваны Raspberry Pi, мы змаглі вырашыць гэтую праблему, не ўплываючы на ​​адсочванне і сілу, з якой вібрацыя вібруе.

Дзякуй за чытанне @ cohagan154