Hi fellow wiki editors!

To help newly registered users get more familiar with the wiki (and maybe older users too) there is now a {{Welcome to the wiki}} template. Have a look at it and feel free to add it to new users discussion pages (and perhaps your own).

I have tried to keep the template short, but meaningful. /Johan G

De/Joystick

From FlightGear wiki
Jump to: navigation, search

Können Sie sich in der Wirklichkeit einen Piloten vorstellen, der seine (reale) Cessna alleine mittels einer Tastatur steuert? Für das richtige “Pilotengefühl” benötigt man mindestens einen Steuerknüppel (=”Joystick”) bzw. ein Steuerhorn (=”yoke”), einen Gashebel (=”throttle”), möglichst noch Pedale für das Seitenruder (=”rudder pedals”), man kann auch nie genug zusätzliche Schalter und Regler haben, auch ein echter Pilotensessel wäre nicht schlecht - am besten wäre natürlich ein ganzes Cockpit mit mehreren Instrumententafeln!

In FlightGear gibt es eine integrierte Unterstützung für einige dieser Geräte. Leider kann die schiere Menge der möglichen Kombinationen der verschiedensten externen Zusatzgeräten von den verschiedensten Herstellern für die unterschiedlichsten PCs und Betriebssysteme zu beträchtlichen Schwierigkeiten führen. Die erste Schwierigkeit ist schon, in der folgenden Beschreibung immer wieder alle möglichen Geräte aufzulisten – obwohl das beschriebene auf alle diese externen Zusatz-Geräte zutrifft. Somit mach ich mir das Leben einfach: Ich verwende den allgemeinen Begriff „Joystick“ im Folgenden für alle Steuerungs-Geräte – mit Ausnahme der Maus und der Tastatur!

Joystick oder Steuerhorn?

CH Products USB Fighterstick Saitek Pro Flight Cessna Yoke
CH Products USB Fighterstick Saitek Pro Flight Cessna Yoke


Die beiden gebräuchlichsten Geräte sind der Joystick (linkes Bild) und das Steuerhorn (rechtes Bild). Joysticks findet man in Kampfflugzeugen, Helikoptern und in Airbus-airlinern, während das Steuerhorn (=”yoke”) in nahezu allen anderen Flugzeugen zu finden ist, auch in Boeing Airlinern.

Joysticks sind grundsätzlich billiger, sie starten bei 15€. Steuerhörner (=Yokes) starten bei 100€. Wenn du neu beim Fliegen bist, ist ein schlichter Joystick (ca. 25€) erstmal die beste Möglichkeit, um die neue Fliegerei kennenzulernen.

Die folgende Tabelle soll dir bei der Auswahl behilflich sein. Allerdings lassen sich alle Flugzeuge auch mit allen PC-Bediengeräten fliegen. Komfortabler und realer ist es aber meißt so:

Joystick Steuerhorn
Preis 15€+ 100€+
Allgemein Luftfahrt No Yes
Helikopter Yes No
Kampfjets Yes No
Airbus Yes No
Boeing No Yes

Einige Bewertungen von Hardwareteilen können hier gefunden werden: Category:Hardware reviews(en).

Die Funktion

Damit die im FlightGear vorhandene automatische Erkennung der Steuerungs-Geräte funktioniert, muss es für jeden Joystick (etc.) eine XML-Steuerdatei geben, die beschreibt welche Achsen und/oder Knöpfe welche Funktionen im FlightGear wie auslöst. Diese Zuordnung nennt man „bindings“.

Diese XML-Steuerdatei selbst kann irgendeinen Namen haben - aber innerhalb der Datei muss am Anfangs der Name definiert sein, mit dem sich das Gerät am PC anmeldet (mehr dazu später). Und die Datei muss in dem Verzeichnis stehen auf das die Datei

FG_ROOT/joysticks.xml

verweist. In diesem Verzeichnis existieren üblicherweise Unterverzeichnisse per Hersteller der Geräte. Wenn Sie also z.B. nach der *.XML-Konfiguration für einen „CH Products“-Joystick suchen, sollten Sie im Verzeichnis

FG_ROOT/Input/Joysticks/CH

nachschauen. Voraussichtlich gibt es dort mehrere Steuerdateien für unterschiedliche Geräte mit unterschiedlichen Zuordnungen! Bei Geräten mit unterschiedlichem Namen aber gleicher Zuordnung wird keine extra Datei benötigt – allerdings müssen alle dazu passende „Gerätenamen“ in dieser einen Steuerungs-Datei aufgelistet sein.
Der standardmäßig in FlightGear integrierte Joystick-Support erkennt im Allgemeinen jeden installierten Joystick automatisch. Somit sollten Sie erst die Installation des FlightGear fertigstellen, ohne sich darüber den Kopf zu zerbrechen! Dann schließen Sie Ihren Joystick an (bevor Sie den FlightGear starten!) und schauen im FlightGear-Menü: “Hilfe” → “Joystick Informationen” nach, ob Ihr Joystick (inklusive des verwendeten Namens, der Belegung aller Schalter und Regler, etc.) erkannt wurde – siehe z.B.:

FGFS-Joystick-Info.png

An diesem Beispiel sehen Sie , dass der angeschlossene Joystick

  • der „Joystick #0:“ ist, und somit der erste und der einzige ist, der beim Start des FlightGear angeschlossen war. Falls mehrere Joysticks oder Joystick-Arten angeschlossen waren, erscheinen auch diese in der Liste!
  • „Mega World USB Game Controllers“ heißt (per Joystick-interner „Verdrahtung“)
  • vom PC erkannt und als „OK“ registriert wurde
  • im Betriebssystem über einen gültigen Geräte-Treiber verfügt
  • im FlightGear selbst über eine gültige Steuerungs-Datei verfügt! Das heißt es gibt eine Datei (FG_ROOT/Input/Joysticks/MegaWorld/USB-Game-Controllers.xml), in der die Zeile (<name>Mega World USB Game Controllers</name>) vorkommt.
  • über 5 analoge Regler (Axis n=0 bis n=4) und 4 Taster/Schalter (Button n=0 bis n=3) verfügt, die alle eine gültige Zuordnung haben. (Jawohl: Auch der „Button #1“ hat eine gültige Zuordnung – schauen Sie in der *.xml nach! Dass der Schreiber dieser XML vergessen hat uns diese mit einer Beschreibung (z.B. <desc>view cycle</desc>) mitzuteilen stört das System nicht! (Wenn es uns stört, können wir es ja selbst korrigieren! Im Folgenden sehen Sie auch wie!)
  • in „Ruhestellung“ ist, d.h. keine der „Axis“ ist außerhalb der Ruhestellung. Versuchen Sie es: Bewegen Sie die Regler Ihres Joysticks und beobachten die Auswirkungen im oberen Teil der Anzeige.


An Hand obiger Darstellung können Sie also schnell entscheiden ob ein Fehler vorliegt und was Sie tun sollten um ihn zu beheben:

  • Ist die Darstellung für Ihren Joystick richtig und sinnvoll und wie gewünscht? → Herzlichen Glückwunsch – Sie könnten dieses ganze Kapitel vergessen – wir empfehlen Ihnen aber dennoch das Kapitel einmal durchzulesen um ein gewisses Verständnis für die Funktion zu bekommen, und um zu erfahren wie Sie Ihren Joystick evtl. noch besser anpassen können!
  • Ist der Zugriff auf FlightGear-Menü: “Hilfe” → “Joystick Informationen” deaktiviert? → Starten Sie mit der Überprüfung ob der Joystick vom PC erkannt wird im nachfolgenden Kapitel.
  • Wird ein falscher Joystick angezeigt? → Beim Starten sucht FlightGear im Verzeichnis (und Unterverzeichnissen von) FG_ROOT/Input/joysticks nach einer *.xml-Datei die die Zeile <name>IhrGeräteName</name> enthält. Wenn also ein falscher Joystick angezeigt wird steht diese Zeile in einer falschen Datei – oder der „Name“ Ihres Gerätes ist anders als Sie glauben – oder Sie haben mehrere *.xml Dateien, die für diesen Joystick-Namen Definitionen enthalten!
    • Suchen und Korrigieren Sie die Steuerungs-Dateien im Verzeichnis FG_ROOT/Input/joysticks durch hinzufügen/entfernen der Zeile <name>IhrGeräteName</name>. Falls Sie dort keine passende XML-Steuerdatei finden starten Sie mit nachfolgenden Kapitel "Erstellen oder Ändern einer XML-Steuerdatei für Ihren Joystick".
    • Ansonsten starten Sie mit dem nächsten Kapitel.
  • Sind einige Zuordnungen nicht wie gewünscht editieren Sie die gewünschte Steuerungs-Datei. Siehe das folgende Kapitel.

Überprüfen ob der Joystick vom PC erkannt wird

Falls Sie den Joystick schon im FlightGear Menü “Hilfe” → “Joystick Informationen” gesehen haben, wurde er erkannt und Sie können mit dem nächsten Kapitel fortfahren.

Ansonsten starten Sie Ihren PC (natürlich mit angeschlossenem Joystick!!) und verifizieren Sie, ob der PC den Joystick erkennt und ob er funktioniert. In diesen ersten Tests wird nur die Kommunikation zwischen PC, Betriebssystem, Geräte-Treiber und Joystick getestet.

Zum Testen des Erkennens durch den PC selbst, gehen Sie folgendermaßen vor:

Für Windows:

  • Öffnen Sie Start → Einstellungen → Systemsteuerung → Gamecontroller

→ Es werden alle gefundenen Joysticks aufgelistet, z.B.: USB Game Controllers

  • Falls kein Joystick angezeigt wird, überprüfen Sie die Verbindung zwischen Ihrem PC und dem Joystick.
  • Suchen Sie in Internet Foren ob dort bereits Problem bezüglich Ihres Joysticks bekannt sind.
  • Doppelklicken Sie auf den angezeigten Joystick → damit öffnet sich bei den meisten Geräten ein Fenster in dem Sie schon alle (im Geräte-Treiber definierten) Funktionen testen können
  • Beachten Sie dabei, dass die Bezeichnungen innerhalb Windows anders sein können als Sie sie später für den FlightGear benötigen. z.B. könnten Regler in Windows als „Z-Ac“ und „X-Ro.“ etc. bezeichnet werden, für die Sie später die Bezeichnungen „axis 0“, „axis 1“ etc. benötigen. Falls bei der benötigten Zuordnung Zweifel bestehen, führen Sie auf jeden Fall auch den Test im nachfolgende Kapitel 2.5.1.b js_demo: Testen & Zuordnen der Joystick-Funktionen durch.


Für Linux:

  • Öffnen Sie ein Befehlsfenster und geben Sie ein: dmesg | grep Joystick
(Achten Sie auf den senkrechten Strich in der Mitte, auf deutschen Tastaturen: „AltGr“ + „<“)
  • die Antwort sollte ähnlich sein wie: [ 16.481211] generic-usb 0003:06A3:075C.0001: input,hidraw0: USB HID v1.11 Joystick [Saitek Saitek X52 Flight Control System] on usb-0000:00:02.0-4/input0
  • Merken Sie sich insbesondere den Namen in [ ]! Und wunderen Sie sich nicht über das 2*“Saitek“ – so heißt er nun mal und so meldet er sich am System an – und wenn Sie bei der Benutzung des Namens ein “Saitek“ weglassen funktioniert nix mehr!
  • Falls OK: weiter mit: 2.5.1.b


Für Mac OS X:

Ich kennen keine Mac OS X Routine die die Hardware mit dem Joystick anzeigt – somit gehen Sie bitte direkt zum nächsten Katpitel
Falls Probleme aufgedeckt wurden, sind dies reine System-interne Problem! Diese hätten absolut NICHTS mit der FlightGear-Installation zu tun! Auch andere Spiele etc. dürften nicht funktionieren! Sehen Sie in den Foren nach ob über Ihren Joystick im Zusammenhang mit Ihrem PC und/oder Betriebssystem Meldungen vorliegen. Oder fragen Sie Ihren Händler. Eventuell können Sie auch einen „neueren“ Geräte-Treiber für den Joystick aus dem Internet herunterladen und installieren. Der Fehler ist jedenfalls rein System-intern, und steht nicht im Zusammenhang mit der FlightGear - Installation!

js_demo: Testen & Zuordnen der Joystick-Funktionen

Hier verlassen wir also die reine System-Anbindung des Joysticks, und testen diesen selbst im System-Umfeld – wiederum erst mal ohne FlightGear!

Dies ist zugegebener Maßen der komplexeste und langwierigste Teil dieser ganzen Angelegenheit - aber auch der am meisten benötigte, wenn Sie eine bestehende XML-Steuerdatei ändern wollen! Denn hier ermitteln Sie nicht nur, ob eine „Axis“ oder ein „Button“ funktioniert – Sie erfahren auch die genaue Bezeichnung dafür – denn diese Bezeichnungen müssen Sie genau wissen wenn Sie die XML-Steuerdatei erstellen oder ändern wollen!

Es gibt zu eben Gesagtem eine einzige Ausnahme: Für Linux können Sie auch das Zusatzprogramm jstest benutzen (siehe nachfolgendes Kapitel). jstest ist etwas einfacher zu handhaben – aber eben nur für Linux verfügbar – und damit könnten Sie Verständigungs-Probleme bekommen wenn Sie Freunde um Rat fragen!

Starten Sie das Programm „js_demo“ wie folgt:

  • Für Windows:
    • Öffnen Sie Ihren „Explorer“ (rechter Mausklick auf Start → Explorer)
    • wechseln Sie ins das Verzeichnis: FG_ROOT\bin\Win32
    • Doppelklicken Sie auf js_demo.exe
  • Für Linux
    • Öffnen Sie ein Befehlsfenster:
    • und geben ein : FG_PROG/js_demo (z.B. /usr/games/js_demo)
  • Für Mac OS X:
    • Öffnen Sie die Terminal.app (/Applications/Utilities/)
    • wechseln Sie in das Verzeichnis: "cd /Applications/FlightGear.app/Contents/Resources"
    • und geben ein: $ ./js_demo



„js_demo“ erzeugt dann eine „aktive“ Liste ähnlich dem Folgenden:
(„aktiv“: die Werte in der Darstellung ändern sich, wenn Sie Regler und/oder Schalter an Ihrem Joystick bewegen!)

Joystick test program.
08:39, 15 May 2010 (UTC)08:39, 15 May 2010 (UTC)08:39, 15 May 2010 (UTC)08:39, 15 May 2010 (UTC)~~
Joystick 0: "Saitek Saitek X52 Flight Control System"
Joystick 1 not detected
Joystick 2 not detected
Joystick 3 not detected
Joystick 4 not detected
Joystick 5 not detected
Joystick 6 not detected
Joystick 7 not detected
+--------------------JS.0----------------------+
| Btns Ax:0 Ax:1 Ax:2 Ax:3 Ax:4 Ax:5 Ax:6 Ax:7 Ax:8 Ax:9 Ax:10 |
+----------------------------------------------+
| 800000 +0.0 +0.0 +1.0 -1.0 -1.0 +0.0 -1.0 +0.0 +0.0 +0.1 +0.1 | |

  • Sehen Sie als erstes, dass 8 Joysticks (0-7!) gleichzeitig angeschlossen sein können. (Hier ist allerdings nur einer vorhanden = die Nummer „0“).
  • Der zweite Teil zeigt eine Zeile mit „Btns“ (Tasten) am Anfang - was etwas verwirrend ist, da diese Zeile tatsächlich die Achsen-Namen und darunter die analogen Werte für diese Achsen anzeigt. Die tatsächlichen „Btns“-Werte (800000) stehen direkt unterhalb des Wortes „Btns.“.
  • Bewegen Sie Ihre Regler und beobachten Sie die Werte in der Zeile unterhalb der „Ax:n“-Werte. Diese Werte ändern sich entsprechend Ihrer Bewegung zwischen -1.0 und +1.0. Merken Sie sich welche Ax:n mit welchem Regler geändert wird. Diese Nummer benötigen Sie später in der XML-Steuerdatei. Am Besten schreiben Sie es gleich auf und fügen auch gleich hinzu, welche Funktion (Querruder, Seitenruder, etc.) sie dieser Achse zuteilen wollen.
  • Unterhalb des „Btns“ sehen Sie die Zahl „800000“ - diese zeigt die Aktionen der binären Taster an. Beim Drücken einer Taste wird eine der „0“en durch eine Zahl ersetzt. Dies sind allerdings binäre Zahlen die hexadezimal verschlüsselt sind: Also (sogar für EDV-Leute verwirrend!):
'Code = Btn.' 'Code = Btn.'

800001 = 0
800002 = 1
800004 = 2
800008 = 3
800010 = 4
800020 = 5
800040 = 6
800080 = 7

800100 = 8
800200 = 9
800400 = 10
800800 = 11
801000 = 12
802000 = 13
804000 = 14
808000 = 15
... etc ...


Eine Kombination mehrerer
Btns ist möglich. z.B.:

  • 801040 = Btn.12 & Btn.6
    • ( 801000 = Btn.12 )
    • ( 800040 = Btn.6 )
  • Erstellen Sie sich eine Liste mit den Code-Nummern und welche Funktion Sie diesen „Btns“ zufügen wollen.
  • Und vergewissern Sie sich dass ALLE Knöpfe, Regler, Schalter etc. Ihres Joysticks in oben gezeigter Liste eine Auswirkung haben!!


Wie schon oben gesagt: Es gibt keinen anderen, einfacheren Weg um die Zuordnung der vom PC-erkannten Joystick-Codes für FlightGear zu eruieren! Zusätzlich müssen Sie beachten, dass die verschiedenen Betriebssystem für einige Joystick-Funktionen unterschiedliche Codes erkennen können. Falls Sie also stolzer Besitzer mehrere PC's mit unterschiedlichen Betriebssystemen sind (oder Ihre XML-Datei an andere verteilen wollen), müssen Sie diese Prozedur evtl. mehrmals durchlaufen! Mehr dazu im Kapitel

Erstellen oder Ändern einer XML-Steuerdatei für Ihren Joystick.

jstest: (nur Linux) Testen & Zuordnen der Joystick-Funktionen

Die meisten Linux-Systeme bieten eine zusätzliche Anwendung zur Anzeige der Achsen und Tasten: „jstest“. Diese Anwendung hat den Vorteil, dass Achsen und Tasten mit Ihren direkten Codes angezeigt werden. z.B.:

~$ jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (Saitek Saitek X52 Flight Control System) has 11 axes (X, Y, Z, Rx, Ry, Rz, Throttle, Hat0X, Hat0Y, (null), (null))
and 34 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC, (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null)).

Testing ... (interrupt to exit)

Axes: 0: -86 1: -43 2: 32767 3:-32767 4:-32767 5: 85 6:-32767 7: 0 8: 0 9: 4681 10: 4681
Buttons: 0:off 1:off 2:off 3:on 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off

Axes: 0: -86 1: -43 2: 32767 3:-32767 4:-32767 5: 85 6:-32767 7: 0 8: 0 9: 4681 10: 4681
Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off 11:off 12:off 13:off 14:off 15:off</nowiki>

Diese Liste „läuft“ ständig und zeigt für jede Bewegung der Achsen und/oder Tasten an Ihrem Joystick eine neue Status-Zeile an – siehe vorstehend z.B. den „Button“ 3.

  • Wenn Sie also eine analoge „Achse“ bewegen (Steuerknüppel, Gashebel, Drehregler, Schieberegler, u.ä.) ändert sich ein „Axes“-Wert – hier werden übrigens nur die Nachkommastellen angezeigt. Zur Erinnerung: Die Werte liegen tatsächlich zwischen -1.0 und +1.0!
  • Wenn Sie eine Taste drücken ändert sich das „off“ hinter der entsprechenden „Button“-Nummer zu „on“ – etc.


Die Listen-Darstellung ist auch hier etwas „ingenieurmäßig verklausuliert“ – aber zumindest sehen Sie hier direkt und ohne Umrechnungen welche Nummer zu welcher Achse/Taste gehört! Merken Sie sich diese Zuordnungen – diese benötigen Sie wenn Sie anschließend Ihre eigene „*.xml“ schreiben oder ändern wollen.

Installation / Benutzung des „jstest“:

Dieses Programm ist nicht Bestandteil des FlightGear, sondern kann für die meisten Linux-Systeme zusätzlich installiert werden. Wenn Sie also ein Linux-System haben, öffnen Sie ein Befehlsfenster und geben einfach „jstest“ ein – dann können mehrere Reaktionen erfolgen:

  1. es erscheint direkt die Auflistung wie vorstehend gezeigt – sie Glücklicher!
  2. eine Liste der Optionen dieses Befehls wird angezeigt. Geben Sie dann den vollständigen Befehl ein. Etwa: jstest /dev/input/js0. „js0“ steht hier für den ersten Joystick der in Ihrem Device-Verzeichnis angezeigt wird!
  3. Es erscheint eine Benachrichtigung, wie etwa: „Der Befehl 'jstest' ist nicht installiert – Sie können ihn mit folgendem Befehl herunterladen und installieren: ….“. Geben Sie dann genau den vorgeschlagenen Befehl ein und folgen den Anweisungen – und wiederholen dann ab Punkt 1!
  4. Es erscheint einfach: „Befehl unbekannt“. Dann können Sie noch versuchen dieses Progrämmchen von irgendwo sonst zu erhalten – aber dazu sollten Sie sich dann schon etwas auskennen! Wie gesagt: Es ist nicht Bestandteil des FlightGear!

Erstellen oder Ändern einer XML-Steuerdatei für Ihren Joystick

An dieser Stelle wissen Sie nun, dass Ihr PC und Ihr Betriebssystem Ihren Joystick erkannt haben und auch ein entsprechender Gerätetreiber installiert ist und funktioniert. Zudem wissen Sie wie die Regler, Taste etc. systemintern benannt sind. Somit können Sie nun definieren welche Regler und Tasten während des Fliegens was bewirken sollen. Mit all dem nun erworbenen Wissen können Sie jetzt eine völlig neue XML-Steuerdatei schreiben – ABER: Da ich persönlich schon immer faul war, ziehe ich es vor eine bestehende Datei quasi als „Template“ (=Vorlage) zu nehmen und meinen Wünschen entsprechend abzuändern.


Als Template Vorlagen empfehlen wir 3 Möglichkeit – im Folgenden in der Reihenfolge der Güte unsere Empfehlung / Erfahrung etc.:

  1. Eine bereits bestehende XML-STEUERDATEI aus dem Verzeichnis/Unterverzeichnis FG_ROOT/Input/Joysticks aussuchen. Wählen Sie am besten eine, die etwa gleich viele Steuerorgane hat wie Ihr Joystick. Dann sind Sie einigermaßen sicher, dass schon mehrere Leute sich den Kopf darüber zerbrochen haben, welche Funktion man welchem Knopf zuordnen sollte.
  2. Lassen Sie sich von fgjs (siehe nächstes Kapitel) eine dem Joystick angepasste XML-STEUERDATEI anlegen und bearbeiten Sie diese. Die so erstellte Datei ist relative „standardisiert“ und enthält evtl. nicht alle Optionen die Sie suchen. Außerdem fehlen ein paar Kleinigkeiten (z.B. <name>) – Sie müssen Sie also auf jeden Fall anschließend überprüfen und anpassen.
  3. Sie nehmen die FG_ROOT/Input/Joysticks/template.xml. Diese enthält alle benötigten Daten für einen (kleineren) Standard-Joystick.

Suchen/Erstellen Sie sich also ein Template und verfahren wie folgt:

  • Vergleichen Sie im Anhang das Kapitel 1.4 Joystick.xml. In diesem finden Sie die „template.xml“ und dazu Kommentare zu den einzelnen Befehlen.
  • Öffnen Sie das gewünschte Template in einem Editor (in Windows benutzen Sie bitte nicht den „Editor“ sondern das „WordPad“!). Ich habe für die folgenden Erläuterungen die
FG_ROOT/Input/Joysticks/template.xml erwählt.
  • Speichern Sie diese als allererstes unter einem Namen Ihrer Wahl in einem Verzeichnis Ihrer Wahl. Eventuell müssen Sie jemanden mit Administrator-Rechten bitten Ihnen das Speichern in dieses Verzeichnisse zu gestatten!
  • Dann überschreiben Sie einzelne Befehle oder ganze Blöcke, oder fügen welche hinzu oder entfernen welche – ganz nach Ihrem Belieben (bzw. entsprechend Ihrem System!). Wichtig ist, dass jeder Block mit einem <axis n=..> oder einem <button n=..> anfängt und mit einem </axis> bzw. </button> aufhört. (Man beachte den „/“ als Kennzeichnung für das Ende!)
  • Als Nachschlagewerke empfehlen sich alle xml-Steuerdateien im Verzeichnis FG_ROOT/Input/Joysticks/ und die README: FG_ROOT/Docs/README.commands.
  • Beachten Sie: Die Nummerierung der Achsen und Tasten kann zwischen den Betriebssystemen durchaus unterschiedlich sein! Wenn Sie also der glückliche Besitzer zweier PCs mit unterschiedlichen Betriebssystemen sind, können Sie dies berücksichtigen indem Sie nicht nur die erste Zeile <axis n="6"> definieren sondern dazu noch die entsprechende Nummer für andere Betriebssysteme. z.B.:

<axis n="6">
 <number>
  <unix>7</unix>
  <mac>6</mac>
  <windows>6</windows>
 </number>
  ...u.s.w.
</axis>

  • Die Reihenfolge der einzelnen Axis- und Buttons-Blöcke ist absolut beliebig. Es ist aber SEHR empfehlenswert systematisch vorzugehen, damit Sie sich später noch zurechtfinden. Es kann sehr schnell sehr unübersichtlich werde!

„fgjs“: Erstellen einer neuen Template

Wie bereits vorstehend gesagt können Sie sich vom System eine neue, auf Ihren PC mit Ihrem Joystick passende XML-Steuerdatei generieren lassen. Das FlightGear Zusatzprogramm „fgjs“ (bzw. unter Windows „fgjs.exe“) tut genau dies für Sie, ohne dass Sie wissen müssen welcher Regler oder Taste welchen „Namen“ hat. Das Programm „fgjs“

  • analysiert wie viel Joysticks angeschlossen sind
  • analysiert dann die „Nullstellung“ Ihrer Regler, denn meist wollen die „Piloten“ nicht dass eine Regler schon anspricht wenn Sie ihn „nur scharf anschauen“ - ein paar Millimeter Spielraum ist meist durchaus erwünscht. In diesem Schritt gibt Ihnen das Programm 10 Sec. Zeit alle Ihre Regler innerhalb von 10 Sec. einmal so weit zu bewegen wie Sie wollen, dass der Regler noch NICHT anspricht. Ich weiß: Die Zeit ist knapp – üben Sie also schon einmal vorher. Im übrigen können Sie jederzeit abbrechen (z.B. durch Schließen des Befehls-Fensters).
  • geht dann durch eine Liste aller ihm bekannter möglichen Zuordnungen von Funktionen
  • für „axis“ (Regler, z.B. Aileron, Rudder, Throttel, etc.) und fordert Sie jeweils dazu auf den dafür gewünschten Regler in eine bestimmte Richtung zu bewegen – oder durch drücken eines „button“ (Taster, Schalter, etc.) keine Zuordnung vorzunehmen.
  • für „button“ (Taster, Schalter, etc.) und fordert Sie jeweils dazu auf den dafür gewünschten „button“ zu betätigen – oder durch Bewegen einer „axis“ (Regler, z.B. Aileron, Rudder, Throttel, etc.) keine Zuordnung vorzunehmen.


Anschließend bittet es um eine Bestätigung (y/n) – und geht dann zur nächsten Zuordnung (y) oder wiederholt die letzte (n).

  • Zum Abschluss sagt Ihnen das Programm wie es die erstellte XML-Steuerdatei benannt hat.


Vorsicht: Das Programm sagt Ihnen NICHT direkt in welchem Verzeichnis die Datei abgelegt wurde – und ob die Speicherung erfolgreich war! Wenn Sie z.B. versuchen in ein geschütztes Verzeichnis zu speichern – schlägt das Speichern ganz einfach fehl – und ihre ganze Mühe war umsonst !!!


Tatsächlich versucht das Programm die Daten in dem Verzeichnis abzuspeichern in dem es gestartet wurde! Wenn Sie das Programm also durch Maus-Doppelklick im „Programm-Verzeichnis“ starten, haben Sie gute Chancen das die Speicherung fehlschlägt! Denn die meisten Systeme erlauben den Schreibzugriff auf dieses Verzeichnis nur den ausgewiesenen Administratoren! Es empfiehlt sich also das „fgjs“ in ein „Privat-Verzeichnis“ zu speichern und dort auszuführen! Also z.B.: für Windows:


Starten Sie ein Befehlsfenster und geben den vollen Befehl ein. Für Windows z.B.:

C:\Dokumente und Einstellungen\IhrName>
C:\Dokumente und Einstellungen\IhrName>c:\Programme\FlightGear\bin\Win32\fgjs.exe

Für die andern Betriebssystem gehen Sie entsprechend vor. Im Anhang finden Sie ein Beispiel mit Kommentaren im Kapitel 1.4.2 Erstellung einer „fgjs.xml“|outline.

Der Test Ihrer neuen/geänderten Joystick-XML

Sie sollten Ihre ersten Tests aus einem Befehlsfenster heraus starten, um ALLE Fehlerinformation zu bekommen. Starten Sie nur mit den nötigsten Optionen um andere Fehler auszuschließen (und das Tippen zu reduzieren). Siehe hierzu das Kapitel 1.1.3.a Starten mit einer Befehls-Zeile. Fehlermeldungen zeigen ihnen meistens auch in welcher Datei an welcher Zeilennummer der Fehler aufgetreten ist → suchen Sie dort.

  • Fehler können sowohl beim Start direkt auftreten, dafür typisch
    • Tippfehler in Ihrer neuen Datei
    • oder auch das Vergessen von Endbefehlen (zu jedem „<xyz>“ gehört ein „</xyz>“ !!) oder eine falsche Reihenfolge der Endbefehle
    • oder nicht erlaubte Buchstaben „&“ oder „<“ oder „--“, diese allein stehenden Buchstaben (also z.B. bei „<--“ aus Versehen hinter „<“ ein Leerzeichen einfügen wäre äußerst schwer zu finden – diese allein stehenden Zeichen können auch innerhalb von Kommentaren zu Fehlern führen!
  • oder auch während des Einsatzes des Joysticks, dafür typisch:
  • Die Fehlermeldung einer „NASAL“-Datei (*.nas) – zumeist mit Hinweis von wo aus dieses Nasal-Script aufgerufen wurde. Denken Sie an Ihre „commands“ die Nasal-Scripts starten!

Nach jeder Änderung der Joystick-XML müssen Sie FlightGear komplett neu starten um die Korrekturen zu testen – eine Abkürzung (z.B. Debug → Reload) führt zu Fehlinformationen!!

Anhang

Die Joystick-Template.xml

Die 'FG_ROOT/Input/Joysticks/template.xml' können Sie als Basis nehmen um Ihre eigene *.xml zu kreieren. Sehen Sie in der linken Spalte die template.xml – und rechts einige Erläuterungen zu den Funktionsblöcken:

'FG_ROOT/Input/Joysticks/template.xml' 'Kommentar'
<?xml version="1.0"?> Format-Angabe – bleibt wie ist!
„“ interessiert das Programm nicht – es ist nur für Sie zum Erinnern!



Es empfiehlt sich sehr, hier die grundsätzlich gewünschten Zuordnungen festzuhalten – insbesondere bei komplexeren Joysticks!!

Dieser Teil ist im Std. Template.xml z.Z. nicht vorhanden – sollte aber!! Es hat keine funktionale Auswirkung – hilft aber Ihnen gewaltig – insbesondere bei komplexeren Joysticks.
„-->“ Ende des Kommentars

<PropertyList> Dies muss immer der erster Befehl sein (und am Ende beendet werden!)
<name>Your Joystick Name</name> Hier muss der genaue technische Name des Gerätes stehen! Mehrere <name> Befehle für andere Sticks gleicher Bauart können eingefügt werden.
<axis n="0">


<desc>Aileron</desc>
<direction>right</direction>
<binding>
<command>property-scale</command>
<property>/controls/flight/aileron</property>
<offset type="double">0.0</offset>
<factor type="double">1.0</factor>
<power type="int">1</power>
</binding>
</axis>

<axis n="1">
<desc>Elevator</desc>
<direction>down/forward</direction>
<binding>
<command>property-scale</command>
<property>/controls/flight/elevator</property>
<factor type="double">-1.0</factor>
<power type="int">1</power>
</binding>
</axis>


<axis n="2">
<desc>Rudder</desc>
<direction>right</direction>
<binding>
<command>property-scale</command>
<property>/controls/flight/rudder</property>
<factor type="double">1.0</factor>
<power type="int">1</power>
</binding>
</axis>

Der erste Analog-Wert „0“



Beachten Sie, dass jeder Start eines Befehlsbereiches (z.B. <axis ..>) mit einem entsprechenden Ende (</axis>) beendet werden muss! Dieses zu vergessen ist die beliebteste (und oft langwierigste!) Fehlerursache.

<desc> beinhaltet eine Beschreibung Ihrer Wahl

<binding> beinhaltet alle Befehle die mit dieser „axis“ oder “button” verbunden werden!

<command> ist der eigentliche Befehl (siehe auch andere xml-Steuerdatei-Dateien für andere Funktionen). Hier: Stufenweises Verstellen eines Wertes.

<property> ist die FlightGear Funktion die geändert wird! Siehe FlightGear → Menü → File → Browse Internal Properties : Jeder Wert kann geändert werden!! (Aber Sie sollten wissen was Sie tun!!)

<axis n="3">
<desc>Throttle</desc>
<direction>forward</direction>
<binding>
<command>nasal</command>
<script>controls.throttleAxis()</script>
</binding>
</axis>
Hier wird die Einstellung über ein “nasal”-script vorgenommen.



Das aufgerufene Script finden Sie in der Datei FG_ROOT/Nasal/controls.nas mit dem Einstieg throttleAxis().

<axis n="4">


<desc>View Direction</desc>
<direction>left</direction>
<low>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>view.panViewDir(1)</script> </binding> </low>
<high>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>view.panViewDir(-1)</script>
</binding>
</high>
</axis>

<axis n="5">
<desc>View Elevation</desc>
<direction>upward</direction>
<low>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>view.panViewPitch(1)</script>
</binding>
</low>
<high>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>view.panViewPitch(-1)</script>
</binding>
</high>
</axis>

Hier wird wieder ein Script ( FG_ROOT/Nasal/view.nas) zur Einstellung verwendet.




Insbesondere interessant sind hier die zwei Funktionen die von einem Head-Switch abgerufen werden: Drücken nach
<low> (runter) und <high> (rauf) führen die entgegengesetzten Funktionen aus (siehe (1) oder (-1)).

Interessant auch das <repeatable> == Wiederholung. D.h. es wird schrittweise verstellt

Beachten Sie: Es ist nur <direction>left</direction> definiert: „left“ (links) reicht völlig – denn „rechts“ ergibt sich aus (-1)

<axis n="5"> ist sehr ähnlich. Aber hier bedeutet <low> und <high> tatsächlich „rauf“/“runter“. Diese Bezeichnung hat also Nichts mit der tatsächliche Bewegung zu tun – sondern bezeichnet nur „2 Richtungen“! Auch das
<desc>View Elevation</desc>
ist nur ein Kommentar den Sie willkürlich wählen können

Die tatsächliche Flug-Bewegung ergibt sich wiederum aus dem Funktionsaufruf mit (1) oder (-1)

<button n="0">


<desc>View Cycle</desc>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>view.stepView(1)</script>
</binding>
</button>

Die erste Taste: Auch hier wird ein Script verwendet:


<script>view.stepView(1)</script>
und auch hier wird mit jedem Tastendruck eine Stufe weiter geschaltet (repeatable): Aber immer nur in eine Richtung (1). Für Rückwärts würden Sie eine zusätzliche Taste benötigen!

<button n="1">


<desc>Brakes</desc>
<binding>
<command>nasal</command>
<script>controls.applyBrakes(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.applyBrakes(0)</script>
</binding>
</mod-up>
</button>

<button n="2">
<desc>Left Brake</desc>
<binding>
<command>nasal</command>
<script>controls.applyBrakes(1, -1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.applyBrakes(0, -1)</script>
</binding>
</mod-up>
</button>

<button n="4">
<desc>Flaps Up</desc>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>controls.flapsDown(-1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.flapsDown(0)</script>
</binding>
</mod-up>
</button>

Ähnlich wie bei „Axis“ das <low> / <high> gibt es für die „Button“ ein <mod-up>. Dies ergibt 2 Funktionen:
  • Die erste vor (bzw. ganz ohne) dem <mod-up>
  • Die zweite zwischen <mod-up> und </mod-up>

Also z.B. beim Bremsen (Breaks) wird nur so lange gebremst wie die Taste gedrückt bleibt – beim Loslassen wird die Bremse wieder gelöst!

Ähnlich sind <button n="2"> bis <button n="5">

Deshalb habe ich hier die jeweils entgegengesetzte Funktionen 3 und 5 weggelassen.

„Left Break“ / „right Break“ wird natürlich insbesondere zum Steuern auf den Rollbahnen benötigt.

Bei <button n="4"> und <button n="5"> wird anstatt „so lange wie gedrückt“ ein:

  • Wenn gedrückt (stufenweise) runter
  • Wenn losgelassen (stufenweise) rauf.

Hier sollte es sich also besser nicht um einen Taster, sondern um einen 3“ Position Schalter“ handeln – den man in unterschiedliche Richtungen drücken kann!

<button n="6">


<desc>Elevator Trim Forward</desc>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>controls.elevatorTrim(0.75)</script>
</binding>
</button>

<button n="7">
<desc>Elevator Trim Backward</desc>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>controls.elevatorTrim(-0.75)</script> </binding>
</button>

Hier handelt es sich also eindeutig um 2 eigenständige Taster, die die jeweils gegenläufige Bewegung initiieren.!
<button n="8">


<desc>Landing Gear Toggle</desc>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>controls.gearToggle()</script>
</binding>
</button>

Gefällt mir nicht: Das Script macht ein „gearToggle“ - wobei nie sicher ist ob das Fahrwerk rein oder raus geht! (Togel = Umschalten).



Man sollte also 2 Tasten benutzen, wie bei den vorstehenden Trim-Funktion) .

</PropertyList> Vergessen Sie dies nicht am Ende!!

Einige Sonder-Zuordnungen

Wenn Sie der glückliche Besitzer eines Joysticks mit vielen „Buttons“ sind, möchten Sie sich vielleicht auch die eine oder andere der folgenden Funktionen auf den Joystick legen (aber denken Sie daran, dass Sie die zutreffende 'n=“x“' selbst herausfinden müssen!!):

<button n="x">


<desc>PTT - Push To Talk</desc>
<binding>
<command>nasal</command>
<script>controls.ptt(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.ptt(0)</script>
</binding>
</mod-up>
</button>

PTT für FGCOM:



Sollte ein Taster sein.

Damit wird das Mikrofon ein/aus geschaltet.

<button n="x">


<desc>Thrust Reverse</desc>
<binding>
<command>nasal</command>
<script>set_reverse_allow(1)</script>
</binding>
<binding>
<command>nasal</command>
<script>set_reverse(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>set_reverse(0)</script>
</binding>
<binding>
<command>nasal</command>
<script>set_reverse_allow(0)</script>
</binding>
</mod-up>
</button>

Umkehrschub:



Erleichtert den Einsatz des Umkehrschubes zum abbremsen gerade bei Landungen, wenn man alle Hände am Joystick benötigt!

Erstellung einer „fgjs.xml“

Siehe die Einführung dazu in Kapitel „fgjs“: 2.5.1.c „fgjs“: Erstellen einer neuen Template. Führen Sie das Programm in Ihrem Privat-Verzeichnis aus – da dort die neu erstellte XML-Steuerdatei problemlos gespeichert werden kann! Das Programm schlägt Ihnen nacheinander alle Einstellungen vor – aber nur in Englisch! Somit hier eine Übersetzung eines Programmablaufes:

z.B.:

Linux: IhrName@IhrPC:~$ FG_PROG/fgjs

Vista: C:\Users\IhrName>FG_PROG\fgjs.exe

Öffnen Sie ein Befehlsfenster:
  • Lassen Sie die Befehlsebene auf Ihrem Privatverzeichnis (IhrName@IhrPC:~$)
  • und geben den Befehl mit der kompletten Pfad-Angabe (FG_PROG/fgjs) ein!
Found 1 joystick(s)



Now measuring the dead band of your joystick. The dead band is the area where the joystick is centered and should not generate any input. Move all axes around in this dead zone during the ten seconds this test will take. Press enter to continue.

10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0

Joystick 0, axis 0: 0.000000
Joystick 0, axis 1: 0.000000
Joystick 0, axis 2: 0.000000
Joystick 0, axis 3: 0.000000
Joystick 0, axis 4: 0.000000
Joystick 0, axis 5: 0.000000

Dead band calibration finished. Press enter to start control assignment.

Einen Joystick gefunden



Als erstes werden Null-Positionen der Regler / axis) überprüft. Falls Ihre Regler größere Null-Positionen haben, bewegen Sie die Regel nur in dieser Zone. Das Testen dauert 10 Sec.

„Enter“ zum Fortfahren.

(zähle 10 Sec.)

Liste der gefunden „axis“ (Regler)

Kallibration der Null-Zone ist beendet.

„Enter“ zum Fortfahren

Joystick #0 "Mega World USB Game Controllers" has 6 axes Feststellung: Der Joystick hat 6 Regler


Move the control you wish to use for Aileron right


Pressing a button skips this axis

Assigned axis 2 on joystick 0 to control Aileron
Is this correct? (y/n) $ y

Diese Abfrage erfolgt nun nacheinander für alle 6 Regler:
  • „bewegen Sie den Regler nach rechts den Sie für das Querruder benutzen wollen:“
  • „Drücken Sie irgendeine Taste wenn Sie keinen Regler zuordnen wollen“
  • „Bestätigen Sie diese Zuordnung/Skip mit y“ („n“ wiederholt den Versuch)
Aileron right Querruder rechts
Elevator down/forward Höhenruder runter/vorwärts
Rudder right Seitenruder rechts
Throttle forward Gashebel vorwärts
View Direction left Sicht-Richtung links
View Elevation upward Sicht-Vertikal aufwärts
Dies sind die 6 Funktionen und Richtungen die für die Regler dieses Joysticks nacheinander abgefragt werden:
Brakes Bremsen
Left Brake (nur) linke Bremse
Right Brake (nur) rechte Bremse
Flaps Up Landeklappen rauf
Flaps Down Landeklappen runter
Elevator Trim Forward öhen-Trim vorwärts Elevator Trim Backward Höhen-Trim rückwärts
Landing Gear Toggle Fahrwerk rein/raus
Dies sind die 8 Funktionen und Richtungen die für die Tasten/Schalter dieses Joysticks nacheinander abgefragt werden:



Im Gegensatz zu obigen bewegen Sie nun einen Regler zum Überspringen einer Zuordnung.

Your joystick settings are in js0.xml.


Check and edit as desired. Once you are happy, move relevant js<n>.xml files to $FG_ROOT/Input/Joysticks/ (if you didn't use an attached controller, you don't need to move the corresponding file)

Die generierte Datei „js0.xml“ („0“ für Joystick-0) steht im gleichen Verzeichnis in dem das Programm (innerhalb des Befehls-Fensters) ausgeführt wurde! (Mein Vorschlag war: „IhrName@IhrPC/js0.xml“



bzw. in Win “C:\Users\IhrName\js0.xml“)

root@IhrPC:/usr/games# Ende des Programms