Logitech Attack 3 Joystick

Aus RoombaCtrl
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einleitung

Logitech Attack 3

Der Logitech Attack 3 ist ein 11 Tasten Joystick der einfach zu bedienen ist und sowohl für für Rechts- bzw. Linkshänder geeignet ist. Durch seine Anordnung der Buttons ist er ideal geeignet, um für eine ideale Bedienung des Programmes eingesetzt zu werden. Über die Steuersoftware RoombaCtrl hat man die Möglichkeit damit den Roboter zu steuern, bequem die Kamera sowie den Gripper zu bedienen, Screenshots zu schießen und die Kamera wieder zu zentrieren.

Eckdaten

  • 3 Achsen
    • 2 Achsen am Joystick selber (x,y zum Steuern)
    • 1 Schieberegler (1 Vertikale Achse)
  • 11 Tasten, inklusive Feuerknopf
  • USB-Anschluss
  • Plug & Play Device
  • Symmetrischer Griff
  • für Rechts- und Linkshänder

Einsatz in der Software

In der Software wird er Joystick eingesetzt um zum einen den Roboter zu steuern (lenken) und zum anderen um Verschieden weitere Funktionen zu Bedienen. Darunter fällt die Bedienung der Kamera oder besser gesagt die Pan/Tilt Funktionalität. Des weiteren lässt sich über den Joystick die Kamera zentrieren und Screenshots erstellen.

Joystick-Tastenbelegung

Die hier aufgeführten Bilder zeigen die Belegung der Joystick-tasten. Diese Belegung ist fix und lässt sich im Programm nicht ändern. Sollte anderes Devices mit weniger Tasten angeschlossen werden, wird der Bedienungsumfang minimiert.


Starten des Staubsaugers.

Über den Feuerknopf am Joystick, kann der Staubsauger des Roomba An- bzw. Ausgeschaltet werden. Durch das drücken, startet der Staubsauger und bleibt solange aktiv wie der Feuerknopf gedrückt wird.
Steuern der PAN/TILT - Funktion der Kamera.

Über die vier oben am Joystick angebrachten Knöpfe lässt sich die PAN/TILT - Funktion der Kamera benutzen. Durch dass drücken der jeweiligen Knöpfe bewegt sich die Kamera in die entsprechende Richtung. Die Bewegung wird so lange ausgeführt, wie der Knopf gedrückt wird.
Kamera zentrieren und Screenshot erstellen.

Über die unteren Köpfe am Joystick, kann jeweils ein Screenshot des aktuellen Kamerabildes erstellt werden oder die Kamera wieder in der Mitte zentriert werden, sodass die Sicht wieder genau geradeaus ist. Dabei ist es möglich über die Knöpfe jeweils zu beiden Seiten diese Funktion auszuführen. Dadurch ist eine angenehme Bedienung sowohl für Links-, wie auch Rechtshänder gegeben.


Auslesen des Joysticks

Sobald der Joystick im Programm angewählt wird, wird er zyklisch alle 250ms abgefragt und die neuen Daten werden an den Roboter gesendet, bzw. an das Programm oder die andere angeschlossene Hardware.

Zugriff

Der Zugriff auf den Joystick wurde mit Hilfe der freien cross-platform multimedia library SDL (Simple DirectMedia Layer) realisiert. Durch diese ist es möglich leicht auf angeschlossenen Device über fertige Funktionen zuzugreifen und diese Abzufragen. Geschrieben wurde SDL in C und unterstützt nativ C++. Dadurch war es gut für das RoombaCtrl-Projekt geeignet. SDL steht und der GNU LGPL version 2 zur Verfügung.

Benutzt wurde SDL in der Version 1.2.14 (latest stable release, stand 15.08.2010)

Implementation

Öffnen des Devices

Geöffnet wird das Device im Prgramm mit der Methode initialize_device.

Mit folgendem Befehl kann ein bestimmtest Device geöffnet werden. "device_index" ist die Nummer (int) des Device welches geöffnet werden soll. Sollte das Device geöffnet worden sein, enthält "joy" dann den geöffneten Joysticks. Andernfalls wird Null zurück gegeben.

this->joy = SDL_JoystickOpen(device_index);

Abfragen der Eigenschaften des Devices

SDL bietet einige Funktionen um Informationen über das geöffnete Device zu sammeln. So kann der Name, die Anzahl der Achsen, die Anzahl der Tasten und vieles mehr Abgefragt werden. Wir benötigen hier nur das Abfragen der Achsen und Anzahl der Tasten, da die eigentliche Implementation nur den Logitech Attack 3 Joystick zugeschnitten ist. Dennoch ist es möglich andere Geräte Anzuschließen und damit zu steuern.

this->numOfAxis = SDL_JoystickNumAxes(this->joy);
this->numOfJoyButtons = SDL_JoystickNumButtons(this->joy);

Hier werden wird die Anzahl der Achsen und Buttons des geöffneten Joysticks abgefragt. "joy" ist der geöffnete Joystick.

Abfragen der Gedrückten Tasten

Bevor in der Software die Tasten und die Achsenposition abgefragt werden können, muss die Read Methode aufgerufen werden. Für nähere Informationen siehe Dokumentation des Programmes.

Die read() Methode

Über diese Methode wird das angeschlossene Gerät ausgelesen und der Status der gedrückten Tasten abgefragt. Dabei wird sich der Status der Tasten gemerkt und kann später beim abfragen verschieden Programmfunktionen aufrufen. Beispiel:

Abfrage -> Feuerbutton war gedrückt -> dies wird sich gemerkt -> beim Abfragen des Taste wird festgestellt das diese gedrückt war -> Staubsauger wird aktiviert

Beispiel des Abfragens einer Taste:

this->joyButtons[0] = SDL_JoystickGetButton(this->joy, 0) != 0;

Hier wird die 0 Taste des Joysticks abgefragt (beim Attack 3 ist dies der Feuerbutton). Sollte diese Gedrückt gewesen sein, wird 1 zurück gegeben.

Beispiel abfragen der Achsen:

SDL_JoystickGetAxis(this->joy, 1)
SDL_JoystickGetAxis(this->joy, 0)

Bei der Übergabe der 1 wird die X-Achse und bei 0 die Y-Achse ausgelesen.

Abfragen des Tasten

Nachdem ein Read erfolgt ist, welches den Joystick immer neu ausliest, können wir nun die einzelnen gewünschten Tasten abfragen ob sie gedrückt wurden. Mit anderen Worten wir können schauen ob die Taste gedrückt wurde, die nun eine Funktion auslösen soll. Vor jedem abfragen der Tasten, sollte die Read Methode ausgeführt werden, da die Daten sonst veraltet sind. Das Abfragen der Tasten erfolgt über die einzelnen public Methoden.


Abfragen der Achsen:

double JoystickCtrl::get_x_value()
double JoystickCtrl::get_y_value()

Abfragen der Tasten:

bool JoystickCtrl::is_fire_button_pressed()
bool JoystickCtrl::is_up_button_pressed()
bool JoystickCtrl::is_down_button_pressed()
bool JoystickCtrl::is_left_button_pressed()
bool JoystickCtrl::is_right_button_pressed()
bool JoystickCtrl::is_screen_left_button_pressed(void)
bool JoystickCtrl::is_center_cam_left_button_pressed(void)
bool JoystickCtrl::is_screen_right_button_pressed(void)
bool JoystickCtrl::is_center_cam_right_button_pressed(void)

Problembehandlung

  • Der Joystick ist angesteckt, aber in der Software nicht anzuwählen.
    • Behebung: Beim connecten zum Server wurde nicht angegeben welches Joystickdevice geöffnet werden soll. Nochmals diconnecten und richtiges Device angeben.
    • Behebung: Der Joytsick erst nach dem starten der Software angeschlossen. Ein schließen und erneutes starten der Software hilft dieses Problem zu beheben. (Nicht vergessen anzugeben welches Device beim Connecten geöffnet werden soll!)
  • Der Joystick befindet sich in ausgangsposition aber der Roomba bewegt sich langsam weiter.
    • Behebung: Hierbei den Joystick einfach nochmal leicht an tippen und der Roboter kommt zum Stillstand.

Weblinks

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge