Prawdziwe pistolety jako kontrolery: jak wprowadzić cokolwiek do VR

Nazywam się Christopher O’Hagan, inżynier oprogramowania w @KainosSoftware i pracuję w dziale innowacji stosowanych. Koncentracja na technologiach immersyjnych. Ten blog opowiada o tym, jak niedawno zmieniliśmy prawie całkowicie działający karabin w kontroler rzeczywistości wirtualnej i jak przezwyciężyliśmy związane z tym problemy.

Niedawno zwrócił się do nas kanadyjski klient, który szuka pomocy w zbudowaniu realistycznej strzelanki jako atrakcji dla swojej arkady. Jest to część rosnącego trendu, który zaobserwowaliśmy, gdy technologia immersyjna, taka jak VR, jest wykorzystywana w lokalnych firmach rozrywkowych, takich jak pokoje ewakuacyjne i kolejki górskie. Chociaż wyposażenie i konfiguracja mogą być drogie, jest opłacalne ze względu na duże odwiedziny i nowatorskie środowiska oferowane przez te firmy. Świetnym przykładem rozrywki na miejscu jest wirtualny paintball, który udało się firmom takim jak „Pustka”.

Naszym głównym wyzwaniem dla wciągającej strzelanki, w której pomagaliśmy, było zbudowanie i wykorzystanie prawdziwej broni palnej… lub przynajmniej czegoś, co wyglądało i działało jak jeden.

Zdobywanie kontrolera

Początkowo wierzyliśmy, że pozyskanie kontrolera będzie trudne. Dotarliśmy do lokalnego dostawcy broni pneumatycznej, Gear of War. Nasze wymagania to:

  • Replika miękkiego karabinu, który wyglądał, czuł i był ważony jak prawdziwy karabin
  • Pistolet, który po wystrzeleniu wytworzyłby realistyczny odrzut
  • Spust i bezpieczeństwo, które zostały okablowane, abyśmy mogli wykorzystać je jako dane wejściowe naszej symulacji

Myśleliśmy, że będzie to wiele wymagać, ale byliśmy zaskoczeni faktem, że wydawało im się to normalne. Zrobili wiele rekwizytów dla telewizji i filmów, więc otrzymali dziwniejsze prośby. Następnie użyliśmy zamontowanego urządzenia śledzącego Vive do śledzenia broni w VR.

Konfigurowanie kontrolera

To tutaj doświadczyliśmy naszego głównego problemu, wibracji: Problem został spowodowany przez realistyczny odrzut naszego pistoletu. Ponieważ Vive Tracker wykorzystuje IMU (bezwładnościowe jednostki ruchowe) do śledzenia z wysoką częstotliwością, a system latarni morskiej Vive do śledzenia z względnie niższą częstotliwością i do korekcji znoszenia. IMU działają poprzez pomiar przyspieszenia w każdej osi, a następnie obliczanie przesunięcia z tego pomiaru. Kiedy IMU są agresywnie wibrowane, na przykład podczas montażu na realistycznie strzelającej broni, nie są w stanie dokładnie śledzić. To był problem.

Ponieważ nie jesteśmy ekspertami w dziedzinie wibracji, podjęliśmy kilka prób rozwiązania problemu, ale nie zrobiliśmy dużych postępów. Następnie postanowiliśmy zrobić post reddit na r / Vive. Odpowiedź społeczności była pomocna, poprawiając kilka prostych rzeczy, za którymi tęskniliśmy, np. Że tracker znajdował się zbyt daleko od szyny. Ku naszemu zdziwieniu HTC skontaktowało się z nami w sprawie projektu, wykazując zainteresowanie tym, co próbowaliśmy zrobić. Mieli wersję beta oprogramowania Vive Tracker, które może pomóc, filtr dolnoprzepustowy dla IMU, który nam dali.

Wykres normalnego sygnału wejściowego w porównaniu do sygnału wejściowego po zastosowaniu filtra dolnoprzepustowego

Filtr dolnoprzepustowy można skonfigurować za pomocą interfejsu USB HID. Byliśmy w stanie wysyłać raporty „0xB3”, które wysyłają podstawowe informacje o używanym urządzeniu, a także konfiguracji dolnoprzepustowej, z MacBooka do urządzenia śledzącego z odpowiednimi ustawieniami, aby wystarczająco tłumić wibracje. Następnym krokiem było przesłanie raportu funkcji, który pozwala nam komunikować zmiany w ustawieniach, a także kontrolować urządzenia HID, do urządzenia śledzącego z raspberry pi, ponieważ potrzebowaliśmy czegoś, co mogłoby zmieścić się we wkładzie pistoletu, aby użytkownik nie mógł zobacz okablowanie.

Filtr dolnoprzepustowy

Są to kroki, aby skonfigurować Raspberry Pi dla tego rodzaju projektu

  • Zainstaluj Raspbian na Raspberry Pi
  • Zaktualizuj wersję „Node.js” pi
  • Zainstaluj bibliotekę „node-hid” w swoim projekcie, aby uzyskać szczegółowe instrukcje, jak to zrobić na pi, tutaj
  • Dodaj plik w udev o nazwie `60-HTC-Vive-perms.rules` z tym wierszem
KERNEL == "hidraw *", SUBSYSTEM == "hidraw", ATTRS {idVendor} == "28de", ATTRS {idProduct} == "2022", TAG + = "uaccess"

Problemem, który możesz mieć, jest to, że niepoprawna wartość wIndex jest używana przez hid węzła, w tym przypadku wIndex jest używany do określenia interfejsu lub miejsca wysłania raportu. Oto coś, co pomoże Ci skupić się na żądaniach USB. „Node-hid” nie pozwala na określenie interfejsu. Na szczęście, kiedy spojrzałem na „show-devices.js”, który jest dostarczany z biblioteką „node-hid” i wyświetla wszystkie podłączone urządzenia HID, miał różne ścieżki dla każdego interfejsu.

Korzystanie z show-devices.js, który jest dostarczany z biblioteką ukrytych węzłów. Możesz znaleźć ścieżkę, która ma zostać użyta w kodzie, jeśli wygląda inaczej

Jeśli masz inne problemy ze skryptem, „usbmon” jest dostarczany z Raspbian i umożliwia przeglądanie wszystkich żądań usb. Oto przydatny link, który pomoże ci zdekodować te żądania. (Zaczyna się na stronie 15)

Wniosek

Używanie pistoletu jako kontrolera VR wcale nie było łatwe. Wibracje strzelania są wystarczająco silne, aby zakłócać zdolność IMU do dokładnego śledzenia samego siebie. Korzystając z funkcji filtra dolnoprzepustowego urządzenia śledzącego i wbudowanego urządzenia Raspberry Pi, udało nam się rozwiązać ten problem bez uszczerbku dla śledzenia lub siły, z jaką wibruje działo.

Dziękuje za przeczytanie
@ cohagan154