Étape 5: Optimisation de Balance
Et maintenant nous arrivons à la partie intéressante – comment améliorer le robot d’équilibrer les performances. J’ai eu quelques idées sur l’endroit où commencer à chercher, mais comme avec n’importe quel système, il est difficile de savoir ce que les variables traversent les dépendances sont. Alors plutôt qu’obtenir trop analytique, j’ai juste sauté dans.
Intervalle de temps de boucle contrôle
J’ai commencé en faisant varier l’intervalle de temps au cours de laquelle le PID équilibrage a été évalué. J’ai mesuré la période par défaut de Arduino 101 PWM à 2mS, et mon projet précédent avait utilisé une valeur de 20 ms, alors j’ai commencé à 5mS et doublé l’intervalle jusqu'à ce que le robot ne pouvait pas équilibrer. À 5mS, le robot a été en mesure d’équilibrer, mais il semblait être trop active et oscillait avec une période d’approximativement 120mS. À 10mS, c’était à nouveau en mesure d’équilibrer, mais les oscillations ralentissent à s 280mS. À 20mS, la plateforme oscillante période choisi remonter à environ 180mS, mais plutôt que de l’actif, la réponse semblait morose. À 40mS, la réponse est devenue encore plus lent, l’équilibrage erratique et le robot n’était pas toujours en mesure de rester en équilibre. Ma conclusion a été que, tandis que l’intervalle d’évaluation de PID peut certainement une influence sur le comportement du robot, et je devais en effet être au-dessus de certains taux minimal pour pouvoir équilibrer, il n’était pas la solution miracle. Pour le reste de mes tests, j’ai utilisé un intervalle de boucle de commande de 5mS.
Filtre de fusion de capteurs
Ensuite, je me suis déplacé pour le filtre de fusion du capteur. Pourquoi avons-nous besoin de toute façon un filtre de fusion ? Pour répondre à cette question, nous devons examiner le cœur d’un système de balancier, l’IMU (unité de mesure inertielle). L’IMU est constitué de deux types de capteurs : un gyroscope et un accéléromètre. Le gyromètre mesure la vitesse angulaire du changement, ou vitesse angulaire. Théoriquement une bonne estimation de la position angulaire peut être générée en intégrant la sortie du gyroscope. Malheureusement, gyroscope capteurs ont un effet appelé dérive – c'est-à-dire qu'ils enregistreront une petite vitesse angulaire même lorsque assis morts encore. Donc si vous générez votre angle estimé seulement en intégrant la sortie de gyroscope, vous devriez avoir une erreur qui continuerait de croître au fil du temps – un problème qui fait une seule solution de gyroscope intenable pour l’équilibrage. Entrez l’accéléromètre. La valeur déclarée par l’accéléromètre comprendra l’effet de la gravitation, qui est constant, ainsi que toute autre accélération, qui variera basée sur le mouvement de l’appareil. Pour le Mio, il est le vecteur de la gravité que nous intéresse. L’idée d’un filtre de fusion est de générer un angle estimé en combinant ces deux capteurs. Il favorise le gyroscope sortie instantanément (passé à travers un filtre passe-haut) mais la sortie de l’accéléromètre à long terme en mesurant la direction gravitationnelle de la terre (passée à travers un filtre passe-bas) pour supprimer toute dérive.
OK, donc nous avons besoin d’un filtre de fusion, mais lequel ? Il existe des solutions très complètes et complexes. Le filtre de Kalman est l’un des plus éminents filtres fusion, mais même un diplôme d’ingénieur ne peut pas entièrement équiper vous de comprendre ce qui est dans la boîte noire. Pour ce projet, j’ai utilisé une solution similaire, mais moins mathématiquement exigeante, le filtre Madgwick. J’ai utilisé ce filtre pour une raison principale : il était livré avec le 101 Arduino ! Mais la configuration de l’UMI dans le cas d’équilibrage – seulement un degré de liberté, crée des contraintes qui nous permettent d’utiliser une solution plus simple, le filtre complémentaire. Le filtre complémentaire obtient son nom parce que les facteurs de multiplication pour chaque terme ajouter jusqu'à 1. Un schéma d’un filtre complémentaire est illustré à la Figure 1.
Il existe quelques traitements très bons sur le web pour les détails derrière le filtre complémentaire, alors avant, que j’ai juste donner l’équation de filtre. Dans l’équation, A est une constante qui détermine les caractéristiques du filtre. En outre, il convient de noter que dans les calculs d’angle accéléromètre, nous profitons du rapprochement de petit angle – une réalisation que pour des angles moins de ~ 30̊, sin(θ) ≈ θ en radians. Pour notre robot, l’angle s’approche de 30̊, it ' s Gonna bascule, afin que l’hypothèse semble valide. Ainsi, nous pouvons ignorer les sin(θ) dans ce calcul avec peu d’impact. Enfin, la constante de temps du filtre complémentaire est également reproduite ci-dessus.
J’ai testé le Madgwick et le filtre complémentaire pour voir comment il influé sur l’équilibrage du robot. Le stock Madgwick filtrer comme installé a la Beta défini sur 0,1, en utilisant une instruction #define dans le fichier d’en-tête MadgwickAHRS.h. Le robot n’aurait pas équilibrer avec ce paramètre, la réponse a été un peu trop paresseux. Après avoir joué, j’ai trouvé qu'un paramètre de 0,01 activé le meilleur équilibrage, s’il y avait un compromis dans la précision de l’angle absolu avec ce paramètre. Si vous occupé le robot à un angle pendant un moment, dire 20̊ et il retourna ensuite à la verticale, il y avait un décalage dans l’angle estimé à son retour à 0̊.
Pour le filtre complémentaire, j’ai utilisé A = 0,98, ce qui donne une constante de temps d’environ 0,25 secondes, avec dt 5 millisecondes. J’ai trouvé des résultats comparables au filtre Madgwick, et mieux que mon premier projet, mais toujours ne pas rock solide d’équilibrage. Si la recherche continue.
L’utilisation de retour positionnel (encodeurs)
Les DC motoréducteurs que j’ai choisi pour ce robot inclus encodeurs pour fournir la rétroaction sur le mouvement de l’induit du moteur. Les codeurs sont sur l’arbre du moteur avant l’engrenage ne se produise, afin de fournir une résolution assez élevée sur mouvement - avec le rapport de vitesse et roues de diamètre utilisés, j’ai déterminé que chaque transition encodeur traduit en ~0.04cm. Distance et la vitesse étaient alors assez simples de dériver, en comptant les transitions de l’encodeur sur un intervalle de temps régulier et puis en multipliant le résultat par 0,04 pour obtenir la distance et en divisant cette distance par l’intervalle de temps (20mS dans mon cas) pour obtenir la vitesse.
Je prévois mon prochain projet pour aborder plus en détail les fonctionnalités de navigation du robot, donc je n’entrerai pas dans les détails ici, mais les deux méthodes ont été utilisées pour contrôler la vitesse du robot – réglage de l’angle de la cible et l’addition directe aux valeurs PWM moteurs. Ajout de contrôle de vitesse a fait enlever le robot « errant » mais n’a pas significativement amélioré d’équilibrage. Sur la boucle de régulation.
Variables de boucle de contrôle et de la structure
La boucle de contrôle principal du robot de pondération repose sur deux éléments – le filtre de fusion afin de déterminer l’angle estimé du robot et un régulateur PID à utiliser l’angle estimé pour générer le signal de commande du moteur. L’idée derrière un régulateur PID consiste à calculer l’erreur d’un signal de commande contre un point de consigne et ensuite additionner les formes proportionnels, intégral et dérivés de cette erreur après que qu’ils ont chacun été multipliées par constantes distincts. Le très polyvalent comme un élément de commande, où l’erreur a été (I), où il est maintenant de rejoindre le contrôleur PID (P) et où il est dirigé (D). Mais soyez prévenu - il peut être une tâche très difficile d’optimiser les multiplicateurs pour les P, I et modalités D. La figure 2 est un diagramme montrant la structure et contrôle une connectivité de base et reflète la configuration initiale de ce robot.
Après inspection, vous pouvez remarquer que le terme de contrôleur D PID prend la dérivée de l’angle estimé, qui se traduit par un taux estimatif angulaire du changement. Si vous vous souvenez, le gyroscope assurait juste que, une vitesse angulaire de changement, mais c’est beaucoup plus précis. Cela nous amène à se demander comment la boucle de régulation se comporterait si la sortie de gyroscope servaient directement, plutôt que de recalculer la vitesse angulaire de l’angle estimé.
Après s’être nourries le gyroscope directement à terme D du PID, le changement à équilibrer les performances a été spectaculaire. La figure 3 donne un aperçu sur pourquoi – il montre la sortie de gyroscope à côté le terme D du PID. La vitesse angulaire du changement provenant de l’angle estimé accuse la sortie du gyroscope sur 150mS, un retard qui permet d’expliquer certains de l’oscillation dans l’équilibre de la configuration d’origine et vous fait vous demander comment il équilibré à tous.
La figure 4 montre la configuration finale, avec le gyroscope est dirigé directement vers le terme D du contrôleur de PID. Alors que toutes les zones explorées a eu des répercussions sur l’équilibre entre performance, fournissant une indication plus rapides et plus élevé de fidélité de la vitesse angulaire du gyroscope condition le changement en performance robot, que je cherchais.