Je construis un solveur de labyrinthe automatique et utilise une webcam pour contrôler mon labyrinthe.
Sur la base des suggestions d'autres forums, j'essaie de contrôler le mouvement de la balle du labyrinthe au moins dans une direction pour le moment. Donc, j'essaie de contrôler le mouvement de ma balle entre deux coordonnées 466,288 et 466,152. L'entrée à la carte contrôleur de moteur pas à pas est le temps, pas d'étapes à tourner pour chaque axe, c'est-à-dire x et y.
La carte contrôleur de moteur pas à pas que j'utilise est la carte contrôleur de moteur pas à pas d'oeuf bot: http://www.sparkfun.com/products/10025
Donc, pour me déplacer entre deux points, dois-je créer un certain nombre de points de passage entre les deux points, à savoir 288 et 152 (disons 260 240 230 ... 150) et corriger le mouvement de ma balle?
Mon algorithme de traitement d'image n'est pas assez rapide pour suivre la balle et la faire tourner et tomber dans un trou.
Certains m'ont suggéré d'utiliser un modèle standard comme indiqué dans la vidéo suivante et de corriger mes mouvements de balle pour les écarts sur le chemin:
http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded
Je suis également tombé sur un outil de traitement d'image où ils ont résolu le même problème en utilisant des points de cheminement pour le mouvement de la balle. En voyant trop de solutions au même problème, je suis totalement confus quant à la résolution du problème. Je suis conscient que je dois implémenter un contrôleur PID. Mais comment dois-je procéder pour résoudre les problèmes par étapes? Je suis coincé et frustré de trouver une longueur d'avance pour résoudre le problème.
Ma configuration ressemble à ceci:
... et voici une capture d'écran de mon logiciel:
Révision 2: Je suis également confronté à un nouveau problème maintenant: plus tôt, je contrôlais les moteurs pas à pas via l'applet Java du port série Arduino. Je peux piloter les steppers en utilisant l'applet.
Je dois réinitialiser la carte à chaque fois que j'essaie de communiquer via le port série. De plus, le moteur pas à pas s'alimente par petits intervalles lorsqu'aucune commande ne lui est envoyée. Lorsque le moteur pas à pas entre dans ce mode, je ne peux pas contrôler ma carte sans réinitialiser la carte. Toute aide serait appréciée.
Révision 3:
J'ai fait des progrès où j'ai obtenu l'algorithme PID implémenté. Veuillez trouver la vidéo ci-dessous: http://www.youtube.com/watch?v=MEfp7RqPmqY
Maintenant, j'ai un problème avec la vitesse à laquelle l'algorithme PID est implémenté. En fait, mon traitement d'image termine un cycle en 200 ms, identifie une balle et envoie les commandes à la carte contrôleur du moteur pas à pas. Même si mon port série reçoit des commandes pour changer de direction, mon stepper continue de tourner dans le même sens. Vous pouvez trouver le comportement étrange dans la vidéo ci-dessus.
Ma pensée est que je devrais limiter les valeurs PID avec un plafond où si la valeur PID calculée est supérieure à 100, je devrais simplement envoyer 100. Je suis impatient d'entendre vos réflexions à ce sujet.
La façon dont j'ai implémenté le contrôleur PID est que j'ai identifié le point de départ du modèle en utilisant l'algorithme de correspondance de modèle et identifié la balle en utilisant un autre algorithme de correspondance de modèle. Maintenant, j'ai fait déplacer la balle vers le centre de gravité du modèle de point de départ. Comment puis-je lui faire suivre la ligne droite avec l'algorithme PID?
Révision 4:
J'ai isolé la trajectoire mais je ne parviens pas à trouver la fonction correcte pour imprimer les coordonnées de pixels correctes à partir du point de départ. Des pensées?