Matériel
Le robot R2-Z2, auto-équilibré et à deux roues, est un hybride de logiciels libres et de logiciels développés en interne. Sa structure de base actuelle est inspirée du Balanduino.
http://www.balanduino.net/home
Le châssis du R2-Z2 est inspiré de celui du Balanduino, ce qui facilite l'approvisionnement en composants. Le R2-Z2 utilise des composants électroniques courants provenant de plusieurs fournisseurs, comme SainSmart pour les modules Uno et MPU-6050. Le Balanduino, quant à lui, utilise un circuit imprimé (PCB) spécifique intégrant le microcontrôleur, l'unité de mesure inertielle (IMU) et le contrôleur de moteur.
Filtre IMU
Le filtre de Kalman utilisé dans ce projet provient directement de la partie open source du projet Balanduino. Les deux projets utilisent le circuit intégré (CI) MEMS basé sur une centrale inertielle (IMU) MPU-6050. La seule modification apportée concerne la sortie du filtre. Les valeurs de hauteur issues de ce filtre présentent un léger bruit à droite de la virgule. Un algorithme simple de lissage des données a donc été ajouté. Ceci est particulièrement important car la valeur de hauteur est multipliée par une constante dans le système de rétroaction PID, ce qui amplifie ce bruit.
Contrôleur PID
Le contrôleur PID est composé de trois parties : (1) la partie proportionnelle, (2) la partie intégrale et (3) la partie dérivée. Ces trois parties dépendent de la valeur de tangage (θ) issue du filtre de Kalman. Le tangage correspond à l’angle que forme l’axe vertical actuel du robot (son attitude) avec son axe vertical de référence. La vitesse est donc calculée à partir de cette équation :
Vitesse = Kp θ + Ki ʃ θ(t) dt + Kd dθ(t)/dt
où Kp, Ki et Kd sont des constantes.
On n'utilise généralement pas le terme dérivé, car il provoque des à-coups dans le robot (comme s'il avait bu trop de café !). Par conséquent, un contrôleur PID est en réalité un contrôleur PI.
Choisir les bonnes valeurs pour Kp et Ki est assez délicat. La vitesse globale doit tenir compte de la puissance des moteurs, que l'on utilise la modulation de largeur d'impulsion (PWM) (plage de valeurs) ou, comme dans mon cas, que l'on envoie une valeur ajustée au microcontrôleur PIC des contrôleurs de moteurs. La meilleure méthode consiste à commencer avec Ki = 0 et à trouver une valeur de Kp par tâtonnements, qui donne un résultat proche de celui souhaité (le robot tient presque debout tout seul). Avec Ki = 0, cependant, le robot oscille d'avant en arrière sur une distance croissante. Il faut donc ensuite trouver une valeur de Ki qui stoppe ou atténue fortement cette oscillation.
Communications
Le R2-Z2 utilise le bus I2C pour le module gyroscopique/accéléromètre MPU-6050 et un port série logiciel (n'importe quel port d'E/S numérique peut convenir) pour communiquer avec le module de contrôle moteur MD25. Ce port série dédié permet d'afficher les données de débogage sur la console en mode débogage.
À suivre !