Wie steuere ich einen Kiwi-Antriebsroboter?

8

Ich bin auf dem FIRST Robotik-Team meiner High School und wir arbeiten daran, dort einen Kiwi-Drive-Roboter zu entwickeln sind drei Omni-Räder , die in einer gleichseitigen Dreieckskonfiguration wie folgt montiert sind:

Das Problem besteht darin, den Roboter so zu programmieren, dass er die Motoren so antreibt, dass sich der Roboter in Richtung eines gegebenen Joystick-Eingangs bewegt. Um zum Beispiel "nach oben" zu gehen, würden die Motoren 1 und 2 gleichmäßig versorgt, während der Motor 3 ausgeschaltet wäre. Die Joystick-Position ist als ein Vektor gegeben, und ich dachte, dass, wenn die Motoren auch als Vektoren ausgedrückt würden, Vektorprojektion könnte sei was ich brauche. Ich bin mir jedoch nicht sicher, ob das richtig ist, und wenn ja, wie würde ich es anwenden. Ich habe auch das Gefühl, dass es mehrere Lösungen für eine Joystickposition geben kann. Jede Hilfe würde sehr geschätzt werden.

    
Ben 20.09.2010, 00:26
quelle

4 Antworten

4

Ich habe während meiner Schulzeit 9 Roboter gebaut (1 FIRST, 8 RoboCup). Wir haben das gleiche Omnidrive-Layout verwendet wie Sie. Die Antwort von Beta sieht korrekt aus, aber fügt danach allen Rädern eine Drehung hinzu:

%Vor%

[Dies ist die Formel von Beta mit einigen zusätzlichen Drehungen]

Sie müssen über die verfügbaren Reichweiten für Ihre Motoren nachdenken. Ich vermute, dass es ein PWM-Signal von +/- 255 nehmen kann, also muss entweder der Eingang oder der Ausgang etwas angepasst werden. (Es ist nicht so schwer ...)

Ein gutes Papier mit Details

Um Ihre spezifischen Fragen zu beantworten: Vektorprojektion ist im Wesentlichen das, was Sie hier tun. Sie wenden es an, indem Sie eine Matrix M , Ihre Eingabe vom Joystick I und Ihre Ausgabe an die Motoren O verwenden. Also O = M * I ;

%Vor%     
Unapiedra 29.09.2010, 11:03
quelle
2

Zuerst wollen wir einige Begriffe definieren. Gemäß der üblichen Konvention zeigt die X-Achse nach rechts und die Y-Achse zeigt nach oben (so dass der Schub von Rad 3 entlang der X-Achse ist). Wir nennen die Bewegung der Räder W1, W2 und W3, die jeweils so definiert sind, dass W1 & gt; 0 bedeutet, dass sich das Rad im Uhrzeigersinn dreht. Wenn in Ihrem Beispiel W 1 & lt; 0, W2 = W1 und W3 = 0, bewegt sich der Roboter in der + Y-Richtung.

Wenn alle drei Räder mit der gleichen Rate rotierten (W1 = W2 = W3), würde sich der Roboter an Ort und Stelle drehen. Ich nehme an, dass Sie das nicht wollen, also muss die Summe der Rotationen null sein: W <1> + W 2 + W 3 = 0 .

Die Bewegung jedes Rades trägt zur Bewegung des Roboters bei; sie fügen als Vektoren hinzu:
W <1> <-1/2 X - sqrt (3) / 2 Y
W <2> -1/2 X + sqrt (3) / 2 Y
W 3 = X

Wenn Sie also das gewünschte X und Y vom Joystick kennen, haben Sie W 1 , W <2> und W3 . Wie wir bereits gesehen haben, ist die Differenz zwischen W <1> und W 2, was Y-Bewegung antreibt. Ihre Summe steuert Bewegung in X.

    
Beta 20.09.2010 03:49
quelle
1

Wie Sie erkannt haben, wird der erste Teil eine passende Gleichung finden, um die resultierende Bewegung für alle Motoreinstellungen darzustellen. Abhängig von der Ebene der Kontrolle und der Rückmeldung, die Sie zu Ihren Motordrehzahlen haben, würde ich vorschlagen, dass der Prozess, den Sie gründlich machen, mit dem Schreiben einer Vektorgleichung beginnt: (definieren Sie X als geradeaus)

-M1Cos (30) + M2Cos (30) = X (das Negative ist, weil 1 und 2 für die Vorwärtsbewegung mit der gleichen Stärke, aber entgegengesetzten Polaritäten betrieben werden müssen)

M1Sin (30) + M2Sin (30) -M3 = Y (wenn die Bewegung gegen den Uhrzeigersinn bei 1 und 2 dazu führt, dass sich der Roboter in Y nach links und bei 3 gegen den Uhrzeigersinn bewegt, bewegt sich der Roboter nach rechts)

Der andere Eingang, den Sie hinzufügen müssen, ist die gewünschte Drehung des Roboters, glücklicherweise M1 + M2 + M3 = W (Rotationsgeschwindigkeit)

Ihr Joystick-Eingang gibt Ihnen X, Y und W, so dass Sie 3 Gleichungen mit 3 Unbekannten haben.

Von hier aus handelt es sich um simultane Gleichungen, so dass Sie mehrere Lösungen haben können, aber diese können im Allgemeinen basierend auf möglichen Motordrehzahlen und dergleichen eingeschränkt werden.

Ein Beispiel dafür ist die Klasse rec :: robotino :: com :: OmniDrive - der Quellcode für diese Methode ist ebenfalls verfügbar ...

    
Tim Joseph 20.09.2010 01:34
quelle
1

Obwohl dieses System mathematisch gelöst werden kann, entschied sich FIRST Team 857 im Jahr 2002, es mechanisch zu lösen. Unser Steuersystem verwendete drei Joysticks, die mit ihren X-Achsen montiert waren und ein gleichseitiges Dreieck bildeten, und die Griffe wurden durch Kugelgelenkarme ersetzt, die mit einem Y-förmigen Joch verbunden waren. Ordnen Sie die X-Achse jedes Steuerknüppels direkt einer Motordrehzahl zu, und das Steuersystem wurde gelöst. Ein Vorteil ist, dass dieses System für Laien sehr intuitiv ist - drücken Sie das Joch in die Richtung, in die Sie gehen möchten, und drehen Sie es zum Drehen.

    
Andrew Meyer 20.04.2011 04:30
quelle