Accueil > Forum > Electronique > Arduino > Controleur de vol

Controleur de vol

1 2
dede56410 dede56410 13 Messages
Salut
Je suis nouveau sur le site et débutant dans les drones.
Arduino nano + MPU6050 + 4 esc + 4 moteurs brusless + accus lipo 3S
J'ai apparemment suivi toutes les chapitres sur le site web et pour
finaliser le projet, il me manque l'essentiel, le code final du
contrôleur de vol.
J'ai essayé le contrôleur de vol  YMFC-AL_Flight_controller, mais ne fonctionne pas .
Quelqu'un pouvai  SVP me fournir  le code final ?  :'(
Merci d'avance de votre aide
Cordialement
pascalou95 pascalou95 2 Messages
bonjour,
si tu as monté le drone de Joop Brokking et installé le firmware YMFC-AL, cela doit fonctionner sans problème.
dede56410 dede56410 13 Messages
Merci pour votre réponse.

Quand je parle de suivi tous les chapitres, je parle des chapitres de lobodol.

Le fait de mettre un arduino NANO à la place d'un arduino UNO ne pose pas de problème ?
Je vais tout de même mettre un arduino Uno à la place pour faire à nouveau des essais.

Je vous tiens informé de la suite.
Cordialement.
lobodol lobodol 600 Messages BIG BOSS
Salut, le code final n'est pas encore tout a fait terminé mais je publierai un article dès qu'il le sera.

Pour le YMFC ça nécessite un Arduino Uno au minimum. Je suis pas sûr que le Nano dispose d'autant d'interruptions.

Perso j'ai testé le YMFC et ça fonctionne impec, suffit juste de bien câbler et suivre les étapes.

Tiens nous au courant !

[EDIT] Si tu veux voir où en est le code, il est dispo sur github : https://github.com/lobodol/drone-flight-controller
dede56410 dede56410 13 Messages
Salut
Je ne manquerai pas de vous tenir informé.
Mon plus souci de départ a été de faire les diverses  traductions (Anglais informatique oui, mais pas le reste).
Le traducteur de Google inverse dans l'idée les sticks de la télécommande et les sens de déplacement du drone pour la configuration du gyroscope.

Je vais essayer de faire un petit programme de lecture de l'EEPROM pour contrôler la bonne écriture de la configuration.
Je fais aussi des recherche pour la partie gestion du PID.

Beaucoup de travail avenir.
Merci et bonne journée à vous.
dede56410 dede56410 13 Messages
Salut

J'ai un problème, qui est le suivant:
Un petit dessin vaut mieux qu'un grand discourt !

- Insertion des Serial.print() pour la visualisation des valeurs des ESC

KjIgxoa
- Throttle au mini = OK --> valeur = 1102

IwslYeK


- Throttle au 1/4 , dérive des valeurs vers le max
sauf l'ESC3

8i5DLVa

Puis retour : Throttle au mini = OK --> valeur = 1102
Mais dès je touche même légèrement au throttle les valeurs passent directement au max (2004).

Quel est mon problème ? merci de ton aide.
lobodol lobodol 600 Messages BIG BOSS
Salut dede56410 (au passage, t'es de Erdeven ou rien à voir ?),

A mon avis le problème ne viens pas de la fonction "applyMotorSpeed()" mais plutôt du régulateur.
Pour en être sûr, définis une valeur en dur pour chaque "pulse_length_escx" et mesure à l'oscilloscope la durée des impulsions en sortie.

PS: tu peux insérer du code avec des balises au lieu de faire des screenshots :

[code=arduino]
ton code ici
[/code]
dede56410 dede56410 13 Messages
Salut Lobodol
Non je suis de ETEL, mais tu as raison, car les deux communes ont le même code postal.

"Plutôt du régulateur"  je ne comprends pas !
Je ne dispose pas d'oscilloscope pour effectuer les mesures.
OK pour ne plus insérer de screenshots.
lobodol lobodol 600 Messages BIG BOSS
Non je suis de ETEL, mais tu as raison, car les deux communes ont le même code postal.
Je connais bien ce coin, j'habite pas loin 

"Plutôt du régulateur"  je ne comprends pas !

Je parle du régulateur PID, la fonction "pidController()". Mais j'ai quand-même un doute. Je me demande si j'ai pas fait un connerie u niveau de l'IMU. Il faudrait que je me re-penche dessus pour vérifier.
dede56410 dede56410 13 Messages
OK
Il se produit une dérive des valeurs que je ne m'explique pas.
Je vais essayer (je ne suis que débutant) de voir d’où viens le problème.
Tiens moi au courant !
dede56410 dede56410 13 Messages
// En effet au niveau du régulateur:
// Sans toucher aux commandes, il se produit une dérive:
dede56410 dede56410 13 Messages
Pas réussi pour le code avec balise, ok compris.
dede56410 dede56410 13 Messages
Est-ce normal que les valeurs de PID changes sont ne toucher à rien ?

// Début
roll_pid = 18.90 :    pitch_pid = 12.57 :    yaw_pid = -106.40
roll_pid = 18.98 :    pitch_pid = 12.61 :    yaw_pid = -106.70
roll_pid = -0.29 :    pitch_pid = 12.65 :    yaw_pid = -106.88


// 30 secondes
roll_pid = 42.18 :    pitch_pid = 28.94 :    yaw_pid = -189.85
roll_pid = 22.92 :    pitch_pid = 28.98 :    yaw_pid = -189.96
roll_pid = 60.30 :    pitch_pid = 48.35 :    yaw_pid = -190.20


// 1 minute
roll_pid = 74.99 :    pitch_pid = 70.18 :    yaw_pid = -305.71
roll_pid = 75.07 :    pitch_pid = 32.92 :    yaw_pid = -310.03
roll_pid = 75.15 :    pitch_pid = 50.96 :    yaw_pid = -310.11


// 1 mn 30 s
roll_pid = 127.31 :    pitch_pid = 91.13 :    yaw_pid = -424.57
roll_pid = 109.39 :    pitch_pid = 53.86 :    yaw_pid = -424.69
roll_pid = 109.47 :    pitch_pid = 71.90 :    yaw_pid = -428.70
dede56410 dede56410 13 Messages
Le problème viens du calcul de la somme des erreurs, ou en amant du code:


        // Calculer la somme des erreurs: Coefficients intégraux
        //error_sum[YAW]   += errors[YAW];
        //error_sum[PITCH] += errors[PITCH];
        //error_sum[ROLL]  += errors[ROLL];


Les valeurs de PID restent stables en les supprimant.
L'incrémentation des valeurs crée la dérive.
dede56410 dede56410 13 Messages
// En supprimant l'incrémentation

error_sum[YAW]   = errors[YAW]; // +=
error_sum[PITCH] = errors[PITCH]; // +=
error_sum[ROLL]  = errors[ROLL]; // +=
// Début mesure
ESC1 = 1404 : ESC2 = 1303 : ESC3 = 1310 : ESC4 = 1401
ESC1 = 1385 : ESC2 = 1322 : ESC3 = 1290 : ESC4 = 1420
ESC1 = 1407 : ESC2 = 1300 : ESC3 = 1304 : ESC4 = 1406
ESC1 = 1442 : ESC2 = 1304 : ESC3 = 1308 : ESC4 = 1364
// Après 3 mn, reste stable 
ESC1 = 1404 : ESC2 = 1303 : ESC3 = 1310 : ESC4 = 1401
ESC1 = 1407 : ESC2 = 1306 : ESC3 = 1313 : ESC4 = 1404
ESC1 = 1389 : ESC2 = 1318 : ESC3 = 1287 : ESC4 = 1424
ESC1 = 1442 : ESC2 = 1304 : ESC3 = 1308 : ESC4 = 1364
// Throtlle au maxi
ESC1 = 1820 : ESC2 = 1719 : ESC3 = 1726 : ESC4 = 1817
ESC1 = 1821 : ESC2 = 1719 : ESC3 = 1726 : ESC4 = 1817
ESC1 = 1805 : ESC2 = 1734 : ESC3 = 1702 : ESC4 = 1840
ESC1 = 1843 : ESC2 = 1697 : ESC3 = 1739 : ESC4 = 1803
// Après 3 mn, reste stable
ESC1 = 1840 : ESC2 = 1738 : ESC3 = 1706 : ESC4 = 1798
ESC1 = 1802 : ESC2 = 1701 : ESC3 = 1744 : ESC4 = 1835
ESC1 = 1801 : ESC2 = 1738 : ESC3 = 1706 : ESC4 = 1837
ESC1 = 1823 : ESC2 = 1716 : ESC3 = 1720 : ESC4 = 1822
1 2
Vous devez être connecté pour pouvoir répondre à ce sujet.
Utilisation des données

Afin d'améliorer ton expérience utilisateur, nous utilisons des cookies 🍪