On veut que nos machines volent le mieux possible ! Une fois le matériel choisi, ce sont les optimisations logicielles et en particulier le tune de la machine qui vont véritablement faire la différence. Dans cet épisode, on va expérimenter et identifier les principaux leviers d’amélioration à notre disposition pour maximiser les performance à tout prix.
La vidéo
Qu’est-ce qu’un bon tune ?
Dans le premier épisode, on était resté assez vague en disant :
“Un bon tune fera en sorte que notre drone fasse correctement ce qu’on lui demande via nos sticks. On détaillera puis on nuancera cette première définition dans les 2 prochaines vidéos.”
Cette première définition, aussi simplette soit-elle, résumait parfaitement le rôle du tune.
D’un point de vue purement pragmatique, plus le tune sera bon et plus les mouvements du quad colleront aux entrées sur les 4 axes des sticks de notre radio.
Avec un bon tune, le délai entre le déplacement d’un stick et son effet sur le quad sera réduit au minimum, et le mouvement du quad correspondra exactement à ce qui est demandé via les sticks, sans dépassement de consigne.
A titre d’exemple, ça veut dire qu’avec un bon tune, notre drone ne devrait pas vibrer. Par contre, si nos doigts tremblent, alors le quad oscillera de la même façon. Car ce sont des mouvements que l’on demande au quad via nos sticks, même si c’est involontaire.
Dans cet article, on cherche comment optimiser le tune de manière absolue. Dans le prochain, on se posera la question de l’optimisation pour nos besoins et des compromis qui vont avec.
Mouvement de référence
Pour illustrer certains de nos ajustements et visualiser concrètement leur effet, on se basera sur un mouvement très simple : une demi rotation sur l’axe du roll, sur un coup de stick très sec.
Pour bien mettre en valeur toutes les imperfections, on se positionnera uniquement sur l’axe du roll, on cherchera un moment où on fait un roll rapide, et on zoomera à 500%.
Nos efforts vont se concentrer sur 3 objectifs :
- Le premier : rapprocher autant que possible la courbe du signal gyro filtré de celle du signal gyro non filtré, et ça, on le fera en optimisant le filtrage.
- Le second : éviter les dépassements de consignes, grâce aux PID.
- Et enfin le 3ème : rapprocher autant que possible la courbe du gyro de celle du setpoint, donc de la consigne. Et ça, on le fera grâce aux PID et au Feed Forward.
Le lien radio
Avant d’attaquer le tune en lui-même, on prend quelques instants pour revenir sur 2 points importants qui sont les paramètres de base de la boucle PID. Le premier : le lien radio.
Le packet rate
C’est l’origine de tout, le quad va devoir suivre la consigne fournie via les sticks et transportée par le lien radio. Plus ce lien est rapide et plus la position des sticks sera mise à jour fréquemment : avec un packet rate à 50Hz, la position des sticks sera rafraichie toutes les 20 ms, avec un packet rate à 150Hz, on passe à 7ms et à 500Hz on tombe à 2ms !
Quand on sait que le filtrage ajoute en moyenne 3-4 ms de délai, on voit, l’importance du packet rate pour éviter d’accumuler trop de délai. 150Hz c’est un bon minimum pour rester optimal de ce côté. Mark Spatz propose pas mal de mesures intéressantes sur son site.
Comme on l’a vu dans l’épisode précédent, on a commencé par appliquer le preset ELRS 500 Hz, ça sera utile notamment pour l’utilisation du Feed Forward, on y reviendra.
Le RC Smoothing
On a également réglé le RC Smooting Auto factor à 30. Ce paramètre permet d’ajuster la force du filtre PT3 qui sera appliqué au signal radio. Pour rappel, il se trouve dans l’onglet Récepteur
Les paquets arrivant à intervalle régulier, la courbe du signal radio brut affiche un effet d’escalier. Le but du RC Smoothing est de lisser cet effet d’escalier pour obtenir une consigne (ou setpoint) lisse. Il faut donc suffisamment de lissage pour que les paliers disparaissent, mais il faut aussi en mettre le minimum pour éviter d’introduire trop de délai dans les sticks.
La valeur de 30 que nous avons utilisée est celle recommandée pour la race : ça ajoute peu de délai tout en assurant un signal propre. Vous pouvez éventuellement la baisser encore un peu plus en vérifiant dans la Blackbox que le Setpoint reste pas trop aliasé.
Mais attention, si vous la baissez trop, le setpoint va intégrer l’aliasing du signal radio et le transmettre à la boucle PID, c’est d’autant plus flagrant sur des packet rate lents.
Les variations des moteurs se feront donc par pallier au lieu de se faire de manière plus fluide et lissée. Ca ne se verra probablement pas dans le retour vidéo, mais ça créera un peu de chauffe moteur inutile.
En analysant une blackbox (cf. vidéo), on constate que lorsque que le setpoint est contaminé par cet effet d’escalier, ce dernier se propage à l’erreur, puis au P et D et impact directement le signal envoyé aux moteurs.
Les gyros dans Betaflight
La boucle PID prend en entrée 2 choses : le setpoint, dont on vient de parler au travers du lien radio et la mesure du gyro. C’est grâce à ces 2 valeurs que le firmware va pouvoir calculer l’erreur à corriger grâce à la boucle PID.
Or vous n’êtes pas sans savoir que nos FC sont équipées de différents gyros, dont le comportement par défaut n’est pas toujours le même, en particulier concernant le filtrage matériel interne au gyro. Vous vous souvenez peut-être aussi de la sortie du gyro BMI270, à l’époque il fallait mettre en place en place un filtrage spécifique pour ce gyro.
Depuis, il y a eu de gros débats, et beaucoup de tests menés au sein de la Team Betaflight. La discussion a été parfois un peu tendue, je vous laisserai y jeter un œil, y a plus d’une centaine de messages. Mais c’est quand même super intéressant.
Pour résumer, au terme de ces échanges, il a été décidé d’activer par défaut le mode OSR4 du BMI270 pour avoir un comportement similaire au MPU6000 par défaut. Et c’est valable pour tous les gyros actuellement utilisés sur nos FC, avec Betaflight.
A une époque, il fallait appliquer un filtrage gyro spécifique, voire appliquer un preset de filtrage en fonction de votre gyro. Depuis plus de 2 ans maintenant, vous n’avez plus à vous en soucier, tous les gyros se comportent de manière similaire avec Betaflight car ce dernier les configure pour activer le même niveau de filtrage interne.
Le filtrage
Attention, n’appliquez surtout pas les réglages suivant sur vos machines. Cet épisode est avant tout de l’expérimentation pour vous montrer les pistes d’optimisation à explorer et jusqu’où on peut aller. J’ai poussé assez loin en sachant ce que je faisais et pour que vous n’ayez pas à le faire. Gardez bien ça en tête.
Réduction du filtrage
Pour rappel, notre but est d’optimiser au maximum le comportement du quad. On va donc chercher à réduire le filtrage pour en avoir le moins possible. Évidemment, sans induire de problématique de vibration ou de surchauffe moteur. On va réduire, tant qu’on ne nuit pas au comportement du drone.
Notre drone de test était extrêmement sain, il nous a été possible de réduire drastiquement le filtrage :
- Slider Gyro à 1 (il sera complètement désactivé) et j’ai réduction du filtrage DTerm en poussant le slider à 1.3
- Désactivation du filtre LPF sur le Yaw
- Le filtre gyro LPF1 est déjà coupé
- Désactivation du filtre gyro LPF 2 car la boucle PID tourne à la même fréquence que le gyro (cf. tuning notes).
- On limite le filtre RPM en assignant des poids aux 3 harmoniques. 100% sur la première. 50% sur la 3ème qui est très discrète. Et seulement 30% pour la seconde qui est inexistante. On économie ainsi 40% de filtrage. La commande CLI est : set rpm_filter_weights = 100,30,50
- Désactivation du filtre notch dynamique qui n’avait plus rien à filtrer
Impact sur le délai
Grâce à PIDToolBox, on a mesuré le délai ajouté par différents filtrages (gyro + Dterm) :
- Un vol avec le filtrage stock → 2ms + 2.4 ms = 4.4ms
- Un vol avec mon filtrage habituel → 1 ms + 1.4ms = 2.4ms
- Un vol avec notre filtrage minimaliste → 0.5 ms + 1.6 ms = 2.1 ms
- Un vol avec notre filtrage minimaliste + LPF2 à 1000 Hz → 0.75 + 1.6 = 2.35ms
On peut en déduire 2 choses intéressantes :
- Nos optimisations .on fait plus que diviser par 2 le délai comparé au filtrage stock
- Entre notre filtrage ultra minimaliste et mon tune habituel, qui est quand même plus tolérant, avec un LPF2 placé assez haut et un filtre notch dynamique, l’écart de 0.3ms n’en vaut certainement pas la chandelle. On se garde la suite de ces réflexions pour le prochain épisode.
Bref, résultat des courses, on a un filtrage réduit comme jamais et on insère un minimum de délai. Le but étant d’avoir un feeling aussi connecté que possible, une meilleure réactivité et une meilleure gestion du propwash. J’aurais certainement pu pousser encore un peu, mais il faut savoir dire stop. Au passage, mes moteurs étaient toujours à peine tièdes. Et on a fait aucun sacrifice sur la qualité de vol.
Les PID
Côtés PID, le principe est le même que d’habitude : on monte les D autant que possible. On s’arrête quand ca commence à légèrement amplifier des vibrations. Ensuite on monte les P jusqu’à avoir un arrêt bien net. Et si besoin, on ajuste les différences de comportement entre le pitch et le roll.
J’ai pu pousser le slider des D (Atténuation) jusqu’à 1.8, sans chauffe ni vibration problématique. Je me suis arrêté à 1.8 car c’est là que les micro vibrations autour de 150 Hz sur le pitch commençaient à réapparaitre après filtrage. J’ai aligné le reste en montant le slider des P/I (Suivi) à 1.7.
A cette étape, il est important de bien équilibrer les P et les D pour ne pas avoir d’overshoot. Un dépassement de consigne serait visible sur les mouvements secs et rapides. On est arrivé à un bon équilibre où l’on monte assez vite à la consigne. Avec des P assez élevés, à plus de 70, qui sont correctement amortis par des D autour des 55-60.
Ce sont les P qui boostent la réactivité de votre machine. Plus les P (et par extension, les D) seront élevés, alors plus votre machine sera réactive. Et mieux elle gérera les cas de propwash. En général, les D sont le facteur limitant car ils vont amplifier les vibrations.
Les I sont à part et vont surtout empêcher votre machine de dériver quand la consigne change lentement. Par défaut, dans Betaflight, les I suivent les P et les valeurs sont plutôt cohérentes. Si vous remarquez un peu de dérive lorsque vous laissez retomber le quad, vous pouvez augmenter un peu les I.
On peut voir qu’avec nos nouveau PID, il n’y a plus d’overshoot et la consigne est atteinte un peu plus rapidement.
Le Feed Forward
Cette fonctionnalité est présente dans Betaflight depuis longtemps mais elle est souvent sous-estimée, voire crainte, pourtant elle est redoutable d’efficacité.
Principe du Feedforward
Dans Betaflight, le Feed Forward agit carrément comme un 4ème terme, en plus des P, I et D. Contrairement aux PID qui vont travailler sur l’erreur (donc la différence entre la consigne et la mesure du gyro), le Feed Forward se concentre uniquement sur les sticks.
En fait, le Feed Forward essaie de deviner le futur pour mieux l’anticiper. Le challenge, pour un firmware (et un tune), c’est d’avoir le meilleur tracking possible des sticks. Ca passe donc par une réduction maximale du délai entre l’action des sticks et l’effet sur le quad.
Concrètement, le Feed Forward surveille les mouvements de nos sticks. Dès qu’il détecte un début de mouvement rapide, il va booster les “P” pour faire réagir le système encore plus rapidement que prévu et permettre de coller plus efficacement à la consigne.
Cette fonctionnalité est extrêmement efficace, avec des valeurs hautes, il arrive même parfois que le Feed Forward compense tellement qu’il fasse prendre de l’avance au quad sur les sticks ! Ce n’est évidemment pas ce qu’on veut, mais c’est juste pour illustrer à quel point c’est efficace. Et c’est d’ailleurs grâce au Feed Forward que Betaflight permet un meilleur tracking que les autres firmwares.
Fonctionnement et précautions
Le Feed Forward se comporte un peu comme les D. Les D surveillent le taux/vitesse de variation de l’erreur. Le Feed Forward pour sa part, surveille la vitesse de déplacement des sticks.
Et de la même façon que les D ont tendance à amplifier les vibrations, le Feed Forward amplifie les imperfections de votre signal radio. Ces imperfections, c’est ce qu’on appelle le jitter. Concrètement, ce sont des petits sursauts qui peuvent apparaître dans votre lien radio. Ils sont interprétés comme des débuts de mouvements rapides.
C’est la raison pour laquelle j’ai bien insisté dans la vidéo précédente sur l’importance d’appliquer le preset associé à votre lien radio.
Il permet d’appliquer le filtrage nécessaire au bon fonctionnement du Feed Forward. Si vous constatez des comportements anormaux avec des valeurs de Feed Forward qui ne sont pas excessives, il y a de fortes chances que le problème vienne de là !
Ajustement du Feedforward
Généralement j’utilise des valeurs entre 100 et 120. Sur ce tune, je l’ai poussé à 200+ et je vous laisse constater le gain sur le démarrage des mouvements rapides. Sur les fins de mouvements, c’est moins flagrant parce que les moteurs sont déjà à saturation pour stopper le mouvement.
Je vous invite à tester différentes valeurs de Feed Forward. En ajustant le slider de réponse des sticks, et à le monter tant que vous ne constatez pas de comportement anormal ou gênant.
Peut-être qu’on dédiera un autre épisode au Feed Forward et à son réglage détaillé. Pour le moment, on va se contenter du slider de réponse des sticks, c’est déjà largement suffisant. Prenez votre temps pour tester. Le gain en réactivité peut être un peu troublant au début. Mais ça ne veut pas dire que c’est moins bien !
Je vous montre la différence entre un Feed Forward autour de 100 et un Feed Forward autour de 200. On voit que le gain sur le délai est considérable. Le Feed Forward parvient à pratiquement réduire à néant l’écart entre le set point et le signal gyro.
Les autres paramètres qui impactent le tune
On va maintenant passer en revue rapidement quelques fonctionnalités moins importantes mais qui restent intéressantes à connaître.
L’antigravity
Lorsque vous mettez un full vertical et que vous lâchez les gaz brusquement, assurez vous que pendant tout le mouvement le quad conserve la même inclinaison. Si vous remarquez qu’il pique un peu du nez au moment du lâché de gaz, vous aurez peut-être besoin d’ajouter un peu d’anti-gravity.
Le TPA
Il va permettre d’atténuer les D et éventuellement les P en fonction du niveau des gaz. Ici il y a plusieurs stratégies possibles :
- On laisse l’atténuation par défaut, qui commence à réduire les D à partir de 35% des gaz. Ca permet d’avoir des D très élevés par défaut. Sans que ça pose de problème lors de la montée des gaz.
- On peut aussi décider de commencer très tardivement à atténuer pour avoir des D stables sur la plus grosse partie des gaz.
- On peut faire un compromis en démarrant l’atténuation après 60-65% des gaz
- Et dans certains cas, on peut choisir d’atténuer les P en plus des D. Notamment si on rencontre des soucis d’oscillation au milieu des gaz, les fameuses MTO (Mid Throttle Oscillations).
De préférence, faites votre choix avant de commencer à tuner. Etant donné que ça va influer sur vos D, et éventuellement vos P.
Le Dynamic Idle
Il joue plusieurs rôles. En le montant, on va augmenter la vitesse du ralenti moteur. Ce qui aura pour effet d’augmenter la stabilité du quad, améliorer la gestion du propwash et diminuer le risque de desync. Par contre, ça limitera le hangtime du quad la tête en bas. On y reviendra plus en détail dans le 3ème épisode.
Pour le moment, je n’aborde pas le sujet du Iterm Relax, c’est important, mais il aura davantage sa place dans le prochain épisode, de même que d’autres fonctionnalités.
Conclusion
Il s’agissait d’un épisode d’expérimentation. Je vous déconseille au plus au point d’appliquer le filtrage que je vous ai présenté aujourd’hui sur vos machines. La démarche était pédagogique, pour montrer les axes d’optimisation, en les poussant dans leurs limites.
Les 3 axes principaux d’optimisation du tune
On a vu dans quelle mesure on pouvait pousser le tune d’une machine en jouant essentiellement sur le filtrage, les PID et le Feed Forward, dans le but de coller le mieux possible aux mouvements des sticks. C’est cette optimisation qui participe au fait d’avoir un quad “connecté”.
Si on a vu que le filtrage et les PID sont directement responsables de la qualité de vol de la machine : absence de vibrations, de dépassement, de propwash, c’est finalement le Feed Forward qui a eu le plus d’effet sur la réactivité du quad, et ce de très loin !
Il y a évidemment toujours moyen de pousser encore plus loin et d’affiner en jouant sur d’autres paramètres, ce petit jeu est sans fin. Mais je pense qu’on a quand même passé en revu les principaux leviers d’ajustement et qu’on est déjà allés bien au-delà du raisonnable.
Vers plus de compromis…
On a aussi remarqué, notamment au niveau du filtrage, qu’en le réduisant au minimum, on arrive à diviser le délai par 2 comparé au filtrage stock. Le gain étant de l’ordre de 2ms. C’est déjà pas mal, mais ce n’est pas transcendant non plus.
Encore plus intéressant : revenir à un tune plus raisonnable avec un filtre notch dynamique et un filtre LPF sur le gyro placé assez haut, a un impact qui est assez négligeable. Pour une sécurité supplémentaire, qui elle, est beaucoup plus significative. Dit autrement, mettre en danger son matos pour gagner 0.3ms de délai au niveau du filtrage n’a pas vraiment de sens. Mais les compromis, c’est pour la semaine prochaine.
L’approche d’aujourd’hui était bête et méchante : on a cherché à obtenir le meilleur tracking possible, on était sur la performance pure (sans pour autant dégrader la qualité de vol).
Mais un bon tune, ce n’est pas seulement un tune qui produira les meilleures performances. Évidemment, c’est très important, mais un bon tune, c’est aussi celui qui répondra à vos besoins, en termes de tolérance ou de feeling par exemple. La semaine prochaine on discutera de la composante plus “subjective” de ce qui fait un “bon tune”.