DIY - quel type d'asservissement pour développer un bon FFB (débat)

  • Pour résumer, le débat était sur le fait que d'après Leo Bodnar, avec lequel Mizoo est d'accord, pour faire un FFB correctement il faut faire un asservissement de position au lieu d'une commande en couple et ajouter un capteur de couple sur l'arbre, en supposant qu'on puisse adapter le moteur de physique et qu'il y ait moyen de programmer cette approche (c'est pour ça que je parle de résoudre un système de N équations non linéaires à P inconnues, en intégrant un modèle de pneu direct moderne type pacejka (ou autre), la géométrie des suspensions, les frottements aérodynamiques etc..).

    Mais à l'occasion j'ouvrirai un topic pour parler de ça (ou un gentil administrateur fera le déplacement), parce que là on a bien a pourri le topic de Carlton avec un truc qui a rien à voir.

    ///////////////////////////////////////////////////

    La qualité du ffb c'est pas mal de critères.

    Bien sûr la linéarité du couple par rapport à commande en est un, mais je ne suis même pas sûr que ça soit si important.

    Une load cell est une solution pour mesurer le couple en statique, mais encore faut il être sur que la mesure est précise.... et le plus simple est encore d'utiliser une balance sur laquelle vient appuyer une barre actionnée par le rotor.

    Mais en ce qui concerne le couple, et ce qui est à mon avis plus important, c'est la capacité à avoir un couple parfaitement constant sur une rotation complète du rotor. Lors de mes essais sur un "petit" mige avec un vesc (modifié avec des shunts adaptés) j'ai clairement senti des variations rédhibitoires (en comparaison avec une ioni sur laquelle c'est nikel). Et avec des moteurs qui ont beaucoup de coging, si le drive ne les compense pas ou pas assez, même résultat, même si l'asservissement de courant est parfait. J'ai pu mettre la main sur un DD2 récemment, et le moins qu'on puisse dire c'est que c'est pas terrible.

    La résolution de la commande est aussi un critère, mais avec des pwm 32 bits je pense que ce n'est pas un problème (à vérifier, la précision réelle dépend de la fréquence pwm utilisée). Sachant aussi que l'effet force constante est entre +/- 10000, soit entre 14 et 15 bits. Donc à moins que le jeu ou le banc de test utilise un effet à fréquence 0 dont on module la phase sur 16 bits, on perd de la résolution déjà à ce niveau.

    Pour le reste des critères, je pense que ça se joue sur la partie qui génère la commande et les effets. En premier lieu la latence. Des jeux qui n'utilisent que la force constante (ex iRacing, mais à confirmer ça a peut-être changé), plus la latence est grande, plus il va y avoir des oscillations parasites et pas réalistes.

    Ensuite comment sont fait les calculs, est ce qu'il y a des pertes de précision parce qu'ils ne sont pas effectués comme il faut ?

    Et concernant la qualité des effets de friction/damping, la précision de l'encodeur va jouer. Idéalement pour s'en affranchir il faut que les tests soient fait avec un encodeur type biss-c 24 bits qu'on trouve pour les miges.

    Enfin la qualité d'implémentation des butées logicielles, c'est pas si simple de faire ça correctement (apparemment :B )

  • Complexe et intéressant.

    Membre depuis 02/01/2007. Win 11 64 bits.I5 13600K. NVIDIA GF 2080ti 12gb. 2 x 16mb DDR5 . Simucube 2 Pro. Pimax 8k+. Heusinkveld Pro 3 pédales.

  • En FOC, si la mesure de courant est bancale, le résultat sera bancal, et tant qu'on aura pas validé la chaine de mesure de ces VESC chinois on ne saura pas si ça vient du soft ou du hard. Mais le fait de n'avoir que 2 shunt de courant n'est déjà pas idéal.

    Ce n'est pas tant la linéarité que je voulais vérifier mais les possibles overshoot et oscillations, mais s'il y en a on doit le voir sur le résultat d'un suivi de position.

    Les effets internes, type amorti, inertie et friction, sont en effet très important, et loin d'être trivial à implémenter, surtout avec un encodeur à faible résolution (< 20.000 CPR).

    Un filtre de reconstruction est aussi obligatoire sur des jeux qui ne rafraichissent le FFB qu'à 60Hz.

    Message modifié 2 fois, dernière modification par Mizoo (6 septembre 2021 à 09:03).

  • Un filtre de reconstruction n'est pas obligatoire, ça va juste lisser le signal, mais même s'il est prédictif ça n'empêchera pas ni ne diminuera pas les oscillations potentielles.

    Le seul moyen que GD a implémenté pour ce pb particulier est un filtre bouchon, mais j'ai toujours trouvé cette solution bancale et cela va forcément bouffer des informations.

    J'essaie de trouver une analogie sans utiliser le mot "Caca", mais je ne trouve pas :D . En audio, un filtre bouchon 50 Hz c'est déjà pas top, mais au moins c'est dans des fréquences pas trop utilisées normalement, mais en FFB, 50 Hz c'est en plein dedans. Mais bon, à part convaincre les développeurs d'augmenter le fréquence de rafraîchissement de la physique, je vois pas trop d'autres solutions.

    Mais je considère qu'une simulation dans laquelle tu ne peux pas lâcher le volant en ligne droite sans que ça oscille, c'est mal.

  • Comme tu le dis, pour limiter les oscillations, à moins d'augmenter la fréquence de rafraichissement, ou forcer sur la friction/amorti c'est assez compliqué.

    C'est entre autres pour ça que je rejoignais l'avis de Leo Bodnar quand il disait qu'un volant FFB devrait être piloté en position et équipé d'un capteur de couple.

    Dans nos "simus", le problème d'asservissement est pris à l'envers, mais lié au fait qu'ils doivent fonctionner avec des périphériques pas chers (encore que cet argument ne tient plus vu le budget des simracers passionnés).

    EDIT: on devrait déplacer cette discussion dans l'autre topic, plus générique.

    Message modifié 3 fois, dernière modification par Mizoo (6 septembre 2021 à 11:01).

  • Oui il faudrait déplacer, c'est H.S.

    Là je ne suis pas trop d'accord sur le pilotage en position. Le contact pneu-sol est un système "semi-ouvert", et c'est le pilote qui le ferme avec ses mains. Je dis "semi ouvert" parce que si on lâche son volant dans un virage IRL, le volant va se stabiliser par rapport à la direction de la vitesse, et appliquer un couple par dessus ça modifie complètement la dynamique du système. Donc faire ça avec un asservissement de position, je ne vois pas trop, et mettre un capteur de couple, c'est juste impossible à moins de filtrer à mort pour éviter les boucles de rétroaction.

    Mais c'est certain que pour faire un FFB correct il faut un taux de rafraichissement de la physique le plus élevé possible, une latence du FFB la plus faible, et une connaissance du gain couple/commande + la friction mécanique et l'inertie (qui peut varier selon le volant)...

  • Il n'y a pas de problème de rétroaction car tu connais le couple moteur (que tu pilotes).

    Si je prends l'exemple du donut ou de la ligne droite, le volant n'oscillera jamais, car le moteur physique sait très bien où doit se trouver le volant quand il est lâché. Il se déplacera de la même façon quelque soit le volant utilisé, il n'y aura aucun réglage à faire. Actuellement la vitesse de retour du volant dépend de la tension d'alimentation, ce qui est absurde.

    Par contre il faut une boucle très rapide, bien sûr, c'est pour cela que l'on ne risque pas de le voir sur nos jeux.

    Message modifié 1 fois, dernière modification par Mizoo (6 septembre 2021 à 11:53).

  • Si tu fais un asservissement de position, bien sûr que le volant n'oscillera plus (sauf si l'asservissement est mal réglé, sachant que l'inertie du volant peut varier, il faudrait un asservissement adaptatif, ou calibrer à chaque changement de volant).

    Mais les modèles de pneus calculent force appliquée au pneu et son point d'application et en déduisent le couple dans l'arbre de direction, et c'est le couple ajouté/soustrait par le pilote qui va modifier la dynamique du système. Je ne vois pas comment intégrer ça dans un asservissement de position à part peut être en limitant le couple max en temps réel. Je ne vois pas non plus trop ce que vient faire un capteur de couple dans l'histoire. Mais je suis ouvert :B

  • Le capteur de couple sert à savoir quelle force le pilote applique sur le volant. Et suivant l'assistance réglée dans le moteur physique le moteur opposera plus ou moins de résistance.

    Dans tous les volants dédiés au professionnel tu as un capteur de couple (Sensodrive par ex.).

    EDIT: Je sens que, pour une fois, on ne sera pas d'accord :P

    Et je n'ai pas dit que c'était compatible avec les moteurs de simulation actuels.

    Message modifié 4 fois, dernière modification par Mizoo (6 septembre 2021 à 12:03).

  • Ok, et pour les directions non assistées ?

    J'ai regardé Sensodrive, mais il n'y a pa beaucoup d'infos. Pour le logiciel c'est génial il y a une option à 2000 € "The software model adjusts the steering wheel's force feedback behavior based on the vehicle speed in the simulation. For a realistic driving experience." :hihihi: . Si c'est seulement la vitesse qu'il prennent en compte, ça promet...

    Bref je ne demande qu'à tester, mais ce type d'approche me parait difficile à implémenter au niveau du moteur de physique. Le contact pneu-sol est tout sauf linéaire (quand on le modélise de manière un peu évolué).

  • Ok, et pour les directions non assistées ?

    Si ton moteur simule une voiture avec direction non assistée, il faudra appliquer plus d'effort sur le volant pour qu'il tourne.

    Dernier exemple, le frottement statique, qui empêche le volant de tourner tant que tu n'as pas appliqué une force au moins égale à celle du frottement. Comment veux-tu l'implémenter correctement sans mesurer la force transmise par le pilote ?

    Message modifié 4 fois, dernière modification par Mizoo (6 septembre 2021 à 13:00).

  • Dernier exemple, le frottement statique, qui empêche le volant de tourner tant que tu n'as pas appliqué une force au moins égale à celle du frottement. Comment veux-tu l'implémenter correctement sans mesurer la force transmise par le pilote ?

    Oui je suis d'accord que c'est la seule manière d'implémenter correctement ce type de frottement, et pour le reste c'est pareil, sauf que c'est dynamique.

    Sur le principe je crois qu'on est d'accord, mais moi je parle de possibilité en terme d'algorithme. Résoudre un système de N équations non linéaires à P inconnues, en intégrant un modèle de pneu direct moderne type pacejka, la géométrie des suspensions, les frottements aérodynamiques etc.., en tout cas moi je ne sais pas faire. Peut être en linéarisant tout ça à chaque trame. Sans doute magicfr aurait quelque chose à dire là dessus ?

    Carlton : quel genre de bug c'était ? Tu crois que ça pourrait résoudre le problème que j'ai eu ? Je suis prêt à tester, enfin pas tout de suite tout de suite hein :)

  • ah bah voilà, tu nous fais rêver et tout et puis rien :hihihi:

    A savoir que c'est un peu ce que je fais dans mon "vieux" moteur de jeu, je calcule l'angle que devrait prendre le pneu sans contrainte sur le volant et les autres contributions (scrub, bump steer par ex), et j'applique (entre autre) un effet ressort dont je module le centre et le gain. J'avais essayé d'autres approches mais c'était la seule stable, mais ça reste une gruge et le calcul est pas mal empirique.

  • De mémoire je ne retrouve pas la page avec les equations des equivalent Direct Input.

    T: torque du moteur Newton Metre ( Nm )

    W: vitesse de rotation du moteur radians par seconde ( r/s)

    Sign( X ) : signe de X , -1 ou +1

    k : parametre de l'effet ] 0, Inf [

    Frottement/Friction : T = - k * Sign( W )

    Dampening/Amortissement: T = - k * W

    Inertia/Inertie: T = k * W²

    C'est complétement indépendant de ce que fait le joueur et peut etre completement calculer en interne du driver ou de la carte ( STM32, Blueboard ) entre le PC et le Servo Drive.

    C'est pour cela que plus l'encodeur est de precis moins ces effets sont granuleux.

    J'ai pas lu TOUT le thread donc j'espere que j'ai compris la question correctement.

    Asus Prime X570-P - AMD 5800X3D - 32GB CAS16 - Gigabyte RTX 4090 Waterforce - Pimax Crystal.

    Simucube1 20Nm Mige - Wave Italy Monza - Bash Pro Actice HShifter - DSD ButonBox - Ascher F28SC & BM16SC - XeroPlay QR - PT Actuator Champion GT

  • Non tu n'as pas compris du tout la question :hihihi: (ou elle a été mal posée).

    Pour résumer, le débat était sur le fait que d'après Leo Bodnar, avec lequel Mizoo est d'accord, pour faire un FFB correctement il faut faire un asservissement de position au lieu d'une commande en couple et ajouter un capteur de couple sur l'arbre, en supposant qu'on puisse adapter le moteur de physique et qu'il y ait moyen de programmer cette approche (c'est pour ça que je parle de résoudre un système de N équations non linéaires à P inconnues, en intégrant un modèle de pneu direct moderne type pacejka (ou autre), la géométrie des suspensions, les frottements aérodynamiques etc..).

    Mais à l'occasion j'ouvrirai un topic pour parler de ça (ou un gentil administrateur fera le déplacement), parce que là on a bien a pourri le topic de Carlton avec un truc qui a rien à voir.