Kontroler do gier FPS 1. Wstęp 2. Koncepcja działania projektu

Transkrypt

Kontroler do gier FPS 1. Wstęp 2. Koncepcja działania projektu
Kontroler do gier FPS
Adrian Chemicz
Wydział Inżynierii Mechanicznej i Informatyki
Kierunek informatyka, Rok III, Specjalność Programowanie Aplikacji Internetowych
Streszczenie
Tematem mojej pracy jest kontroler do gier typu FPS, który docelowo ma mieć postać kolimatora
do repliki broni. Celem tego kontrolera jest możliwie jak największe odwzorowanie ruchów gracza
na postać w grze. Urządzenie to wyświetla obraz na LCD od telefonu nokii pobrany z komputera,
który pracuje pod kontrolą systemu Windows.
1. Wstęp
Mój kontroler do gier został zbudowany z użyciem mikrokontrolera LPC1769 [1] z rdzeniem CortexM3. Kontroler ten do komunikacji z komputerem wykorzystuje wirtualny port com, który pracuje z
prędkością 6Mbaud/s. Urządzenie to wyświetla obraz na LCD od telefonu nokii pobrany z
komputera. Komputer użyty w projekcie korzysta z systemu Windows. Do detekcji ruchów gracza
zostały wykorzystane czujniki MEMS.
2. Koncepcja działania projektu
Kompletny projekt składa się z kontrolera i podestu. Kontroler w tym wszystkim jest najistotniejszy,
ponieważ właśnie to urządzenie odpowiada za komunikacje z komputerem. Zadaniem podestu jest
zbieranie informacji o ruchach nóg gracza i przekazywanie ich do kontrolera. Komunikacja między
kontrolerem a podestem odbywa się tylko w jednym kierunku(od podestu do urządzenia), a
korzysta z podczerwieni. Docelowo kontroler ma mieścić się w kolimatorze na replice.
Rys. 1: Elementy projektu.
3. Komunikacja między elementami systemu
Komunikacja między mikrokokontrolerem a komputerem korzysta z interfejsu RS485, który pracuje
z prędkością 6Mb/s. Do komunikacji z czujnikami MEMS(żyroskop i magnetometr) została
wykorzystana szyna I2C, która pracuje z częstotliwością 375 kHz. LCD od telefonu nokii jest
podpięty do szyny SPI i korzysta z maksymalnej częstotliwości 6MHz, która to jest podana w
dokumentacji do sterownika tego wyświetlacza (PCF8833) [2]. W projekcie została wykorzystana
także podczerwień, która wykorzystuje częstotliwość 36kHz, a do układu czujnik podczerwieni
TSOP31236 został podpięty do portu GPIO. Kontroler posiada także zwykłe przyciski podpięte
także do GPIO.
Rys. 2: Elementy kontrolera.
4. Wyświetlanie obrazu
Za wyświetlanie graczowi obrazu z gry komputerowej jest odpowiedzialny wyświetlacz od telefonu
nokii posiadający sterownik PCF8833 [2] lub podobny, dla którego maksymalna częstotliwość
pracy szyny danych SPI wynosi 6 MHz, co daje możliwość wyświetlania obrazu w przybliżeniu, w
30 klatkach na sekundę. Wyświetlacz użyty w projekcie posiada rozdzielczość 130x130 pikseli i
posiada dwunasto-bitową głębie kolorów. Szyna danych SPI dla tego wyświetlacza korzysta z
ramek składających się z 9 bitów. Taki format danych oznacza duże trudności, ponieważ nie
wszystkie układy mogą pracować z taką konfiguracją szyny SPI, a zazwyczaj dopuszczalna i
często jedyna długość ramki wynosi 8 bitów. W przypadku stosowania układu z takimi
ograniczeniami sposób obsługi wyświetlacza trzeba realizować w sposób programowy, co pociąga
za sobą straty w wydajności i komplikuje program. W przypadku układu użytego w projekcie takie
problemy nie występują, ponieważ SPI może pracować z ramką składającą się z od 4 do 16 bitów.
Dane wysyłane do wyświetlacza mogą być interpretowane jako dane lub komendy, a różnica
między nimi polega na stanie najstarszego bitu w ramce (jeśli jest ustawiony najstarszy bit oznacza
to dane). Format danych dla tego wyświetlacza w trybie 12 bitów na kolor przedstawia się
następująco: na każde dwa piksele przypadają trzy bajty (Rys. 3).
Rys. 3: Format danych dla sterownika PCF8833 w trybie 12 bitów na kolor. Puste kwadraty
oznaczają bity. Na tym rysunku zostały pominięte bity odpowiedzialne za tryb(komendy lub dane).
5. Czujniki MEMS
Za detekcje ruchów broni odpowiadają dwa czujniki: trzyosiowy żyroskop L3G4200D [6] firmy
STMicroelectronics i trzyosiowy magnetometr HMC5883L [5] firmy Honeywell. Żyroskop pobiera
wartość przyspieszenia kątowego z dwóch osi i przekazuje te wartości do PC, gdzie są one
zamieniane na ruchy myszki. Wartość przyspieszenia kątowego jest także wykorzystywana do
ustalania położenia kontrolera w przestrzeni. Wskutek niedoskonałości i wibracji żyroskopu
zachodzi konieczność korekcji pozycji kontrolera, do czego w projekcie wykorzystywany jest
magnetometr. Magnetometr jest używany do detekcji wartości maksymalnych pola magnetycznego
na poszczególnych osiach, co odpowiada możliwości detekcji czterech kierunków. Możliwości
magnetometru są znacznie większe, ale czujnik ten jest bardzo wrażliwy na zakłócenia
wywoływane przez linie zasilające i ferromagnetyki wskutek czego jakość pomiaru spada. W celu
polepszenia pomiarów należy możliwie jak najdalej odsunąć ten czujnik od źródeł zakłóceń.
6. Aplikacja po stronie Mikrokontrolera
Program na kontroler został napisany w asemblerze, ponieważ pierwotnie miał pracować na
jednym z najsłabszych układów, czyli na mikrokontrolerze LPC1111 z rdzeniem Cortex-M0, ale
wskutek komplikacji spowodowanych niewystarczającą częstotliwością taktowania peryferiów
zaszła konieczność przeniesienia projektu na inny, mocniejszy układ. Program składa się z części
inicjującej i pętli głównej. W części inicjującej są konfigurowane peryferia i czujniki, a w pętli
głównej dane z UART-u są przenoszone do LCD za pomocą SPI, lub w przypadku braku danych
dla wyświetlacza następuję odczyt danych z czujników w sposób nie blokujący.
7. Aplikacja po stronie PC
Kontroler od strony komputera jest widoczny jak zwykły port COM, ale w przeciwieństwie do
standardowego portu COM korzysta z niestandardowych wartości przesyłu danych, czyli 6
Mbaud/s. Do obsługi portu COM na komputerze zostało wykorzystane API dostępne w systemie
Windows [7] Aplikacja do obsługi tego urządzenia została napisana z wykorzystaniem
wielowątkowości jaką oferuje API systemu Windows, w celu uniknięcia blokad powstałych w
wyniku transmisji za pomocą portu COM. W programie wykorzystywane są dwa wątki. Wątek
pierwszy robi zrzuty ekranu, odbiera dane od urządzenia i aktualizuje tablice pikseli. Do zadań
wątku drugiego należy wysyłanie tablicy pikseli za pomocą portu COM w pętli, w której warunkiem
zakończenia jest ustawienie flagi końca. Dane otrzymane od urządzenia są zamieniane na
odpowiednie ruchy kursora w komputerze i zdarzenia od naciśniętych klawiszy klawiatury za
pomocą funkcji SendInput [8].
Rys. 4: Schemat blokowy algorytmu aplikacji po stronie komputera do obsługi urządzenia.
8. Transmisja danych z wykorzystaniem podczerwieni
W celu uniezależnienia elementu odpowiedzialnego za ruch repliki broni i ruch nóg gracza,
zastosowano transmisje z wykorzystaniem podczerwieni i pewien format ramki. Takie rozdzielenie
dwóch części projektu daje możliwość niezależnej rozbudowy dwóch elementów względem siebie,
a także tworzenie nowych modułów, które będą korzystały z wcześniej opracowanych rozwiązań.
Rolę odbiornika pełni czujnik TSOP31236 [4], a za wysyłanie odpowiada dioda podczerwona.
Format ramki użytej do transmisji z wykorzystaniem podczerwieni składa się z 8 bitów z czego na
dane jest przeznaczone tylko 6 bitów. Bity kodowane są przez zmianę stanu (bit zerowy – zmiana
z stanu niskiego na wysoki), co daje dodatkową opcje wykrywania błędów. Na każdy stan
przypada 16 błysków diody migającej z częstotliwością 36kHz, co stanowi optymalną wartość dla
czujnika podczerwieni.
Rys. 5: Ilustracja przykładowej ramki, w której pierwszy bit musi być równy 0, a ostatni równy 1.
9. Transmisja danych między PC a kontrolerem
Komunikacja między PC a kontrolerem odbywa się za pomocą interfejsu RS485, który pracuje z
prędkością 6Mbaud/s. W celu realizacji takich prędkości transmisji zastosowano w projekcie
konwerter FT232H, dla którego maksymalna prędkość wynosi 12Mbaud/s. Konwerter ten jest na
obecną chwilę najlepszym, dostępnym rozwiązaniem firmy FTDI. Komunikacja między
urządzeniami odbywa się z zastosowaniem full-duplexu, co oznacza konieczność zastosowania
czterech przewodów transmisyjnych. W kierunku kontrolera transmitowany jest obraz(bajt po
bajcie bez żadnych zabezpieczeń), a w kierunku PC specjalnie przygotowane ramki.
Rys.6: Format ramki wysyłanej do PC przez kontroler. W powyższej ramce pierwszy i ostatni bajt
są to wartości stałe, które umożliwiają dokonanie testu gdzie rozpoczyna się i kończy ramka. W tej
ramce są przetrzymywane dane odpowiedzialne za ruchy myszką i dane odpowiedzialne za ruch
postaci i atak.
10. Podsumowanie
Kontroler ten jest w pełni funkcjonalny, ale ma pewne braki które być może zostaną uzupełnione w
przyszłości. Wyświetlany obraz mimo niewielkiej rozdzielczości pozwala na w miarę płynną grę, a
ilość klatek jest na poziomie 23, co stanowi minimum do odczucia płynności obrazu. Do poprawy
komfortu grania brakuje akcelerometru, który dokonywałby dodatkowych korekt.
Literatura
[1] http://www.keil.com/dd/docs/datashts/philips/lpc17xx_um.pdf
[2]http://www.kamami.pl/dl/pcf8833_1.pdf
[3]http://www.kamami.pl/dl/kamodtft2.pdf
[4]http://www.vishay.com/docs/82492/tsop312.pdf
[5]http://www51.honeywell.com/aero/common/documents/myaerospacecatalogdocuments/Defense_Brochures-documents/HMC5883L_3-Axis_Digital_Compass_IC.pdf
[6]http://www.st.com/st-webui/static/active/en/resource/technical/document/datasheet/CD00265057.pdf
[7]http://msdn.microsoft.com/en-us/library/windows/desktop/aa363195%28v=vs.85%29.aspx
[8]http://msdn.microsoft.com/en-us/library/windows/desktop/aa363195%28v=vs.85%29.aspx