Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem

piotrva 01 Sep 2015 22:28 9969 11
phoenixcontact
  • Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem
    1. O czym opowiem?
    A więc czas zacząć opowieść od początku. Jak zapewne wielu tak i ja marzę o lataniu samolotami nie tylko jako pasażer, ale także w pierwszym rzędzie, czyli jako pilot. Rzecz jasna marzenie takie jest dosyć kosztowne do realizacji (kurs pilotażu kosztuje na dzień dzisiejszy około 20 000 zł, potem dochodzi pożyczanie samolotu, jeśli chcemy polatać). Na szczęście namiastkę takiej przyjemności możemy sprawić sobie w domowym zaciszu. Rzecz jasna nijak umywa się to prawdziwego wzbicia się w przestworza, ale zawsze można choć popróbować swoich sił w startach i przede wszystkim bezpiecznych lądowaniach.

    2. Do dzieła, czyli oprogramowanie
    Rzecz jasna pierwszą rzeczą, którą musimy posiadać jest komputer (o odpowiednio dobrych parametrach) oraz oprogramowanie symulacyjne. Osobiście kiedyś próbowałem swoich sił z Microsoft Flight Simulator 2002, ale sterując za pomocą klawiatury i myszki zabawa szybko stała się niewygodna. Teraz, za namową kolegi zakupiłem w platformie Steam Microsoft Flight Simulator X: Steam Edition. Zakup, jeśli trafimy na rożnego rodzaju opcje typu bundle, kosztować może około 40 zł (10 USD) i dodatkowo często dostaniemy jakieś inne gry. Normalnie w ofercie Steam symulator kosztuje ponad 100 zł (25 EUR)

    Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem

    Dodatkowo wykorzystywać będę dodatkowe paczki scenerii z firmy Drzewiecki Design ( http://www.drzewiecki-design.net/ ) - na screenie na razie wersja demo lotniska Kraków-Balice.

    Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem

    3. Czas na start - czyli sterujemy samolotem
    Jak wcześniej wspomniałem, niezależnie od wersji symulatora sterowanie samolotem tylko klawiaturą i myszką jest bardzo uciążliwe, a na pewno niewygodne i całkowicie nierealistyczne. Dlatego jedynym rozwiązaniem, które sprawi, że symulacja może sprawiać przyjemność jest posiadanie joysticka lub wolantu. Oczywiście sprzęt taki można kupić, w zależności od jakości, już za kilkadziesiąt złotych. Ceny pół-profesjonalnych kontrolerów sięgają czasem kilku tysięcy dolarów.

    4. Narodziny pomysłu
    Pomysł na projekt narodził się około roku temu, wtedy to na pewnym serwisie aukcyjnym wylicytowałem za symboliczną złotówkę stary joystick Logitech Wingman Warrior.

    Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem

    Posiadał on oryginalnie interfejs RS232 + Gameport i był w pełni sprawny mechanicznie. Joystick posiada 3 osie (x, y, przepustnica), 4 niezależne przyciski, 4 przyciski (hat switch - to czarne na szczycie joysticka) na drabince rezystancyjnej oraz przełącznik obrotowy (kręcący się 360+) wyposażony w enkoder optyczny.
    Pierwotnie chciałem go wykorzystać do sterowania ramieniem robota, jednak wtedy w ręce wpadły mi płytki z FS2002 i pomyślałem - a może poszukać jakiejś metody na podpięci tego sprzętu do komputera przez USB?

    Pierwsze rzecz jasna trafiłem na projekt mJoy (mirror projektu: http://www.mictronics.de/projects/avr-usb-joystick/ ) , jednak z lenistwa nie chciało mi się montować układu. Dalej moje poszukiwania skierowały się na wszechobecne Arduino, a konkretnie Arduino Leonardo, którego miałem kilka sztuk po prototypowaniu - bazujące na układzie ATMega32u4 ze sprzętowym interfejsem USB. To był pierwszy strzał w dziesiątkę. W sieci znalazłem nawet gotowy projekt z opisem jak dokonać koniecznych zmian, aby Leonardo stało się joystickiem. (projekt: http://www.imaginaryindustries.com/blog/?p=80 ).

    Rozwiązanie działało, jednakże osiągnięcie celu było tu zdecydowanie zbyt proste, zresztą nieco irytowało mnie występujące od czasu do czasu zawieszenie się komunikacji.

    5. Projekt - Joystick z wykorzystaniem eXtrino XL
    Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem
    Akurat w szafce miałem zakupioną wcześniej płytkę eXtrino XL produkcji Leon Instruments, z którą nie miałem wcześniej czasu się zaprzyjaźnić (opis: http://www.leon-instruments.pl/2014/05/extrino-xl.html ). Jako iż bazuje ona na mikrokontrolerze ATXMega128A3U, także posiadającym interfejs USB, pomyślałem, że będzie to dobra okazja do przetestowania płytki a także rozwinięcia pomysłu.

    Oprogramowanie powstało w całości w Atmel Studio 6.2 z wykorzystaniem Atmel Software Framework (także pierwszy raz korzystałem z tych bibliotek podczas tworzenia projektu).

    Kody źródłowe udostępniam repozytorium: https://bitbucket.org/piotrva/extrino-xl-joystick

    Tworząc je wykorzystałem analizę kodu z przytoczonego projektu opartego na Leonardo (zaczerpnąłem działający deskryptor, dostosowując go jedynie do pracy samodzielnej, a nie jako urządzenie composite). Przy uruchomieniu interfejsu USB korzystałem też z informacji ze strony http://www.avrfreaks.net/forum/custom-generic-usb-hid-device-not-reconized - pierwsze uruchomienie mojego urządzenia w celach testu odbyło się jako myszka USB - potem bez reinstalacji sterowników lub zmiany PID pojawiało się w systemie jako niedziałająca mysz USB HID.

    Co do oprogramowania chyba nic więcej nie muszę dodawać - ogólnie praca z ASF jest dosyć przyjemna, aczkolwiek czasem brakuje dobrej dokumentacji funkcji bibliotecznych i szybciej można coś uruchomić korzystając bezpośrednio z rejestrów procesora.

    Ostatecznie sprzęt został też nieco zmodyfikowany. W joysticku podczas próby rozpracowania enkodera optycznego najprawdopodobniej go uszkodziłem, stąd też postanowiłem usunąć oryginalne elementy optoelektroniczne i wstawić w ich miejsce odpowiedniki wymontowane z myszki. Po ich odpowiednim pozycjonowaniu (co zajęło kilkadziesiąt minut) udało się odebrać prawidłowy sygnał.

    Z joysticka usunąłem całą elektronikę i wszystkie sygnały wyprowadziłem widoczną taśmą na zewnątrz. Dodatkowo w środku zainstalowałem rezystory uzupełniające drabinkę od hat switcha oraz zapewniające prawidłową pracę enkodera optycznego. Jego wyprowadzenia zostały podpięte do sprzętowego interfejsu do enkoderów w procesorze XMega.
    Wnętrzem nie ma się czym chwalić - ot kilka kabli przylutowanych do płytki uniwersalnej i na niej gniazdko do wpięcia tej taśmy.
    Przy okazji zauważyłem, że przez rok przechowywania coś musiało spaść na joystick i odłamał się mały element od odciągu do pozycji centralnej - na szczęście udało mi się z pomocą wiertarki Proxxon, kawałka metalowego pręcika i kropelki zamontować i wzmocnić wyłamany bolec.

    Ponadto gdzieś plątał się miniaturowy joystick z 1 przyciskiem - takowy też został podpięty.

    Joystick USB - czyli jak zacząć przygodę z wirtualnym lataniem

    Po drugiej stronie kabli na uniwersalnej płytce Arduino wykonałęm trwały adapter łączący wszystkie sygnały z procesorem.

    Ostatecznie mam zatem 9 przycisków, 5 osi. Przełącznik obrotowy obecnie wykorzystuję też jako 2 przyciski - do zwiększania i zmniejszania kierunku w autopilocie.

    Wykorzystany deskryptor wspiera w sumie 7 osi, 32 przyciski i 2 przełączniki widoku (hat switch), więc jeszcze można podpiąć dodatkowe elementy.

    6. Co dalej?
    Po pierwsze można wykorzystać kolejnych 8 przycisków z płytki eXtrino, dopiąć dodatkowe potencjometry (są jeszcze wolne kanały ADC dostępne na złączach eXtrino).
    Co ciekawe delikatnie modyfikując i powielając deskryptor można na jednym urządzeniu fizycznym uzyskać widoczne w systemie kilka joysticków (testowałem przy 6). Także sumarycznie, stosując np. zewnętrzne ADC i ekspandery można osiągnąć co najmniej (więcej nie testowałem) 6*7 kanałów analogowych i 32*6 przycisków i 12 przełączników widoku, gdyż Flight Simulator współpracuje bez problemu z wieloma kontrolerami.
    W najbliższym planie w związku z tym mam wykonanie (z pomocą kolegi i jego drukarki 3D) dodatkowych manetek (klapy, hamulce powietrzne, rozdzielne kanały przepustnicy) a także budowę pedałów do steru kierunku i hamulców asymetrycznych.

    7. Konkluzja
    Przede wszystkim czekam na komentarze i wartościowe uwagi.

    Projekt może nie stanowi odkrycia, nie wykonałem też ani kawałka projektu elektroniki - w zasadzie nic odkrywczego.

    Sam jednak w czasie wykonywania sprawdziłem w praktyce swoją wiedzę na temat USB (poszerzając ją), przetestowałem ASF i płytkę z eXtrino, a także zbudowałem z części posiadanych działający kontroler do symulatora, z możliwością jego łatwej rozbudowy.

    Całość zajęła po skomasowaniu około 5-6 godzin pracy. Koszty może oszacować każdy sam - na pewno gdyby nie posiadanie wszystkich części tańszy okazałby się zakup gotowego joysticka, jednak nie byłoby na pewno tyle satysfakcji, a także możliwości tak łatwej rozbudowy o kolejne elementy sterujące.

    Przede wszystkim jednak miarą przydatności jest frajda z jak dotąd odbytych 40 godzin wirtualnego lotu i 120 udanych lądowań na tym sprzęcie (nie liczę Arduino, z którego korzystałem dosyć rzadko przez ubiegły rok).

    Pozdrawiam
    Piotrek

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    piotrva
    VIP Meritorious for electroda.pl
    Offline 
    Has specialization in: mikrokontrolery
    piotrva wrote 6404 posts with rating 701, helped 623 times. Live in city Kraków. Been with us since 2008 year.
  • phoenixcontact
  • #2
    konel83
    Level 15  
    Bardzo użyteczna konstrukcja. Jak się edytuje taki deskryptor urządzenia usb? Żeby w jednym kontrolerze uzyskać np. więcej osi? Kiedyś zastanawiałem się nad zbudowaniem czegoś tego typu tylko do symulatora pociągu :)
  • phoenixcontact
  • #3
    piotrva
    VIP Meritorious for electroda.pl
    Zasadniczo, żeby wiedzieć co robi dana wartość w deskryptorze, tutaj konkretnie raportu HID, trzeba sporo poczytać o samym USB i najlepiej użyć jakiegoś narzędzia do generacji takiego deskryptora (np. HID Tool).

    Sam deskryptor też trzeba odnaleźć w plikach odpowiedzialnych za obsługę USB.
    Np. tu: https://bitbucket.org/piotrva/extrino-xl-joystick/src/d28174d39df83a0aebbd5ccd66e8b49ee2ca48dc/EXTRINO_JOY/src/ASF/common/services/usb/class/hid/device/generic/udi_hid_generic.c?at=master#udi_hid_generic.c-175

    Jeśli umieści się w desk. kilka sekcji z różnymi REPORT_ID można potem mieć dostęp do kilku urządzeń HID po 1 kablu.
  • #4
    Urgon
    Level 38  
    AVE...

    Wszystkie potrzebne informacje są na stronie www.USB.org. Niestety, USB, a zwłaszcza HID od strony programisty sprzętu jest tak samo przyjazne jak Korea Północna dla Południowej. Z drugiej strony trza tylko przełknąć sprawę z deskryptorami, a potem jest już z górki. Ta strona się na pewno przyda: http://www.usb.org/developers/hidpage/
    Rzuć okiem na HID Usage Tables, na stronę 35, gdzie zaczyna się opis możliwych do użycia elementów i klas do budowy kontrolera dla symulatora:
    http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
  • #6
    piotrva
    VIP Meritorious for electroda.pl
    Dzięki za linka - nie trafiłem na ten projekt a wygląda bardzo interesująco - zrobić to tylko na sprzęcie innym niż Arduino z większą ilością IO i można fajnie się bawić :)
  • #7
    treker
    Level 25  
    Projekt ciekawy, przy okazji dopytam - są już tego typu symulatory, które wspierają Oculus Rift? Oczywiście nie pytam o gry, ale o takiej bardziej realistyczne symulacje.
  • #9
    maxxim
    Level 15  
    Symulator lotu i okulary to pomyłka . Robisz kokpit aby go obsługiwać . z okularami jesteś ślepy . Już lepszym wyjściem jest wideview i trzy do pięciu monitorów 40 cali .Ja miałem 5 x 50 cali .Efekt opadu szczęki gwarantowany .Na początek 3 x 40 i kokpit .... cała zabawa jest w obsłudze i nawigacji .

    Zresztą .... zobacz sam. zamiast monitorów trzy projektory .

    www.youtube.com/watch?v=MiThNYfiwCA

    Zamienisz to na okulary ? ;)

    A wracając do arduino i programu .... Ja zrobiłem kokpit z wszystkimi funkcjami "Money Bravo" na pięciu arduino , i jeszcze miałem wolne piny !!
    Teraz robię Cessne 172 z GPS g500 .Nie będzie to wierna kopia , ale bardzo podobny kokpit do prawdziwego .
  • #10
    piotrva
    VIP Meritorious for electroda.pl
    Dokładnie - stosowanie okularów to może miałoby sens gdyby były wyświetlacze ze zmianą transparentności - żeby widzieć cały kokpit.
    Ale to rozwiązanie droższe niż kilka ekranów.
  • #11
    bolonski
    Level 11  
    Ja od siebie dodam, że do programowania urządzeń HID przydaje się program usblyzer - bardzo dobry analizator raportów wejściowych i wyjściowych
  • #12
    11111olo
    Level 42  
    Sam HID jest stosunkowo prosty i łatwy w użyciu. Na forum jest o tym odpowiedni wątek.