asservissement drone

FelixN FelixN 2 Messages
Bonjour, 
je suis actuellement en train de réaliser un drone est je suis a l'étape des premier vol.
Impossible de réussir a le faire voler (au décollage il s'incline sur la droite sans pid et même avec le pid je n'arrive pas a rattraper cela)
Les différents chapitres de ce site m'ont bien aidé, mais je fais certaines chose différemment.
Les sorties moteurs j'utilise la fonction servo (cela permet de crée un signal PWM facilement en donnant un angle 0° = Pmin et 180° = Pmax)
La lecture de mes angles a partir de mon mpu 6050 je me suis basé sur ce site http://gilles.thebault.free.fr/spip.php?article32.
ce qui donne ceci :
 angleX2=0.97*(angleX2+float(gx)*dt/131) + 0.03*atan2((double)ay,(double)az)*180/PI;
  angleX=angleX2+0.05;
  angleY2=0.97*(angleY2+float(gy)*dt/131) + 0.03*atan2((double)az,(double)ax)*180/PI;
  angleY=angleY2-87.94;
Comme le capteur est installer a coter (je n'ai pas créé de shield je mets des valeurs afin de réétalonner correctement) et j'utilise l'angle X pour le tangage et Y pour le roulis.
Concernant mon PID je n'ai pas créé de valeur set_point, je ne comprenais pas tout et que j'ai lu que ce n'était pas forcément nécessaire peut être mon erreur est la.
j'utilise a la place en consigne les valeurs envoyées par ma télécommande que je transforme entre -10 et 10 qui représente les angles que je voudrais que mon drone prenne lorsque je suis à fond à gauche ou droite.
Voici les formules que j'ai : 

ma télécommande est une 6 sorties donc j'ai alloué une sortie a la commande "start" si la molette est à 0 le drone empêche les moteurs de tourner et reset les valeurs de mon pid, lorsque la molette dépasse la moitié de ça course le start dépasse 1400 est mon drone fait tourner ses moteurs et commence les calculs.
L'impact du voltage de la batterie est censé impacter les réglages pid et non la vitesse de rotation des moteurs (peut être que je me trompe encore, mais betaflight fonctionne ainsi).
Plus les moteurs tournent vite plus ils sont nerveux donc il faut ajuster le pid en fonction de ça, je me suis basé sur betaflight également en créant le coefficient "tpa"
Lorsque le drone s'incline sur la droite l'angle va dans le positif, le pid lui va aller dans le négatif est mes moteurs droits comme ils sont a -roulis pid la valeur augmente.
En somme j'aimerai de l'aide car en fonction des valeurs que je donne a mon pid je vois clairement une différence mais impossible de le stabiliser, je me suis probablement planté quelque part mais impossible de savoir ou.
J'avais réalisé des tests, table retourner et drone attacher aux 4 pieds afin de le laisser bouger sur l'axe de roulis et tangage pour le calibrer, une fois des valeurs trouver pour que le drone soit stable est respecte ça consigne lors du test de vol il s'incline immédiatement.
lobodol lobodol 890 Messages BIG BOSS
Salut @FelixN,

Wow, t’as mis du cœur à l’ouvrage, ça se voit ! Ton projet de drone est super ambitieux, et c’est normal d’avoir quelques obstacles au début. Je vais essayer de t’aider à y voir plus clair.

Déjà, pour le problème d'inclinaison, ça peut venir de plusieurs points, mais la gestion des PID est souvent le cœur du problème. Dans ton cas, le fait de ne pas avoir de set_point peut effectivement être une des causes. Le set_point est crucial car il représente la position de référence (0° en général) que ton drone doit maintenir. Sans ça, ton PID ne sait pas exactement ce qu’il doit atteindre, ce qui peut expliquer pourquoi tu as du mal à stabiliser l’appareil.

Ensuite, ta méthode pour calculer l’angle avec l’IMU semble correcte, mais je me demande si le problème ne viendrait pas du fait que ton capteur n'est pas parfaitement aligné avec l'axe du drone. As-tu essayé de ré-étalonner ou de compenser ce décalage avec une correction manuelle ? Ça pourrait expliquer pourquoi ton drone s’incline toujours du même côté.

Pour ce qui est de ton PID, voici quelques pistes :
1. Initialisation : Quand tu démarres les moteurs (au-dessus de 1400 sur ta commande), il faudrait peut-être ajouter un temps de stabilisation pour que ton PID ait une base correcte.
2. Vérification des signes : Assure-toi que tes corrections PID vont dans le bon sens. Par exemple, si l’erreur de roulis est positive (le drone penche à droite), la correction devrait amener les moteurs droits à ralentir pour compenser. Inversement, les moteurs gauches devraient accélérer.
3. Dérive du voltage : Ton coefficient TPA et coeff_bat sont des idées intéressantes, mais il est possible que leur impact sur le PID soit trop fort, ou pas assez bien calibré. Peut-être tester sans ces coefficients pour voir si cela change le comportement du drone.

L’autre point que tu pourrais vérifier, c’est la distribution du poids de ton drone. Un déséquilibre même léger pourrait amplifier les erreurs et compliquer le travail du PID.

Enfin, le test avec le drone attaché est une bonne idée pour déboguer, mais garde en tête que les vibrations et les conditions réelles en vol peuvent changer le comportement par rapport à ce que tu observes au sol.

Je t'encourage à tester en modifiant un paramètre à la fois, pour voir son impact précis. Et tiens-nous au courant de l'évolution, je suis sûr qu'on peut trouver une solution ensemble !

Ciao !
FelixN FelixN 2 Messages
salut lobodol,
Merci de ta réponse. Première fois que je touche a un Arduino, j'essaye de faire de mon mieux.
Concernant tes points :
l'initialisation lorsque le start dépasse 1400 le drone passe en mode "armée" donc les moteurs tournent et les calculs commencent, le temps d'initialisation est moi qui prends le temps avant de mettre les gaz pour essayer de le faire décoller, mais ajouter un timer est une bonne idée.
Les signes et le coeff_bat sont bon a mon avis.
Avec ma technique de table retourner et de cordes pour tester mon pid (Voici une vidéo trouver sur internet qui représente l'idée du banc de test https://www.youtube.com/watch?v=M6bZd2e6u7M)). 
j'ai réussi à stabiliser le drone il répond bien à ça consigne et il revient si je le perturber en le poussant.
Mais lorsque j'ai réussi à faire ça, j'ai mis le drone a charger et après la charge il réagissait différemment (due a la différence de voltage du drone)  Le coeff_bat ma permis de régler cela maintenant il est stable peu importe la charge de la batterie.
Malgré tout cela le drone ne vole pas encore !
Il est stable uniquement lorsque ma manette des gaz est au minimum, dès que j'augmente les gaz les moteurs tournent plus vite et deviennent plus nerveux, au point que le drone est trop nerveux et que le pid n'arrive plus à le gérer.
Donc mes valeurs pid que j'ai son valable uniquement lorsque mon drone est au minimum de puissance, lorsque j'essaye de décoller en augmentant la valeur des gaz je me retrouve dans cette zone instable.
Le coefficient TPA n'est pas bien calibré (tpa -> variation des valeurs du pid en fonction de ma vitesse de rotation des moteurs pour contrer l'augmentation de nervosité qui va avec l'augmentation des rpm.).
J'ai  pensé à 2 solutions : 
- supprimer le TPA est trouver les valeurs du pid a un régime moteur qui fait voler le drone et non au ralenti.  En soit le TPA n'est pas obligatoire c'est du détail pour avoir un drone plus précis c'est peut-être superflue pour moi pour le moment.( lobodol lors des tests pour trouver le pid tu le faisais à la limite du décollage est non ralentis moteur ?).
-trouver une bonne solution pour le tpa, en sois je sais que mes valeurs sont bonnes a ma puissance min et doivent diminuer afin dequilibrer la monter en nervosité des moteurs avec les rpm mais je n'ai pas trouver la bonne équation de droite.
Je ne sais pas trop qu'elle est la meilleure idée. 
Deplus comme j'ai réussi a la stabiliser aux minimum de mes gaz ca indique également que mes angles donnés par l'IMU sont bon malgré ma correction d'angle un peu barbare j'avoue, et que le drone comprend qu'au lieu d'avoir des set point il travaillent directement avec l'angle demandé. Je pense enfaite que mon problème est surtout due a une différence de réaction trop important entre mes moteurs a la puissance mini et celle de décollage/vol.
lobodol lobodol 890 Messages BIG BOSS
Salut @FelixN, et merci pour ton message détaillé !

Bravo pour tes premières expériences avec Arduino et ton projet de drone, ça a l'air vraiment passionnant !

Je pense que tu as déjà identifié plusieurs points clés dans ton message. Voici quelques suggestions et réflexions qui pourraient t'aider :

Tester le PID à un régime plus élevé : Comme tu l'as mentionné, il pourrait être utile de supprimer le TPA dans un premier temps et de recalibrer ton PID à une puissance où le drone pourrait réellement décoller. En effet, obtenir de bonnes valeurs PID au ralenti n'est peut-être pas représentatif des conditions de vol réel.

TPA (Throttle PID Attenuation) : Une fois que tes valeurs PID sont stables à un régime plus élevé, tu pourrais réintroduire le TPA progressivement. Il peut effectivement aider à rendre ton drone plus stable en ajustant les valeurs PID avec l'augmentation des RPM. Pour trouver la bonne équation de TPA, tu peux envisager une approche expérimentale où tu ajusteras les paramètres petit à petit et observeras les réactions.

Équilibrage des moteurs : Si tes moteurs réagissent différemment à différentes puissances, il pourrait être utile de vérifier l'équilibrage et la calibration de chaque moteur pour s'assurer qu'ils fournissent une poussée uniforme. Parfois, de petites différences peuvent largement influencer la stabilité du drone.

Conseils pratiques : Lors de mes tests PID, je commence généralement avec des valeurs de départ plus basses et les ajuste en fonction de la stabilité observée. Il est vrai que les tests à la limite du décollage sont souvent plus représentatifs des conditions réelles, mais chaque drone peut réagir autrement en fonction de sa conception et de ses composants.

N'hésite pas à poster des photos de ton setup ou tes logs de vol, ça pourrait nous donner plus d'éléments pour t'aider !

Bon courage et tiens-nous au courant de tes avancées !
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 🍪