Détails
En regardant l' exemple de base PID, je pense que vous avez juste besoin d'instancier deux copies du contrôleur PID, une pour chaque roue, encodeur et pwm:
PID leftPID(&InputLeft, &OutputLeft, &SetpointLeft,2,5,1, DIRECT);
PID rightPID(&InputRight, &OutputRight, &SetpointRight,2,5,1, DIRECT);
Ensuite, dans votre loop()
équivalent, il vous suffit de lire les deux encodeurs, de passer chaque valeur d'encodeur à la valeur appropriée PID
et d'écrire finalement les deux valeurs PWM.
Pour l'instant SetpointLeft
et SetpointRight
peut en fait pointer vers la même valeur, mais les définir séparément comme ceci vous permet d'ajouter la capacité de tourner plus tard.
Concepts
Bien que cela puisse fonctionner pour le cas de base, sa suffisance dépend vraiment de la précision dont vous avez besoin pour que votre ligne droite soit.
Étant donné que vous avez des encodeurs sur chaque roue, si vous exécutez deux boucles PID et comparez l' erreur suivante de chaque roue , vous pouvez potentiellement calculer votre erreur d'abbé maximale sur la distance, en supposant que vos roues ne glissent pas. Si cette erreur est inférieure à vos besoins, il vous suffit de compter à plat .
Cependant, si vos roues ont tendance à glisser, vous pouvez avoir caché l'erreur suivante que votre système de contrôle ne peut pas détecter et vous aurez besoin d'un moyen pour détecter un glissement ou calculer la position indépendamment de vos encodeurs de roue, puis utiliser un logiciel de niveau supérieur pour corriger exigé les positions / vitesses des roues pour maintenir une ligne droite.
Détermination de la position relative
Comme le suggère John , vous pouvez peut-être utiliser un accéléromètre pour déterminer la position, mais étant donné leur précision et l'effet des erreurs accumulées au fil du temps, il est préférable d'utiliser les données de l'accéléromètre pour détecter et corriger le patinage des roues.
En robotique mobile, les techniques de filtrage de Kalman sont couramment utilisées pour fusionner les données de plusieurs sources, comme un accéléromètre et les encodeurs de roue pour mieux déterminer la position actuelle.
Quoi que vous fassiez avec la détermination de la position relative cependant, au fil du temps la position que vous vous croyez être en va dériver loin de votre position physique réelle.
Détermination de position absolue
La seule façon de contourner cela est d'avoir un point de référence en dehors du cadre de référence de votre véhicule.
Un roomba, par exemple, utilise généralement un calcul à l'estime pour se déplacer dans une pièce, mais chaque fois qu'il doit s'arrimer, il recherche un faisceau de lumière infrarouge envoyé par le quai de chargement. Lorsque le roomba se déplace de manière aléatoire à travers ce faisceau, il le détecte, se verrouille sur le faisceau et le suit jusqu'à sa source. En combinaison avec ses capteurs de choc, il peut se positionner avec précision sur les contacts de charge.
Pour votre robot, il peut avoir une position d'origine, où il peut revenir et détecter qu'il se trouve à cet endroit connu. À ce stade, il sait exactement où il se trouve et peut indiquer à quelle distance se trouve sa position calculée par rapport à sa position réelle.
Une autre option, si vous avez besoin que votre robot voyage en ligne droite sur des centaines de mètres, serait de passer à une technique différente, comme l'ajout d'un bouclier GPS Arduino .
Une combinaison de techniques
En fin de compte, selon vos exigences de précision, vous devrez peut-être utiliser une combinaison de ces techniques.
Si un faisceau de guidage est possible, vous pourrez peut-être faire ce que vous voulez très simplement avec une technique de suivi de ligne invisible . Si vous devez vous déplacer dans une ligne droite arbitraire dans une zone contrainte, alors comme le roomba, vous pourrez peut-être utiliser une paire de faisceaux de guidage (à angle droit l'un par rapport à l'autre) pour vous permettre de corriger votre position synthétisée dans un axe cartésien chaque fois que le robot passe l'un des faisceaux.
Il y a beaucoup d'options ici, et ce que vous choisirez dépendra de ce dont vous avez besoin.