2

Trapèzes de vitesses à l’aide du filtre de Kalman

Maintenant qu’on a un filtre de Kalman qui estime les paramètres des moteurs, il va falloir l’utiliser. Première utilisation : faire des trapèzes en vitesse sans aucun autres asservissement. On va envoyer aux moteurs la consigne théorique en vitesse ET accélération, le filtrage de Kalman s’occupant du reste. Ci-suit une petite vidéo de démonstration sur une distance de 1m et une accélération suffisamment faible pour être perçu :

 

Bon sur la video rien d’extraordinaire, mais gardez à l’esprit qu’il n’y a aucun PID !!

Si on regarde les enregistrements voici la comparaison entre la vitesse mesurée par les encodeurs (en rouge résolutions 1° d’où le bruit de quantification) et la consigne en vert. Les spikes sur la courbe vertes sont du au manque de résolution de l’instrumentation.

A titre personnel je trouve que ça fonctionne pas mal !! Si la consigne n’est pas bien suivi pendant la première demi-seconde, c’est lié a l’implémentation du Filtre de Kalman qui ne s’active pas tout de suite après un passage par la vitesse nulle pour éviter les problèmes lié au jeu des moteurs Lego.

Regardons les consignes :

Quelques remarques :

  • la consigne sur le moteur droit est plus importante que sur le moteur gauche : c’est normal j’ai volontairement mis plus de poids sur la roue droite que sur la roue gauche du robot, le filtre de Kalman l’a compensé !!
  • à 5 deci-secondes il y a une discontinuité, cela correspond au premier recalage du filtre de Kalman
  • à 10 deci-secondes : fin de la période d’accélération, la consigne d’accélération devient nulle d’où une consigne qui baisse d’environ 5 points
  • à 50 deci-secondes : on passe en mode décélération, la consigne baisse d’environ 5 points
  • à 60 deci-secondes : fin du trapèze de vitesse, on passe d’une consigne de 5% à 0 ce qui correspond à la commande pour s’affranchir du frottement sec.

Et si on regarde les positions : la différence entre la position théorique et la position mesurée par l’odométrie donne :

Si on omet les 5 première deci-secondes (filtre de Kalman inactif) on accumule 3cm d’erreur de position pour 100cm parcourue. Une précision de 3% sans aucuns asservissements, c’est très bon, surtout si on considère que le lsb de la commande représente 2% de la commande maximale. !!

La suite : on va rajouter un asservissement en position pour compenser les 3% d’erreurs qui restent.

  1. Keuronde dit :

    Si vous n’y allez pas au bluff, c’est vraiment impressionnant ! Je me souviens d’avoir vu le filtre de Kalman en cours et ça m’avait paru (après quelques heures de réflexions) simple sur le principe mais difficile à mettre en œuvre.

    J’ai entendu des amis dire qu’ils allaient mettre en place un filtre de Kalman, mais vous êtes les premiers à montrer à mes yeux un truc vraiment fonctionnel. Avec un système aussi bien maitrisé, l’asservissement devrait être très performant !

    Merci pour vos explications qui sont quand même très claires !

    Bon courage pour la suite !

    • thibaut dit :

      C’est pas du bluff ;) Ca a demandé un peu de travail, mais contrairement à un PID on peut peaufiner les réglages tranquillement devant Matlab (le filtre a d’abord été codé en Matlab avant d’être retranscrit en RobotC)
      La difficulté du filtre de Kalman ne réside pas dans les formules du filtre en lui même, elle réside dans la bonne modélisation du système et surtout dans le bon réglage des bruits !!
      Avec cet asservissement on espère pouvoir tirer le maximum des moteurs lego, on verra ce que ça donne sur la base roulante de 2013.