Kontroler frezarki CNC: pad do gier z QjoyPad

Autor: Mateusz M.6 min czytaniaBudowa 3-osiówki

Bardzo często, pracując przy frezarce, zachodzi potrzeba ręcznego ustawienia osi, do tego z różnych stron maszyny. Chodzenie dookoła z ogromną klawiaturą jest niewygodne, a sterowanie w powietrzu odpada. Można zrobić od zera własny kontroler oparty np. o sterownik klawiatury. Takie były nasze pierwsze koncepcje, dopóki nie trafiliśmy na sterownik QjoyPad dla padów do gier komputerowych. Pod ręką mieliśmy joystick od PS3, który okazał się kompatybilny ze sterownikiem, więc zabraliśmy się do działania.

Najnowszy LinuxCNC oparty jest na Debianie i na nim opisany będzie przykład instalacji i użytkowania urządzenia. Urządzenie powinno działać bez problemu na innych dystrybucjach Linuksa. Instalacja jest bardzo prosta, wystarczy tylko wklepać do terminala kolejne komendy i klikać Enter. Informacje dotyczące instalacji znajdziemy na stronie http://ubuntnt.blogspot.com/2011/07/how-to-setup-sixaxis-controller-with.html. Na stronie http://qjoypad.sourceforge.net/ jest do pobrania paczka z najnowszym oprogramowaniem, opisane są wszystkie wymagania oraz informacje o obsługiwanych padach.

Instalacja QjoyPad

Na początku musimy zainstalować driver do naszego przyszłego kontrolera. Możemy pobrać paczkę ze strony http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/, tam znajdziemy też informacje o obsługiwanych padach. Żeby było szybciej, możemy zamiast tego wpisać w terminal komendę:

sudo apt-get install joystick

QjoyPad używa Qt, dlatego musimy zainstalować paczki z ich oprogramowaniem. Kopiujemy całą poniższą linijkę, wklejamy w terminal i zatwierdzamy Enterem:

sudo apt-get install libqt4-core  libqt4-dev qt4-dev-tools qt4-designer  qt4-doc

W wymaganiach do poprawnego działania QjoyPad jest zawarta instalacja X Window, np. z www.x.org. Aby było łatwiej, możemy wklepać w terminal poniższą komendę:

sudo apt-get install libxtst6 libxtst-dev

Teraz pobieramy i instalujemy program QjoyPad. Komendą „cd” ustawiamy ścieżkę dostępu do pliku pobranego ze strony głównej QjoyPad. W przykładzie folder downloads:

cd ~/downloads

Poniższa komenda rozpakuje plik qjoypad-4.1.0. W przypadku innej wersji musimy podać jej nazwę:

tar xzf qjoypad-4.1.0.tar.gz

I po ustawieniu odpowiedniej ścieżki kompilujemy nasz program:

cd qjoypad-4.1.0/src
./config
make
sudo make install

Gotowe!!! Po tej katordze czas na zabawę. My używamy pada od Playstation 3 Sixaxis, czyli pełen wypas z akcelerometrami chyba w sześciu osiach :P Przed rozpoczęciem pracy warto dodać zainstalowany program do autostartu. Wchodzimy w Programy/Ustawienia/Sesja i uruchamianie. Klikamy przycisk Dodaj, w nazwie wpisujemy, co chcemy, np. QjoyPad, a w poleceniu dodajemy ścieżkę Usr/local/bin/qjoypad. Jeżeli chcemy go uruchamiać ręcznie, wystarczy, że wciśniemy Alt+F2 i wpiszemy w okno „qjoypad”.

Dodanie programu qjoypad do autostartu w ustawieniach sesji

Ilustracja 1. Dodanie programu qjoypad do autostartu

Konfiguracja

Instalacja zakończona! Czas więc przejść do skonfigurowania programu. Nie polecam używania przycisku „quick set” do konfigurowania klawiszy w Sixaxis. Do przycisków dość łatwo przypisują się czułe osie z akcelerometrami.

Okno główne programu QjoyPad

Ilustracja 2. Okno główne programu QjoyPad

W trakcie konfigurowania osi (axis) możemy ustawić suwakami jej czułość maksymalną i minimalną. Osie mogą sterować przyciskami lub myszą. W przypadku przycisków nie mamy żadnych dodatkowych ustawień, natomiast dla myszy można ustawić szybkość, czułość oraz funkcję działania: liniową, kwadratową, potęgową itp.

Okno konfiguracji osi w programie QjoyPad

Ilustracja 3. Konfiguracja osi w programie QjoyPad

Ustawienie przycisków (buttons) jest prostsze. Wybieramy tylko przycisk na klawiaturze, któremu ma odpowiadać klawisz pada. Opcjonalnie możemy zaznaczyć dwa pola, które zmieniają odpowiedź na kliknięcie:

  • STICKY – klawisz po wciśnięciu „przykleja się”, czyli trzyma, a po ponownym wciśnięciu puszcza,
  • RAPID FIRE – pulsowanie przycisku, szybkie przełączanie, do gier typu strzelanki.

Okno konfiguracji przycisku w programie QjoyPad

Ilustracja 4. Konfiguracja przycisku w programie QjoyPad

Dla ułatwienia poniżej znajduje się tabelka z rozpiską wszystkich klawiszy pada Sixaxis i przykładowe przypisanie przycisku.

Konfiguracja osi i przycisków dla pada Playstation 3:

Klawisz lub oś w QjoyPad Klawisz lub oś w Sixaxis Przykładowa funkcja w programie Opis działania
AXIS1 Lewy analog poziomo Mouse (Hor.) Ruch myszy poziomy
AXIS2 Lewy analog pionowo Mouse (Vert.) Ruch myszy pionowy
AXIS3 Prawy analog poziomo No key, No key -, -
AXIS4 Prawy analog pionowo KP_Page up(9), KP_Page down(3) Ruch osi Z góra, dół
Axis 24 Ruch padem prawo/lewo KP_5, KP_7 Klawisze 5, 7
Axis 25 Ruch padem przód/tył ENTER, ESC ENTER, ESC
Axis 26 Ruch padem góra/dół No key, No key -, -
Axis 27 Obrót padem wokół osi No key, No key -, -
B1 SELECT r Start programu
B2 Przycisk lewy analog LEFT MOUSE BUTTON Lewy klik myszą
B3 Przycisk prawy analog l Ignoruj zakresy
B4 START F9 Start/stop wrzeciona
B5 UP KP_UP(8) Ruch osią Y w górę
B6 RIGHT KP_RIGHT(6) Ruch osią X w prawo
B7 DOWN KP_DOWN(2) Ruch osią Y w dół
B8 LEFT KP_LEFT(4) Ruch osią X w lewo
B9 L2 c Ruch ciągły osią
B10 R2 k Zmniejszenie podziału kroku
B11 L1 F2 Start/stop LinuxCNC
B12 R1 i Zwiększenie podziału kroku
B13 Trójkąt 2 Zwiększenie prędkości osi
B14 Kółko KP_0 Czyszczenie ekranu
B15 X 1 Zmniejszenie prędkości osi
B16 Kwadrat END Ustawienie zakresu wybranej osi
B17 Guzik PlayStation HOME Bazowanie wybranej osi

Przy konfiguracji jak w tabeli mamy dostęp do wszystkich ważnych funkcji maszyny, a dodatkowo, przez wykorzystanie klawiszy numerycznych do ruchu osi, do wszystkich cyfr od 0 do 9. Musimy tylko zapamiętać, gdzie je przypisaliśmy. Ruchem do przodu zatwierdzamy wybór, natomiast w tył anulujemy. Joystickiem analogowym prawym można sterować tylko osią Z w górę i w dół. Ustawienie innych klawiszy pod lewo i prawo powodowało dużą niestabilność w odczycie. Do przycisku w tym analogu jest przypisany klawisz „l”, czyli ignorowanie limitów, używany najczęściej, gdy oś jest zablokowana. Na wszelki wypadek mamy możliwość sterowania myszką i dostępny lewy przycisk.

Aby sterowanie frezarką w ten sposób było możliwe, będziemy musieli zmodyfikować nieco nasz plik axis z LinuxCNC. W Debianie wciskamy Alt+F2 i wpisujemy gksu Thunar, po wpisaniu hasła otworzy nam się przeglądarka plików z uprawnieniami roota (administratora). Szukamy w katalogu systemu usr/bin pliku axis. Otwieramy plik w edytorze gedit, ponieważ jest najwygodniejszy w obsłudze. W Debianie nie jest zainstalowany standardowo, więc wpisujemy w terminal:

sudo apt-get install gedit

Po otwarciu pliku w edytorze gedit zmieniamy definicje klawiszy, aby wygodnie obsługiwać się naszym padem. W pliku axis szukamy linijek:

1. root_window.bind("<Escape>", commands.task_stop)
2. root_window.bind("i", lambda event: jogspeed_incremental())
3. root_window.bind("I", lambda event: jogspeed_incremental(-1))
4. root_window.bind("<Home>", commands.home_axis)
5. root_window.bind("<KP_Home>", kp_wrap(commands.home_axis, "KeyPress"))
6. root_window.bind("<Control-Home>", commands.home_all_axes)
7. root_window.bind("Control-k", commands.clear_live_plot)

Konieczna jest zmiana wszystkich użytecznych klawiszy, aby dało się je wcisnąć bez Shifta lub Ctrl. Czyli klawisz „duże I” zmienimy na „k”, „Ctrl+K” na zero numeryczne, dodatkowo bazowanie wszystkich osi można ustawić na po prostu „Home”, a pojedynczej na „Ctrl+Home”. Klawisz Escape wyłączamy z działania, aby nie przerywał pracy przy ruchu padem w tył. Wprowadzamy zmiany do linijek:

1. root_window.bind("<Escape>", "#nothing")
2. root_window.bind("i", lambda event: jogspeed_incremental())
3. root_window.bind("k", lambda event: jogspeed_incremental(-1))
4. root_window.bind("<Home>", commands.home_all_axes )
5. root_window.bind("<KP_Home>", kp_wrap(commands.home_all_axes, "KeyPress"))
6. root_window.bind("<Control-Home>", commands.home_axis)
7. root_window.bind("KP_0", commands.clear_live_plot)

Wygodne będzie też ustawienie zmiany prędkości przejazdu za pomocą dwóch klawiszy, np. „1” zmniejsza prędkość, a „2” ją zwiększa. Zmieniamy zawartość funkcji activate_axis_or_set_feedrate(n):

def activate_axis_or_set_feedrate(n):
ustawiona_predkosc = widgets.feedoverride.get()
if n == 0:
set_feedrate(0)
if n == 1:
ustawiona_predkosc -= 5
if ustawiona_predkosc < 0:
ustawiona_predkosc = 0
set_feedrate(ustawiona_predkosc)
if n == 2:
ustawiona_predkosc += 5
if ustawiona_predkosc > 100:
ustawiona_predkosc = 100
set_feedrate(ustawiona_predkosc)
if n>2:
set_feedrate(n*10)

W ten sposób mamy w pełni funkcjonalny kontroler do naszej maszyny. Pełne sterowanie w 3 osiach, regulacja prędkości, skoku, bazowanie, ustawienie offsetów, włączenie wrzeciona. Do tego dostęp do pełnej klawiatury numerycznej, zatwierdzanie wyboru, anulowanie. Jedyną wadą jest spora cena nowych padów do PS3, ale zawsze można kupić coś używanego. Po skonfigurowaniu Bluetootha pad można używać jako bezprzewodowy, my tego jeszcze nie zrobiliśmy. Czego chcieć więcej od takiego małego, poręcznego kontrolera?

Film: sterowanie frezarką CNC padem od PS3