TooShuss wrote:
Je ne souhaite pas obligatoirement un PID, un asservissement basic ira trés bien
J'ai envie de dire, un PID est un asservissement basic.
Tu veux asservir en vitesse chaque moteur indépendamment de l'autre (déjà je ne suis pas sûre que ça soit ce que tu veux, parce que pour aller droit....)
Asservir un moteur c'est lui fixer une consigne et le forcer à calquer sa sortie le plus fidelement possible.
Ton système à donc:
- Une entrée (ta consigne de vitesse d'un moteur)
- Une sortie (ta commande moteur)
- Une seconde entrée "Retour" (l'image de la vitesse de ton moteur)
L'image de ta vitesse tu l'exprime en tick/sec, néanmoins ton capteur te donne uniquement des ticks. Ton programme doit compter ces tick et relevé le compteur tout les xtemps (x étant 100ms par exemple), pour créer une variable en tick/100ms.
1) Un asservissement basique c'est calculer l'erreur entre la consigne et le Retour. Erreur = (Retour - consigne).
On affecte alors cette erreur à ta sortie : Sortie = Erreur.
Tu ajoute un coefficient proportionnel (P) pour améliorer la dynamique de ton système (sa réactivite).
2) Sortie = P*Erreur.
Tu peux prendre en compte l'erreur précédent dans ton calcul pour garantir une erreur statique nul (précision) avec un coefficient intégral(I).
3) Sortie = P*Erreur + I*(Ancienne_Erreur+Erreur)
Enfin tu peux ajouter le coefficient D pour apporter de la stabilité au système.
4) Sortie = P*Erreur + I*(Ancienne_Erreur+Erreur) + D*(Ancienne_Erreur-Erreur)
Pour les puristes, j'ai pris des libertés avec l'automatique dans mes explications, néanmoins si tu joues petit à petit avec les équations que je viens d'énoncé, tu devrais seul arriver à un résultat potable. Attention tout de même, tu parles d'asservissement en vitesse de chaque moteur indépendant, et plus loin tu souhaiterais aller droit. De mon expérience, il est très difficile d'avoir un résultat potable en asservissement de robot, en prenant en compte uniquement les moteurs seuls sans prendre en compte l’interaction d'un moteur sur le mouvement du robot. Même en faisant deux PID (un par moteur) et en synchronisant mon code pour que les moteurs s'attendent, j'ai eu dans le passé des comportements trop dégradé pour avoir une précision intéressante.
Donc attention à bien te fixer un objectif à la hauteur de ton apprentissage/prototype.
_________________
Président de l'association de robotique
I-Grebot de Grenoble
http://www.igrebot.fr |
Wiki |
Forum|
Vidéos