Annonce

Réduire
Aucune annonce.

Autopilote Arduino pour X-plane

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • #16
    Pas vraiment, c'est sur la théorie des autopilotes. j'ai pas de question sur le matos.
    Le fait que ca soit sur un arduino c'est un detail

    Commentaire


    • #17
      Sur le sujet il y a de la lecture sur internet.

      For some in-flight routines and procedures, autopilots are even better than a pair of human hands. They don't just make flights smoother -- they make them safer and more efficient.

      Généraliste

      Orienté simulation et plus spécifiquement Flight Gear

      Plus scientifique, pour les matheux, mais il doit y avoir quelques informations intéressantes à trouver dans ce document
      This edition of this this flight stability and controls guide features an unintimidating math level, full coverage of terminology, and expa...

      Encore plus complet, un PDF de 284 pages ! C'est surtout sur les qualités de vol.

      Un PDF catalan. Voir page 48 pour la vitesse verticale.

      Daniel
      Intel I5 6500 3,2 Ghz, RAM 16 Go, GeForce GTX 960 2 Go, Linux Ubuntu 18.04
      Portable Asus Intel i5 2,8 Ghz, RAM 8 Go, GeForce 840M, Windows 8.1 64bits
      #AMD II X2 245 2,9 Ghz, RAM 8 Go, GeForce GTX 650 1 Go, Linux Ubuntu 14.04
      #AMD 64x2 5200 2,6 Ghz, RAM 4 Go, GeForce 9600 GT 512 Mo, Linux Ubuntu 10.04
      #MacBook Pro 15" 2,4 Ghz, RAM 4 Go, GeForce GT 330 M 256 Mo, Mac OS 10.6

      Commentaire


      • #18
        Envoyé par ker2x Voir le message
        Pas vraiment, c'est sur la théorie des autopilotes. j'ai pas de question sur le matos.
        Le fait que ca soit sur un arduino c'est un detail
        Ok ok, retour dans Aéronautique.

        Daniel
        Intel I5 6500 3,2 Ghz, RAM 16 Go, GeForce GTX 960 2 Go, Linux Ubuntu 18.04
        Portable Asus Intel i5 2,8 Ghz, RAM 8 Go, GeForce 840M, Windows 8.1 64bits
        #AMD II X2 245 2,9 Ghz, RAM 8 Go, GeForce GTX 650 1 Go, Linux Ubuntu 14.04
        #AMD 64x2 5200 2,6 Ghz, RAM 4 Go, GeForce 9600 GT 512 Mo, Linux Ubuntu 10.04
        #MacBook Pro 15" 2,4 Ghz, RAM 4 Go, GeForce GT 330 M 256 Mo, Mac OS 10.6

        Commentaire


        • #19
          Excellent
          Merci pour le retour et pour les liens

          Commentaire


          • #20
            Envoyé par ker2x Voir le message
            Je me prend la tete sur le cap

            Je veux pas aller de 0° a 360° mais de -inf à +inf
            Et encore, je suis pas sur, je pense qu'il y a un modulo 360 a caser quelque part.
            Mais c'est probablement meme pas ce qu'il faut faire non plus.

            En fait il faudrait probablement avoir un hding_Target = 0.0f et un hding_In compris entre -180 et 180.
            et le In etant la difference entre le cap cible et le cap actuel. A grand coup de +/- 360° et de modulo et... gaaaah
            La correction de cap à appliquer (en valeur -180/180) est :
            Heading_Out = [ (Heading_target - Heading_actual + 180) MOD 360 ] -180
            avec Heading_target, le cap désiré (en degrés de 0 à 360 ou de -180 à +180)
            Heading_actual, le cap réel (tiré de X-Plane) (en degrés de 0 à 360 ou de -180 à +180)

            Exemple :
            Heading_target = +5°
            Heading_actual = -3°
            => Heading_out = +8° (correction à donner pour viser le target)

            Note la formule indiquée donne le même résultat avec des angles positifs (de 0 à 360) et avec des angles +/- (de -180 à +180) même mélangés:
            Heading_target = -5°
            Heading_actual = -3°
            => Heading_out = -2° (correction à donner pour viser le target)

            Heading_target = -5°
            Heading_actual = 357° (= -3°)
            => Heading_out = -2° (correction à donner pour viser le target)

            Heading_target = 355°
            Heading_actual = 357°
            => Heading_out = -2° (correction à donner pour viser le target)

            Heading_target = 355°
            Heading_actual = -3°
            => Heading_out = -2° (correction à donner pour viser le target)

            A noter que le cap (heading) ne tient pas compte de l'effet du vent.
            Le PA devrait se baser sur la route (si GPS à bord).
            XP11.41 - WIN 7 - i7 - GTX970

            Commentaire


            • #21
              Ouiiiiiiiiiiiiii
              J'etais pas loin mais je bloquai

              Merci !

              Je teste ca plus tard dans la soirée, ou demain. La je sature a force de coder

              Commentaire


              • #22
                Envoyé par ker2x Voir le message
                La je sature a force de coder
                PhM ? !!!!

                Sinon, sujet que je suis avec intérêt...
                Sauf que je n'adhère pas l'UDP.
                Trop de changement imprévisible d'après tout ce que j'ai pu lire à droite ou à gauche.
                Dernière modification par thierryhl, 20 août 2014, 20h17.
                X-Plane 10
                En attente d'un ordinateur...

                Commentaire


                • #23
                  Envoyé par thierryhl Voir le message
                  PhM ? !!!!

                  Sinon, sujet que je suis avec intérêt...
                  Sauf que je n'adhère pas l'UDP.
                  Trop de changement imprévisible d'après tout ce que j'ai pu lire à droite ou à gauche.
                  Il parrait.
                  Seulement si je fais pas ca je dois coder un soft qui fait le relais entre X-Plane et l'arduino.
                  Je le ferai, mais pour l'instant c'est les algos qui comptent, si je dois modifier un champs ou 2 du parser UDP d'une version à l'autre je vais pas trop en souffrir

                  On est loin du "production-ready" et passer directement par l'UDP me fait gagner du temps de code (et aussi m’élimine des bugs éventuels du logiciel qui ferait l'interface )

                  Commentaire


                  • #24
                    Envoyé par thierryhl Voir le message
                    ...Sauf que je n'adhère pas l'UDP.
                    Trop de changement imprévisible d'après tout ce que j'ai pu lire à droite ou à gauche.
                    Oui, on est à la merci d'une Austinerie sur une nouvelle version qui va tout péter. Sandy Barbour ne recommande pas non plus d'utiliser les UDP X-Plane pour une application.

                    PhM
                    X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                    Commentaire


                    • #25
                      Envoyé par FlyingBaldy Voir le message
                      La correction de cap à appliquer (en valeur -180/180) est :
                      Heading_Out = [ (Heading_target - Heading_actual + 180) MOD 360 ] -180
                      avec Heading_target, le cap désiré (en degrés de 0 à 360 ou de -180 à +180)
                      Heading_actual, le cap réel (tiré de X-Plane) (en degrés de 0 à 360 ou de -180 à +180)

                      Exemple :
                      Heading_target = +5°
                      Heading_actual = -3°
                      => Heading_out = +8° (correction à donner pour viser le target)

                      Note la formule indiquée donne le même résultat avec des angles positifs (de 0 à 360) et avec des angles +/- (de -180 à +180) même mélangés:
                      Heading_target = -5°
                      Heading_actual = -3°
                      => Heading_out = -2° (correction à donner pour viser le target)

                      Heading_target = -5°
                      Heading_actual = 357° (= -3°)
                      => Heading_out = -2° (correction à donner pour viser le target)

                      Heading_target = 355°
                      Heading_actual = 357°
                      => Heading_out = -2° (correction à donner pour viser le target)

                      Heading_target = 355°
                      Heading_actual = -3°
                      => Heading_out = -2° (correction à donner pour viser le target)

                      A noter que le cap (heading) ne tient pas compte de l'effet du vent.
                      Le PA devrait se baser sur la route (si GPS à bord).
                      Je l'ai implementé mais j'ai du faire :
                      if(out < -180) out += 360;

                      Commentaire


                      • #26
                        Test en meteo extreme :

                        Commentaire


                        • #27
                          Maintenant que y'a le controle du rudder (et donc le nose wheel) j'arrive a decoller avec l'autopilote sans partir en sucette

                          Commentaire


                          • #28
                            J'avais un probleme chiant sur le changement brutal de target.

                            J'ai rajouté une classe "LinearServo" qui permet de simuler un servomoteur devant les commandes de vol qui empeche les mouvement brusques en imposant une vitesse maximum de changement d'ampitude.
                            (en plus simple : y'a un moteur a vitesse constante sur l'elevateur et il faut environ 1s pour aller du neutre a max, au lieu de 10ms)

                            Le code, moche, c'est proto
                            Doublement moche parce que la vitesse de deplacement depend de la vitesse a laquelle tourne la simulation, mais ca va etre corrigé viteuf

                            Code:
                            class LinearServo {
                            
                            public:
                            	LinearServo(float);
                            	void SetTarget(float);
                            	void SetActual(float);
                            	float GetOutput();
                            	float Com****();
                            
                            private:
                            	float actual;
                            	float target;
                            	float step;
                            	unsigned long lastTime;
                            
                            };
                            Code:
                            LinearServo::LinearServo(float s) {
                            	actual = 0.0f;
                            	target = 0.0f;
                            	step = s;
                            	//lastTime = millis(); 
                            }
                            
                            void LinearServo::SetTarget(float t) {
                            	target = t;
                            }
                            
                            void LinearServo::SetActual(float a) {
                            	actual = a;
                            }
                            
                            float LinearServo::GetOutput() {
                            	return actual;
                            }
                            
                            float LinearServo::Com****() {
                            
                            	float diff = target - actual;
                            
                            	if(abs(diff) < step) { // Last step, just set to target and the job is done
                            		actual = target;
                            		return target; 
                            	}
                            
                            	if(diff > 0.0f) {	// We're going positive :
                            		actual += step; // 	Increment actual by step
                            	} else {			// Negative :
                            		actual -= step; // 	Decrement actual by step
                            	}
                            	
                            	return actual;
                            	
                            }

                            Commentaire


                            • #29
                              Envoyé par ker2x Voir le message
                              Je l'ai implementé mais j'ai du faire :
                              if(out < -180) out += 360;
                              J'avais testé ma formule avec EXCEL dont la fonction Modulo 360 fournit toujours un nombre compris entre 0 et 360.
                              La formule complète donne toujours un résultat compris entre -180 et 180.
                              Dans quel cas obtiens-tu un résultat < -180 (qui t'oblige à tester et rajouter 360)?

                              Autre sujet : la fonction LinearServo.
                              Cela me paraît une très bonne idée.
                              Tu pourrais également la rajouter dans la boucle de gestion de la puissance moteur (throttle), pour éviter la danse de Saint Guy
                              Compter une durée de 2 à 3 secondes du ralenti au maximum.
                              XP11.41 - WIN 7 - i7 - GTX970

                              Commentaire


                              • #30
                                Envoyé par FlyingBaldy Voir le message
                                J'avais testé ma formule avec EXCEL dont la fonction Modulo 360 fournit toujours un nombre compris entre 0 et 360.
                                La formule complète donne toujours un résultat compris entre -180 et 180.
                                Dans quel cas obtiens-tu un résultat < -180 (qui t'oblige à tester et rajouter 360)?

                                Autre sujet : la fonction LinearServo.
                                Cela me paraît une très bonne idée.
                                Tu pourrais également la rajouter dans la boucle de gestion de la puissance moteur (throttle), pour éviter la danse de Saint Guy
                                Compter une durée de 2 à 3 secondes du ralenti au maximum.
                                Je vais rester et je te dis ca.
                                Je me souviens plus.

                                Commentaire

                                Chargement...
                                X