Joystick virtuel et simulateur de vol
|Parmi mes nombreux vices, il faut que je l’avoue : j’ai un côté geek. Celui-ci me pousse à perdre régulièrement mon temps sous X‑Plane, et j’aime trouver des trucs pour améliorer le confort d’utilisation. C’est ainsi que j’ai rapporté mon vieux volant de course pour ajouter un palonnier et un compensateur de profondeur à mon environnement de simulation.
Récemment, j’ai voulu m’attaquer à un truc qui m’agaçait depuis longtemps : le fait de n’avoir qu’une seule manette des gaz. Ça vous paraîtra peut-être pas évident, mais si vous voulez faire un demi-tour en bout de piste avec un DC‑3, vous avez largement intérêt à bloquer du frein d’un côté (jusque là, c’est assez évident) et à ne mettre du gaz que sur l’autre : deux moteurs sont plus puissants qu’un frein, et si les deux hélices tirent vous allez faire un long arc de cercle pathétique dans l’herbe.
Le soucis, c’est que si mon manche a bien des axes en rab, il s’agit de basculeurs gauche-droite, pas du tout prévus pour faire manette des gaz. L’idée était donc de récupérer l’un de ces axes, conjointement à la manette des gaz, pour dédoubler les commandes moteurs : en gros, “gaz à gauche = gaz plus basculeur” et “gaz à droite = gaz moins basculeur”. Or, rien dans X‑Plane n’est prévu pour faire ça.
J’ai trouvé une solution sous Windows, en testant Prepar3d, un simulateur de vol dérivé de Flight Simulator X développé par Lockheed-Martin. En l’absence de plug-in pour fusionner les axes du pédalier, j’ai dû utiliser Glove PIE / PPjoy, un logiciel permettant de créer un joystick virtuel à partir des interfaces réelles. Le problème était donc de trouver une solution analogue sous Linux.
Curieusement, il y a vingt programmes pour émuler une manette de console à partir d’un joystick, mais pas tellement pour virtualiser un joystick à partir de n’importe quoi. J’ai fini par trouver un truc obscur paumé sur Launchpad : Linuxjoymap. Contrairement à ce que son nom laisse penser, il ne s’agit pas de “remapper” un joystick (par exemple pour inverser deux boutons), mais bien d’en créer un, virtuel et programmable. Pas de binaire distribué, faut le compiler (assez classique du reste : un p’tit make all et ça roule) et le lancer en root (pour avoir le droit de tripatouiller la liste des périphériques pour ajouter un joystick, notons qu’un bit setuid fait très bien l’affaire).
Le soucis, c’est que Linuxjoymap n’a pas d’outil pour voir les axes actifs en temps réel. Et curieusement, tous ne sont pas consécutifs : sur mon manche, il y a roulis, lacet, gaz qui se suivent logiquement, mais les basculeurs gauche-droite ne sont pas juste après ; quand au volant, il y a volant, accélérateur… mais où est le frein ???!
Plutôt que de passer tous les tableaux en revue à la recherche des axes disparus, j’ai fait un truc plus pratique : un joystick virtuel qui copie un axe au choix d’un joystick réel, en permettant de changer d’axe à chaud, sans tout relancer, d’un clic sur un bouton. C’est pas très compliqué en fait (à part un piège de réinitialisation des variables assez chiant, contourné en utilisant un axe fantôme), mais rien n’est prévu pour surveiller l’état des variables pour savoir quel axe est en cours de surveillance… J’ai donc ajouté seize boutons virtuels, qui sont “enfoncés” quand l’axe du même numéro est copié sur l’axe virtuel.
Il n’y a donc plus qu’à utiliser un logiciel d’étalonnage pour regarder quel est le bouton enfoncé quand, enfin !, la valeur bouge avec la commande qu’on cherche. Et s’apercevoir que les basculeurs du Hotas sont pas les axes 3 et 4 (qui n’existent tout simplement pas), mais 5 et 6, et que côté volant, le frein, ben c’est l’axe 5 (les 2, 3 et 4 sont sautés).
Du coup, dans ma configuration actuelle, X‑Plane pense utiliser trois joysticks :
- un Thrustmaster Hotas X à cinq axes : roulis, tangage, ignoré, ignoré et pas d’hélice ;
- un Microsoft FF Wheel à trois axes : compensateur de profondeur, frein gauche et frein droit ;
- un illustre inconnu à trois axes : gaz gauche (en fait la fusion des axes ignorés du Hotas X), gaz droite (idem mais dans l’autre sens) et lacet (différence entre les deux pédales du FF Wheel).
Ça marche bien et c’est confortable, voilà.