ნამდვილი იარაღი, როგორც კონტროლერები: როგორ მივიღოთ ყველაფერი VR– ში

მე ვარ კრისტოფერ ო'ჰეგანი, პროგრამული უზრუნველყოფის ინჟინერი @KainosSoftware- ში და ვმუშაობ გამოყენებითი ინოვაციების განყოფილებაში. კონცენტრირება მოახდინე ჩაღრმავებულ ტექნოლოგიებზე. ეს ბლოგი ეხება იმას, თუ როგორ გადავაქციეთ თითქმის სრულად ფუნქციონალური თოფი ვირტუალური რეალობის კონტროლერად და როგორ გავუმკლავდით მასთან დაკავშირებულ პრობლემებს.

ცოტა ხნის წინ კანადელმა მომხმარებელმა მოგვმართა, რომელიც დახმარებას ეძებდა რეალისტური მსროლელის მშენებლობაში, როგორც მათი არკადული მოზიდვა. ეს არის მზარდი ტენდენციის ნაწილი, რომელიც ჩვენ ვნახეთ, რადგან VR– ის მსგავსი ჩაღრმავებული ტექნოლოგიები გამოიყენება გასართობი ბიზნესისთვის, როგორიცაა გაქცევის ოთახები და როლიკებით. აპარატურა და ინსტალაცია, მართალია ძვირია, მომგებიანია, რადგან ამ კომპანიებს აქვთ მაღალი ტრაფიკი და ახალი გარემო. ადგილზე გასართობი კარგი მაგალითია ვირტუალური პეინტბოლი, რომელიც დამზადებულია ისეთი კომპანიების მიერ, როგორიცაა The Void.

ჩვენი ყველაზე დიდი გამოწვევა იმ შთამბეჭდავი შუტერისთვის, რომელსაც ჩვენ ვეხმარებოდით, იყო ნამდვილი ცეცხლსასროლი იარაღის აგება და გამოყენება ... ან თუნდაც ისეთი რამ, რაც მსგავსი იყო და იგრძნობოდა.

მიიღეთ კონტროლერი

ჩვენ თავდაპირველად ვფიქრობდით, რომ კონტროლერის მიღება რთული იყო. ჩვენ მივმართეთ რბილი იარაღის ადგილობრივ მომწოდებელს, Gear of War. ჩვენი მოთხოვნები იყო:

  • ჰაერის რბილი თოფი, რომელიც ნამდვილი თოფივით ჩანდა, იგრძნო და იწონიდა
  • იარაღი, რომელიც გასროლისას წარმოშობს რეალისტურ უკუქცევას
  • ხაზი და დაცვა სადენიანი იყო, რომ შეგვეძლო მათი გამოყენება ჩვენი სიმულაციის შესატანად

ჩვენ ვფიქრობდით, რომ ეს ბევრს ითხოვდა, მაგრამ გაკვირვებულები ვიყავით, რომ ეს მათთვის ნორმალური ჩანდა. მათ უამრავი რეკვიზიტი გააკეთეს ტელევიზორისა და ფილმებისათვის, ამიტომ მათ უცხო მოთხოვნები ჰქონდათ. ამის შემდეგ ჩვენ ვიყენეთ დამონტაჟებული Vive ტრეკერი იარაღის დასაზვერად VR– ში.

კონტროლერის დაყენება

სწორედ აქ განვიცადეთ ჩვენი მთავარი პრობლემა, ვიბრაცია: პრობლემა გამოწვეული იყო ჩვენი იარაღის რეალისტური უკანდახევით. იმის გამო, რომ Vive Tracker იყენებს IMU- ს (ინერციული მოძრაობის ერთეულებს) მაღალ სიხშირეზე თვალყურისდევნებისთვის და Vive Lighthouse სისტემას შედარებით დაბალ სიხშირეზე თვალყურისდევნებისთვის და დრიფტის კორექციისთვის. IMU მუშაობს თითოეულ ღერძზე აჩქარების გაზომვით და ამ გაზომვიდან გადაადგილების გაანგარიშებით. როდესაც IMU აგრესიულად ვიბრაციას ახდენს, მაგ. ბ. თუ ისინი რეალისტურად საცეცხლე იარაღზე არიან დამონტაჟებულნი, მათ ყურადღებით არ შეეძლებათ თვალყურის დევნება. ეს პრობლემა იყო.

ვიბრაციის ექსპერტები რომ არ ვართ, ჩვენ გარკვეულწილად ვცდილობთ პრობლემის მოგვარებას, მაგრამ დიდი პროგრესი არ გვაქვს. შემდეგ ჩვენ გადავწყვიტეთ reddit პოსტის გაგზავნა r / Vive- ზე. საზოგადოების რეაგირება სასარგებლო იყო. ჩვენ დავაფიქსირეთ რამდენიმე მარტივი რამ, რაც ჩვენ თვალყურს არ გვაქცევდა, მაგალითად, ტრეკერი სარკინიგზო ბილიკზე ძალიან შორს იყო. ჩვენდა გასაკვირად, HTC დაუკავშირდა პროექტს და დაინტერესდა იმით, თუ რის გაკეთებას ვცდილობდით. მათ ჰქონდათ Vive Tracker firmware- ის ბეტა ვერსია, რომელიც ხელს შეუწყობდა დაბალი გამშვები ფილტრის შექმნას IMU- სთვის, რომელიც მათ მოგვცეს.

დაბალი შეყვანის ფილტრის გამოყენების შემდეგ ნორმალური შეყვანის დიაგრამა შეყვანის წინააღმდეგ

დაბალი გამავლობის ფილტრის კონფიგურაცია შესაძლებელია USB-HID ინტერფეისის საშუალებით. ჩვენ შევძელით 0xB3 ანგარიშების გაგზავნა, რომლებიც აგზავნის ძირითად ინფორმაციას გამოყენებული მოწყობილობის, აგრეთვე დაბალი გამავლობის კონფიგურაციისთვის MacBook– დან ტრეკერზე და გვაქვს სწორი პარამეტრები ვიბრაციების საკმარისად შესუსტებისთვის. შემდეგი ნაბიჯი იყო ფუნქციური ანგარიშის გაგზავნა, რაც საშუალებას მოგვცემს ცვლილებების გაგზავნაში და ასევე HID მოწყობილობების კონტროლი Raspberry Pi- დან ტრეკერზე, რადგან ჩვენ გვჭირდებოდა იარაღის ვაზნაში მოთავსება. მომხმარებელმა ვერ ნახა გაყვანილობა.

დაბალი გამშვები ფილტრი

ეს არის ნაბიჯები Raspberry Pi- ს დასაყენებლად ამ ტიპის პროექტებისთვის

  • დააინსტალირეთ ჟოლოს Raspberry Pi- ზე
  • განაახლეთ "Node.js" - ის Pi ვერსია
  • კონკრეტული ინსტრუქციისთვის თქვენს პროექტში დააინსტალირეთ "კვანძების დამალული" ბიბლიოთეკა
  • ამ სტრიქონში დაამატეთ ფაილი სახელწოდებით "60-HTC-Vive-perms.rules"
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

პოტენციური პრობლემაა ის, რომ არასწორი ინდექსის მნიშვნელობა გამოიყენება node-hid- ის მიერ. ამ შემთხვევაში ინდექსი გამოიყენება ინტერფეისის დასადგენად ან ანგარიშის გასაგზავნად. აქ არის რამ, რომ გაეცნოთ USB მოთხოვნებს. თქვენ არ შეგიძლიათ მიუთითოთ ინტერფეისი "Node-Hid" - ით. საბედნიეროდ, "show-devices.js" ფაილს, რომელსაც მოჰყვა "კვანძის დამალული" ბიბლიოთეკა, რომელიც აჩვენებს ყველა დაკავშირებულ HID მოწყობილობას, თითოეული ინტერფეისისთვის სხვადასხვა გზა ჰქონდა.

გამოიყენეთ show-devices.js ფაილი, რომელსაც თან ახლავს კვანძების დამალული ბიბლიოთეკა. შეგიძლიათ გამოიყენოთ კოდი თქვენს კოდში, თუ ის განსხვავებულად გამოიყურება

თუ სკრიპტთან დაკავშირებული სხვა პრობლემები გაქვთ, 'usbmon' მოყვება Raspbian- ს და საშუალებას გაძლევთ ნახოთ ნებისმიერი USB მოთხოვნა, რომელიც მზადდება. აქ არის სასარგებლო ბმული, რომელიც შეგიძლიათ გამოიყენოთ ამ მოთხოვნების გასაშიფრად. (იწყება მე –15 გვერდზე)

დასკვნა

იარაღის გამოყენება VR კონტროლერად სულაც არ იყო მარტივი. იარაღის გასროლის ვიბრაცია საკმარისად ძლიერია, რომ ხელი შეუშალოს IMU- ს შესაძლებლობას, ზუსტად აკონტროლოს საკუთარი თავი. ტრეკერის დაბალი გამავლობის ფილტრისა და ჩამონტაჟებული Raspberry Pi- ს გამოყენებით, ჩვენ შევძელით ამ პრობლემის მოგვარება თვალყურის დევნებაზე ან ძალაზე, რომლითაც იარაღი ვიბრირებს.

მადლობა რომ წაიკითხეთ @ cohagan154