Programmation servo pour une gauge non linéaire

Questions de programmation / Offset FSUIPC et IOCP

Re: Programmation servo pour une gauge non linéaire

Messagede pierre01 » Mar 1 Juil 2014 13:40

C'est une gauge affichée de Laurent et il y a un rapport de 10 entre les 2 échelles !
Je n'ai aucun saut entre les 2 échelles, mais j'ai fait attention au moment de passer d'une échelle à l'autre et la limite est à une unité près entre la montée et la descente.
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1771
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: Programmation servo pour une gauge non linéaire

Messagede pierre01 » Mar 1 Juil 2014 13:47

Le Pb de l'imprécision entre un sens et l'autre ne pourrait-il pas provenir du jeux entre les pignons ?
Il y a aussi le fait avec un système mécanique (servo, pignon ...) que si tu demandes un très petit mouvement, tu n'as pas le même point d'arrêt que si tu viens de plus loin. Le moteur n'ayant quelquefois pas le temps d'atteindre sa vitesse max que l'ordre d'arrêt arrive, d'ou Pb d'inertie !
A+
Pierre.
Avatar de l’utilisateur
pierre01
 
Messages: 1771
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 15:31

Etant donné que je connais mes limites en mathématiques, j'ai directement fait appel à un bon pote ingénieur qui adore ce genre de trucs...
Il m'a dit "file moi tes points je te trouve ta fonction sans problème"
Je lui file mes points.
Et il finit par me renvoyer "ah ouais, mais non, là c'est vraiment trop tordu, t'auras de fonction pour ça."
Enfin il m'a filé un truc (pour sauver l'honneur), la fonction fait 5 lignes de hiéroglyphes en tous genre et encore il m'a précisé que ça ne collerait pas pour certains points.


J'ai commencé à coder noeud par noeud, je ne sais pas si la taille du code peut poser problème?
C'est vraiment pas terrible comparé aux autres gauges (il y a des erreurs de plus de 5kts et il faut parfois passer de 80 à 90kts pour voir l'aiguille bouger d'un seul coup), mais c'est mieux qu'au début.
Je ne comprends vraiment pas ce qu'il se passe avec cette gauge.
Je penchais de plus ne plus pour un soucis d'imprécision "hardware", mais quand je prends lIOcard test, j'arrive à faire bouger l'aiguille assez précisément.
Je ne comprends pas pourquoi dans FS c'est aussi grossier.
Quand je vois la fluidité du VSI (avec un pauvre servo chinois ne plus, alors que là j'ai un vrai sanwa, pour une fois!), on dirait un moteur pas à pas, je pige pas pourquoi c'est aussi catastrophique.
Dernière édition par FiX le Mar 1 Juil 2014 16:59, édité 1 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 15:34

pierre01 a écrit:Le Pb de l'imprécision entre un sens et l'autre ne pourrait-il pas provenir du jeux entre les pignons ?
Il y a aussi le fait avec un système mécanique (servo, pignon ...) que si tu demandes un très petit mouvement, tu n'as pas le même point d'arrêt que si tu viens de plus loin. Le moteur n'ayant quelquefois pas le temps d'atteindre sa vitesse max que l'ordre d'arrêt arrive, d'ou Pb d'inertie !


Oui, oui, je pense qu'il y a de ça aussi.
C'est un peu un coup dur là, je ne pensais pas me retrouver embêté sur un pauvre badin. Ca calme un peu l'euphorie de l'interfaçage de gauge...
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede rockclodbuster » Mar 1 Juil 2014 17:16

FiX a écrit:
rockclodbuster a écrit:tu ne pourrais pas bêtement remplacer la graduation de la gauge pour la rendre linéaire a la place de te casser la tete avec la prog?


Ah bah non, ce sont des gauges réelles, tout l'intérêt c'est leur esthétique et le fait que ce soit la vraie... cligneoeil


Ha! ok pas bonne idée. blemeblanc

et c'est pas parce qu'un servo est d'une "grande" marque qu'il sera plus précis. j'ai des Hitec hs-311 (leur standard bas prix) que je peut bouger de 2-3 degré a la main avec un palonnier droit.

est-ce que tu utilise les engrenage d'origine ou tu les a remplacé?? parce que je trouve bizzard que tu ai du jeu sur un instrument réel.
rockclodbuster
 
Messages: 29
Inscription: 14/05/11
Localisation: témiscaming, québec

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 17:25

rockclodbuster a écrit:
FiX a écrit:
rockclodbuster a écrit:tu ne pourrais pas bêtement remplacer la graduation de la gauge pour la rendre linéaire a la place de te casser la tete avec la prog?


Ah bah non, ce sont des gauges réelles, tout l'intérêt c'est leur esthétique et le fait que ce soit la vraie... cligneoeil


Ha! ok pas bonne idée. blemeblanc

et c'est pas parce qu'un servo est d'une "grande" marque qu'il sera plus précis. j'ai des Hitec hs-311 (leur standard bas prix) que je peut bouger de 2-3 degré a la main avec un palonnier droit.

est-ce que tu utilise les engrenage d'origine ou tu les a remplacé?? parce que je trouve bizzard que tu ai du jeu sur un instrument réel.


Le servo est d'origine, mais on rajoute des engrenages entre sa sortie et l'instrument réel et là il peut y avoir un peu de jeu.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 17:34

Hormis le problème de linéarité et le problème de jeu mécanique (qui n'est pas plus important que sur mes autres gauges bricolées qui sont fluides et précises), je pense que j'ai quand même un problème de code.

Parce que lorsque j'utilise le soft pour tester l'USB-servo en déplaçant le curseur cran par cran avec le clavier, j'ai une bien plus grande précision et fluidité que lorsque je l'utilise avec FS via le SIOC.
Dans FS, chaque noeud gagné est un gros à-coup dans le servo de plusieurs pas (alors que "mécaniquement" le déplacement pourrait se faire beaucoup plus précisément, pas à pas).
Je ne dois pas m'y prendre de la bonne manière avec le script.
Dans mon code, on va de noeud en noeud, alors que ma gauge (servo+mécanique) est capable de plus de précision.
J'ai utilisé l'offset de la vitesse IAS que j'ai converti en noeud en divisant par 128 et je fais mon calcul à partir de cette vitesse convertie en noeud.
Finalement l'offset est 128 fois plus précis que la valeur en noeud que j'utilise.

Voici un morceau de mon script (j'ai pas tout mis, c'est toujours la même chose)

Code: Tout sélectionner
Var 0000, name init, Value 0
{
  &servo_ias = 990   
}

Var 0015, name servo_ias, Link USB_SERVOS, Output 6, PosL 190, PosC 515, PosR 990     // servo air speed
{
  IF &servo_ias < 190
  {
    &servo_ias = 190   
  }
  IF &servo_ias > 990
  {
    &servo_ias = 990   
  }
}

Var 0016, name ias_fs, Link FSUIPC_INOUT, Offset $02BC, Length 4     // offset IAS x128
{
  &IAS_conv = &ias_fs / 128
  IF &IAS_conv > 0
  {
    IF &IAS_conv <= 40
    {
      L0 = &IAS_conv * 2.13
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 40
  {
    IF &IAS_conv <= 50
    {
      L0 = &IAS_conv * 2.54
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 50
  {
    IF &IAS_conv <= 70
    {
      L0 = &IAS_conv * 3.12
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 70
  {
    IF &IAS_conv <= 80
    {
      L0 = &IAS_conv * 4.03
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 80
  {
    IF &IAS_conv <= 85
    {
      L0 = &IAS_conv * 4.1
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 85
  {
    IF &IAS_conv <= 87
    {
      L0 = &IAS_conv * 4.24
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 87
  {
    IF &IAS_conv <= 89
    {
      L0 = &IAS_conv * 4.3
      &servo_ias = 990 - L0
    }
  }
  IF &IAS_conv > 89
  {
    IF &IAS_conv <= 90
    {
      L0 = &IAS_conv * 4.43
      &servo_ias = 990 - L0
    }
  }



Parce que si ma gauge peut être fluide et précise "à la main" avec le soft IOcard-test, c'est donc mon code qui est mauvais. gratgrat


(Je suis en train de mettre 2 vidéos en ligne, une avec le déplacement "manuel" du servo et une avec le SIOC dans FS)
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: Programmation servo pour une gauge non linéaire

Messagede A320 hérétique » Mar 1 Juil 2014 18:11

Au lieu de tester sur IAS_conv, testes sur ias_fs, en multipliant les valeurs auxquelles tu compares par 128
Au lieu de calculer les L0 à partir de IAS_conv en multipliant, calcules à partir de ias_fs en divisant

Tu y gagneras en précision

Si tu as du jeu dans les engrenages, tu peux faire un rattrapage de jeu comme sur une CNC (tu rajoutes un petit mouvement à chaque fois que tu changes de sens)

Et penses au timer, comme ça tu es sur d'avoir un évènement régulièrement et donc des mouvements réguliers, car encore une fois je ne suis pas certain que SIOC soit très clean face aux variations continues

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 4070 Ti Super sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3356
Inscription: 2/09/12
Localisation: Pornic

Re: Programmation servo pour une gauge non linéaire

Messagede yveca » Mar 1 Juil 2014 19:36

Bonjour Fix ,
Pour les gauges non linéaires , il faut effectivement découper en tranches , c'est la méthode la plus simple.
Chaque tronçon est une équation de forme y=ax+b
Le a et le b sont différents pour chaque équation , dans ton code le b est 990 pour tous les tronçons !Ceci veut dire que ton code represente en fait ,un faisceau de courbes partant d'un point unique (le b ordonnée à l'origine) au lieu d'une suite de courbes s'enchainant les unes à la suite des autres , le problème vient de là .
Regarde mon tuto (rubrique Tutos)à la fin il y a le code pour chaque instrument tu verras les 6 équations qui forment le code pour l'IAS et tu constate que le b est différent.
Tu peux utiliser excel pour faire un tableau des valeurs et calculer a et b .
Il y a une feuille de calcul mise en ligne par Colibri que tu peux utiliser pour calculer tes équations.
Un découpage en 6 ou 8 tronçons (segments de courbes ) est largement suffisant et il n'y a pas de sauts .

Jacques
(Yveca)
yveca
 
Messages: 56
Inscription: 6/10/12

Re: Programmation servo pour une gauge non linéaire

Messagede FiX » Mar 1 Juil 2014 21:07

Merci!
Je vais regarder tout ça, mais je vais d'abord une petite pause, en faisant le scripte du compte tour, une bonne vieille gauge bien linéaire, ça va me changer un peu les idées!


Pour le badin:

Voici la vidéo de la gauge avec IOcard-tester:
https://vimeo.com/99647206
Une accélération progressive, c'est relativement précis et fluide.

Et voici ce que ça donne dans FSX;
https://vimeo.com/99647208
On voit bien la différence...

Donc à priori, si la gauge est capable de donner le résultat que l'on voit sur la première vidéo, y'a pas de raison que l'on n'obtienne pas la même chose dans FSX?
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

PrécédenteSuivante

Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités