Ich konstruiere einen automatischen Labyrinth-Labyrinthlöser und verwende eine Webcam, um mein Labyrinth zu steuern.
Aufgrund von Vorschlägen in anderen Foren versuche ich derzeit, die Ballbewegung des Labyrinths mindestens in eine Richtung zu steuern. Ich versuche also, meine Ballbewegung zwischen zwei Koordinaten 466.288 und 466.152 zu steuern. Die Eingabe in die Schrittmotor-Steuerplatine ist die Zeit, keine Anzahl von Schritten, die für jede Achse gedreht werden müssen, dh x und y.
Die von mir verwendete Schrittmotor-Steuerplatine ist die Steppmotor-Steuerplatine für Eierbot: http://www.sparkfun.com/products/10025
Um zwischen zwei Punkten zu wechseln, sollte ich eine Reihe von Wegpunkten zwischen den beiden Punkten erstellen, nämlich 288 und 152 (z. B. 260 240 230 ... 150), und meine Ballbewegung korrigieren?
Mein Bildverarbeitungsalgorithmus ist nicht schnell genug, um den Ball so zu verfolgen, dass sich der Ball nur dreht und in ein Loch fällt.
Einige schlugen vor, dass ich eine Standardvorlage verwende, wie im folgenden Video gezeigt, und meine Ballbewegungen auf Abweichungen im Pfad korrigiere:
http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded
Ich bin auch auf ein Bildverarbeitungswerkzeug gestoßen, bei dem das gleiche Problem mithilfe von Wegpunkten für die Ballbewegung gelöst wurde. Da ich zu viele Lösungen für dasselbe Problem sehe, bin ich völlig verwirrt, wenn es darum geht, das Problem zu lösen. Mir ist bewusst, dass ich einen PID-Regler implementieren sollte. Aber wie soll ich die Probleme schrittweise lösen? Ich stecke fest und bin nur frustriert, einen Vorsprung bei der Lösung des Problems zu finden.
Mein Setup sieht folgendermaßen aus:
... und hier ist ein Screenshot meiner Software:
Revision 2: Ich stehe jetzt auch vor einem neuen Problem: Früher habe ich die Schrittmotoren über das Java-Applet der seriellen Arduino-Schnittstelle gesteuert. Ich kann die Stepper mit dem Applet fahren.
Ich muss die Karte jedes Mal zurücksetzen, wenn ich versuche, über die serielle Schnittstelle zu kommunizieren. Außerdem schaltet sich der Schrittmotor in kleinen Intervallen ein, wenn kein Befehl an ihn gesendet wird. Wenn der Schrittmotor in diesen Modus wechselt, kann ich meine Karte nicht steuern, ohne die Karte zurückzusetzen. Jede Unterstützung wäre dankbar.
Revision 3:
Ich habe einige Fortschritte gemacht, als ich den PID-Algorithmus implementiert habe. Das Video finden Sie unten: http://www.youtube.com/watch?v=MEfp7RqPmqY
Jetzt habe ich ein Problem mit der Geschwindigkeit, mit der der PID-Algorithmus implementiert wird. Tatsächlich beendet meine Bildverarbeitung einen Zyklus in 200 ms, identifiziert eine Kugel und sendet die Befehle an die Schrittmotor-Steuerplatine. Obwohl meine serielle Schnittstelle Befehle zum Umschalten der Richtung erhält, dreht sich mein Stepper weiter in die gleiche Richtung. Sie finden das seltsame Verhalten im Video oben.
Mein Gedanke ist, dass ich die PID-Werte mit einer Obergrenze einschränken sollte. Wenn der berechnete PID-Wert größer als 100 ist, sollte ich einfach eine 100 senden. Ich freue mich darauf, Ihre Gedanken dazu zu hören.
Die Art und Weise, wie ich den PID-Regler implementiert habe, besteht darin, dass ich den Startpunkt der Vorlage mithilfe des Vorlagenanpassungsalgorithmus identifiziert und den Ball mithilfe eines anderen Vorlagenanpassungsalgorithmus identifiziert habe. Jetzt habe ich den Ball zum Schwerpunkt der Startpunktvorlage bewegt. Wie kann ich mit dem PID-Algorithmus der geraden Linie folgen?
Revision 4:
Ich habe die Flugbahn isoliert, kann jedoch nicht die richtige Funktion zum Drucken der richtigen Pixelkoordinaten vom Startpunkt aus finden. Irgendwelche Gedanken?