Soft de pilotage FFB pour PCBonjour à tous,
Pour éviter de poluer les sujets d'autres personnes et mon WIP sur un twin scud race, je crée un sujet à part pour mon soft d'interfacage de vJoy avec force feedback, principalement pour racecabs. Ce topic a pour but de mettre ici les infos importantes et d'assurer les échanges permettant d'aider ceux qui voudraient se lancer.
Suite à une phase de test avec Bandicoot et dvseb de la version alpha de mon soft, on va dire que mon soft peut passer en béta, tout du moins pour ceux utilisant le mode PWM analogique avec un arduino Leonardo, ou PWM digital via la carte d'Aganyte.
Tutoriel avec le FFB d'AganyteUn excellent tutoriel sur base du FFB controller d'Aganyte a été fait par Gojirien là:
https://www.gamoover.net/Forums/index.php?topic=42842.0Un grand merci à lui pour le temps qu'il a passé à cette rédaction, et aux autres pour les tests et essais (dvseb, marcus, ... et évidemment Aganyte !).
Fonctionnalités disponibles- supporte le retour analogique du volant par potentiomètre (
retour par encodeur pas encore supporté) avec calibrage du volant pour l'offset de centrage.
- configuration de vJoy : choix des axes qui seront reportés par le soft: X, Y, Z, RX, ... c'est vous qui choisissez les axes qui seront utilisés par le soft, en fonction de ce que vos jeux supportent.
- support des 11 effets de force-feedback issus de DirectInput, gestion du cumul d'effets (jusqu'à 100 simultanément).
- mode commande en couple : sortie analogique PWM, PWM centré, ou digitale (via uart). Ces modes permettent de piloter un variateur du marché, un variateur custom (ou un moteur DC via un L6203), un PWM2M2, ou la carte FFB Converter.
- mode compatibilité pour driveboard Sega Model 2/3 : cablage en direct sur la driveboard, type M2PAC. Support des driveboards avec EPROM Indy500, Le Mans, Scud Race (ECA/Dirtdevil), Sega Rally 2. Dans ces modes, la driveboard est basculée en mode commande en couple, ce qui permet d'émuler tous les effets. Avec certaines driveboard (Indy500 et Lemans) possibilité de tricher en utilisant une commutation haute fréquence des commandes (100Hz), ce qui augmente virtuellement la résolution du couple au détriment d'une légère vibration.
- mode RAW pour driveboard. Dans ce mode, le soft fait exactement pareil que le M2PAC, c'est à dire envoi en brut de la donnée de FFB des jeux Model1, Model 2 ou Model3 vers la driveboard. Attention, mon soft ne vérifie rien dans ce cas, c'est à vous de vérifier que votre driveboard "comprends" les données du jeu!!
- gestion de jeux de paramètres (
control set) que l'on peut changer à la volée pour le mapping des boutons et les plages de variation des axes en fonction du jeu. Les jeux de paramètres sont sauvés dans des fichiers XML que l'on peut s'échanger.
- mapping de bouton au choix, gestion de toggle, autofire, décodage des shifters en H, ou émulation par séquentiel.
- calibrage des axes volant et pédales pour chaque control set.
- tuning des effets et des gains de FFB pour chaque control set.
- configuration du mapping des lampes vers les sorties raw pour chaque control set.
- auto-détection du jeu en cours via nom d'exécutable et nom de fenêtre pour switcher automatiquement de control set selon le jeu démarré.
- paramètre en ligne de commande "-c nom_control_set" pour forcer un control set (par exemple depuis un fichier script .bat). Attention, dans ce cas il faut désactiver l'auto-détection.
- gestion des sorties (lampes) des jeux racing de nebula model 2, model 3, MAME (Virtua Racing/outrun/ridge racer/rave racer, cruis'n, ...) et Teknoparrot. Attention, il faut préciser comment les données sont à lire dans chaque control set.
- mode lights only (avec arduino, mais sans vjoy)
- option de démarrage avec Windows, option de réduction de l'appli vers le trayicon.
- émulation d'appui de touche (seulement jeux ou applications qui supportent la lecture d'un clavier en mode DirectInput ou via les API Win32 SendInput)
La dixieme release beta est là:
Release 0.4.10 (ajout de case clickable pour tester les entrées ou sorties + gestion de séquence de clignotement + corrections de bugs)
Un premier jeu de control set vous permet de vous familiariser avec la configuration à faire pour chaque jeu. Cela sera étendu au fur et à mesure.
ControlSets pour v0.4.3Les autres releases sont ici:
Toutes les releasesRoadmapNext en Beta :
- ajout d'un port de communication (type TCP en mode texte) pour envoyer des commandes depuis un autre soft ou via une ligne de commande afin de modifier le control set à la volée sans avoir besoin de relancer le logiciel, ou pour le cas où la détection automatique du processus du jeu est impossible.
- gestion d'entrée codeur incrémenal pour diminuer le bruit de mesure et affiner l'estimateur de vitesse et la commande en mode boucle fermée (spring notamment).
- gestion de carte d'extension d'IO sur base PCF8574 ou MCP23017 en I2C (pour ceux qui utilisent le leonardo en PWM et qui veulent bénéficier des sorties lampes).
Ce qui est
rayé veut dire que c'est intégré de mon côté mais pas forcément libéré pour vos tests.
Attention pour les lampes, il peut subsister des erreur de mapping. Ce sera résolu au fur et à mesure des jeux.
InstallationMon soft nécessite une config PC moyenne pour les jeux model 2/3 et assez haut de gamme pour les jeux Tecknoparrot ou les simulateurs PC. Prévoir un PC de moins de 3 ans, avec au moins 4 coeurs. Mon soft utilise presque 10% de charge sur un coeur pour assurer une communication et un traitement assez rapide des infos de FFB vers l'arduino. Si vous observez des ralentissements du retour d'effort (décalage des effets ou de la position volant), c'est probablement que la charge CPU est à 100% et que le jeu est trop gourmand. Essayez de diminuer la qualité des détails du jeu, ou prévoyez un CPU un poil plus costaud.
Pour l'installation, il faut aller chercher le zip contenant tous les softs et le code Arduino.
En premier lieu, si vous utilisez une config model 2/3 ou PWM seul, vous devez flasher le code arduino sur un Leonardo ou un Mega2560. Dans le cas de la carte FFB Converter d'Aganyte, prenez le firmware compatible avec mon protocole de communication.
Au niveau soft PC, installez d'abord "vJoySetup 2.2.1 signed.exe".
Ensuite, installez mon application en lancant "setup.exe". Faites l'installation par défaut.
Configurez vJoy via l'outil "Configure vJoy" (disponible dans le menu démarrer) pour avoir au moins 3 axes et 16 boutons.

Si vous aviez une ancienne installation de vJoy, vous devez faire un "reset all" de la configuration, puis refaire la configuration telle que montrée ci-dessus.
Ensuite lancez l'application vJoyIOFeederGUI et configurez le type de matériel via le bouton "Configure Target Hardware".

Dans cette page, plusieurs options de configuration sont disponibles.

Pour choisir la plateforme cible, il faut d'abord stopper le service de gestion en cliquant sur "Manager status" (le bouton doit devenir rouge), puis selectionner le type de plateforme : PWM, PWM centré, Driveboard (pour l'instant Indy500, LeMans, Scud Race, SegaRally2), RAW (M2PAC). Le choix Lindbergh generique est pour l'instant non fonctionnel.
Une fois choisi, vous pouvez relancer le service de gestion en cliquant à nouveau sur "Manager status" pour qu'il repasse en vert.
Si votre Arduino est connecté et votre cablage réalisé, vous devriez déjà voir les valeurs "raw" de l'axe X changer quand vous tournez le volant, ou l'axe Y, Z quand vous appuyez sur les pédales. De même, les raw inputs doivent changer quand vous appuyez sur les boutons.
Pour mapper la plage de variation du volant ou des pédales, le logiciel utiliser une table linéaire avec des points de contrôle.
La configuration d'un axe particulier se faire en cliquant sur "Axis mapping Editor".

Dans cet éditeur, l'axe horizontal correspond à l'entrée analogique "raw" (en % de l'entrée physique), et l'axe vertical correspond à la sortie calculée pour l'axe logique vJoy (en % de la valeur vJoy).
Pour vous aider à configurer un mapping pour le volant ou les pédales, vous avez les boutons "Calibrate wheel" et "Calibrate pedal" qui affichent un wizard permettant de rapidement calibrer ces entrées. Il suffit de suivre les indications et cliquer sur Next.
Si vous souhaitez un comportement non linéaire, par exemple pour certains jeux comme MarioKart Gamecube où la progression du joystick doit être non linéaire au centre pour éviter des gauches droites permanent du kart, il est possible de rajouter des points de contrôles et de les modifier en sélectionnant le point (cliquez dessus) puis en bougeant les sliders horizontaux et verticaux pour modifier le point.
De même, vous pouvez réassigner les boutons liés aux entrées physiques (raw inputs cablées sur l'arduino) vers les boutons logiques exposés par vJoy en cliquant sur le bouton "Configure buttons". Par défaut, chaque entrée physique (raw) est cablée sur le bouton logique (vJoy) de même numéro. Mais il est possible de supprimer un mapping (aucun numéro logique vJoy associé), ou de mapper une entrée vers n'importe quel bouton logique (raw 1 vers vjoy 5), voir même plusieurs boutons simultanés (raw 1 vers vJoy 1,2,3,4, soit 4 boutons logiques activés simultanéments sur une entrée physique).

Les options "AutoFire" et "Toggling" sont fonctionnelles.
Il est possible de décoder un shifter en H ou émuler un shifter en H via un Up/Down (ou des palettes).
Ce post explique par exemple comment émuler un shifter en H avec un Up/Down.
Le logiciel permet de simuler des appuis de touche clavier pour certains cas où il est difficile de gérer un joystick (cas de Hyperspin, ou pour quitter un émulateur via Esc). On peut donc créer des "règles" pour définir un comportement propre à chaque control set. Chaque règle doit définir au moins une source et un code de touche à simuler. Il est possible de définir différentes sources (entrées raw, boutons vJoy, axes raw, axes vJoy) et même de les combiner avec des opérations logiques (ET, OU) pour détecter des appuis simultanés et d'y ajouter une tempo (HoldTime) pour éviter les fausses manip. L'idée est par exemple de quitter un émulateur en émulant la touche ESC quand on reste appuyer sur Start + VR1 pendant 3 secondes.
Pour les axes, il faut définir un seuil en % pour détecter le passage dans un sens, et cocher "Inv" et mettre un autre seuil plus bas détecter un passage dans l'autre sens. Ainsi on peut émettre des codes de touches "flèche gauche" ou "flèche droit" pour le volant.

Pour un exemple avec les axes, voir
ce post.
Les effets FFB peuvent être réglés en intensité (gain) et en progressivité ou zone morte. Il est aussi possible de modifier individuellement les gains des effets.
Ces réglages sont disponibles dans la fenêtre "Tune FFB Effects".

Par sécurité, les paramètres de gain sont grisés et on ne peut les modifier que si la case "Allow detailled effct tuning below" est coché. Attention, ces paramètres peuvent être dangereux et rendre instable le volant.
Le paramètre "global gain" sert à régler le gain global du couple. C'est un gain proportionnel appliqué à la fin des calculs de résultante de couple une fois que tous les effets sont appliqués.
Le paramètre "power law" sert à donner un profil non linéaire au couple, par exemple pour atténuer les petits effets, ou à l'inverse les accentuer. Avec la valeur 1.0, la relation entre l'entrée et la sortie est linéaire. Avec 0.5, on accentue les petits effets (ce qui peut provoquer des oscillations), et à l'inverse avec 1.5 ou 2, on atténuer les petits effets (par exemple pour enlever les oscillations du volant en lignes droite).

Le paramètre "deadband" est, comme son nom l'indique, une zone morte, ou seuillage, qui permet de supprimer les demandes de couple trop petites.
Toutes ces modifications sont enregistrées dans un fichier de configuration XML dans le répertoire %appdata%\vJoyIOFeeder\config.xml
Il y a probablement beaucoup de bugs, alors un peu d'indulgence et de patience

Au fur et à mesure des questions, je complèterai ce topic avec schémas et d'autres précisions.
Je compte par contre sur vous pour me faire des retours et pourquoi pas un tutoriel avec photos et schémas.
Les questions sont les bienvenues !
Principe de fonctionnementLe soft s'appuie sur vJoy qui permet d'avoir un joystick virtuel avec gestion des effets de force feedback (ffb). Il requière donc une installation de vJoy et une configuration préalable avec au moins 3 axes et 16 boutons.
Le logiciel est écrit en C# et contient deux exécutables : un avec GUI (interface graphique) pour la configuration, un en version console qui consomme moins de ressources (pour les petites config PC).
Dans mon développement, j'ai pris comme première hypothèse que la plateforme cible est une borne arcade équipée de potentiomètres pour le retour de position angulaire du volant et pour les pédales. Donc pas besoin de codeur, même si j'envisage de supporter ce retour de position volant dans le futur.
Pour l'instant seuls quelques modes sont supportés :
- PWM + Direction (testé par Bandicoot)
- PWM centré (testé par DVSeb via carte FFB Converter d'Aganyte qui supportera les servoboards en version Midi=838-14174 pour Chihiro, Naomi et en version RS422=838-14592 pour Lindbergh, et testé par Marcus600 via PWM2M2)
- Driveboard Model 2 type Indy 500 ou Le mans (testé par moi). Rendu très bon, tous les effets sont émulables via les commandes en couple, malgré le faible nombre de pas de résolution (8 niveaux).
- Driveboard Model 3 type Scud avec EPR-19338A :
attention non polyvalente (testé par moi). Ne marche bien uniquement qu'en mode Raw avec jeux compatibles. Après quelques essais, je trouve le rendu très moyen en mode compatibilté (couple), car il n'y a pas assez de plage de couple disponible pour émuler tous les effets.- Driveboard Model 3 type SegaRally2 avec EPR-20512 : rendu très bon, tous les effets sont émulables via les commandes en couple. Résolution de la commande : 64 niveaux dans chaque sens.
Le soft utilise une carte Arduino pour faire les entrées/sorties mais toute l'intelligence est réalisée côté PC. La carte Arduino a un soft assez basique permettant uniquement de rafraichir des valeurs ou de piloter des sorties. La communication se fait par port série (via l'USB). Un mode d'autodétection permet de s'affranchir de configurer le port COM sur le PC.
Un arduino Leonardo (mode PWM) ou un Mega2560 (pilotage driveboard sega) sont les plateformes pour l'instant retenues. A savoir qu'un pro-micro est équivalent à un Leonardo pour moins de 5€.
De base, le soft gère des entrées analogiques de l'Arduino pour :
- le potentiomètre volant (A0)
- les potentiomètres pédales : accel (A1), frein (A2), embrayage (A3)
Au niveau entrées tout ou rien (boutons) :
- Leonardo : 12 boutons sur D2 à D8 puis D12 : 8 premiers boutons, puis D0/D1 et A4/A5 : 4 boutons suivants
- Mega2560 : pas encore défini mais pour l'instant idem Leonardo.
En sorties :
- Leonardo mode PWM+Dir : PWM (D9) + directions forward (D10)/reverse(D11)
- Leonardo mode PWM +/- dual : PWM forward (D9)/PWM reverse(D10) + Enable (D11)
- Leonardo en mode pwm centré digital (PWM2M2) : Tx sur pin D1, Rx sur pin D0
- Mega2560 mode driveboard, repris du M2PAC et donc compatible avec son cablage : sorties D22 à D29 vers les 8 entrées des driveboard Lemans/Scud (8bits), 8 sorties de pilotage de lampes sur A8 (Leader lamp, output 8 ), A10 (Start lamp, output 3), puis A11 à A14 (Viewbuttons, output 4 à 7) à relayer avec un module 6 sorties relais 5V. Les sorties A9 et A15 sont les outputs 1 et 2.
Lien vers le code source du feeder :
Readme du projet vJoyIOFeederWithFFB sur GithubLien vers le code source Arduino (ino) :
dossier fichiers Arduino