Ich arbeite mit einem Wasserfahrzeug, das sich mit vier Motoren fortbewegt. Sie werden an der Ecke platziert und fixiert. Daher werden die Bewegungen erhalten, die die Geschwindigkeit von jedem ändern.
Das Fahrzeug kann sich entlang drei Achsen bewegen: Y (vorwärts, rückwärts), X (links, rechts), Z (Gieren, CW und CCW). Ich erhalte den Sollwert für jeden, Beispiel:
Das bedeutet, dass das Fahrzeug mit 50 % der maximal zulässigen Geschwindigkeit vorwärts fahren und gleichzeitig mit 20 % gegen den Uhrzeigersinn drehen muss.
Mein Code weist jedem Motor einen Wert basierend auf dem obigen Wert nach dem Überlagerungsprinzip zu. Beispiel:
Es funktioniert, aber um das Verhalten zu verbessern, müssen wir berücksichtigen, dass der vom Motor ausgeübte Schub nicht linear ist. Und wenn es sich umgekehrt dreht, ist die Kurve anders.
Ich habe die Kurven bereits gemessen und interpoliert und bin am Ende auf zwei Funktionen gekommen, die das Verhalten beschreiben: f(x)_fwd und f(x)_bck.
Da der Schub sowohl von der Geschwindigkeit als auch von der Richtung abhängt, verstehe ich nicht, wie ich das kompensieren soll. Ich meine, ich kann den endgültigen Geschwindigkeitswert nicht einfach in die Variable „x“ eingeben, da dieser Wert die Summe verschiedener Beiträge (x-, y-, z-Achse) ist und jeder eine andere Kompensation erfordert.
Ich kann diese Korrektur auch nicht am Anfang anwenden, bevor jeder Beitrag summiert wird, da ich die endgültige Geschwindigkeit und Richtung des Motors noch nicht kenne und daher nicht wissen kann, welche Gleichung ich verwenden soll.
Ein Gedanke ist folgender:
Es ist nicht optimal, weil es mit unterschiedlichen Geschwindigkeiten (aufgrund der Korrektur) enden wird, die den Arbeitspunkt und sogar die Gleichung erneut ändern (dh wenn ein Motor ursprünglich auf -5% eingestellt war, könnte nach der Korrektur auf + geändert werden 5 %!).
Was ist in einem solchen Fall die richtige Vorgehensweise? Ich bin mir sicher, dass es sich um ein sehr häufiges Problem handelt, aber ich kenne die genauen Wörter nicht, die ich verwenden soll, um Literatur darüber zu finden.
Ich füge einige Details hinzu, um die Frage zu verbessern. Zunächst ist das Fahrzeug wie eine kleine Plattform (1 x 2 Meter) mit vier Motoren an jeder Ecke. Die Motoren werden auf diese Weise bei 45° Grad platziert:
Wo der Pfeil den Schub anzeigt, der ausgeübt wird, wenn eine positive Spannung an den Motor angelegt wird.
Ich muss nur grundlegende manuelle Bewegungen (vorwärts/rückwärts, nach links/rechts verschieben, im Uhrzeigersinn/gegen den Uhrzeigersinn drehen) bereitstellen .
Wenn ich mir das Bild oben anschaue, ist klar, dass ich jeden Motor anders steuern muss, um die gewünschte Bewegung zu erhalten. Um beispielsweise vorwärts zu gehen, sollte jeder Motor auf denselben X-Wert eingestellt werden. Um die CW-Motoren 1 und 2 (unten links und oben links) zu drehen, sollten sie negativ sein, während 3 und 4 (oben rechts und unten rechts) positiv sein sollten.
Das Problem ist, dass der vom Motor ausgeübte Schub nicht linear mit der Steuerspannung ist, und wenn er umgekehrt wird, ist der Schub viel geringer. Wenn ich also drehen und die gleiche Spannung von ± X an jeden anlegen möchte, dreht er sich nicht um seine Mitte, weil diejenigen, die sich umkehren, zu viel weniger Schub liefern.
Eine erste Korrektur besteht darin, diejenigen zu kontrollieren, die sich vorwärts drehen, mit 30 % weniger als diejenigen, die sich negativ drehen. Dies verbessert die Rotation erheblich, ist aber nicht genau, da das Verhältnis zwischen positivem und negativem Schub von der Steuerspannung abhängt.
Mit der Gleichung, die ich gefunden habe, kann ich jetzt jede Steuerspannung unter Berücksichtigung des tatsächlichen Schubs genau einstellen, aber das Hauptproblem ist, wo ich diese Gleichung platzieren soll .
Wie in der ursprünglichen Frage gesagt, funktioniert es nicht, wenn ich diese Gleichung auf den Endwert jedes Motors setze, weil es die Summe aller Bewegungen ist. Beispiel: Wenn ich nur eine Drehbewegung habe, drehen sich zwei Motoren vorwärts und zwei rückwärts. Aber wenn das Fahrzeug gleichzeitig vorrücken muss, drehen sich alle Motoren vorwärts, aber einige mehr als andere (um auch die Drehung bereitzustellen).
Daher haben die Endwerte der Steuerspannung nicht mehr die Information darüber, was die Achsenbefehle waren, während die Achsenbefehle noch nicht die Endwerte der Steuerspannung haben (um zu entscheiden, welche Gleichung verwendet werden soll: positiv oder negativ).
Keine Antwort, eher ein langer Kommentar:
Diese Frage bezieht sich eher auf Mathematik, also solltest du in einem Mathematikforum nachsehen. Angenommen, Sie haben drei Motoren, dann sollten Sie die genaue Geschwindigkeit für verschiedene Setups messen. Jetzt erhalten Sie N Gleichungen mit N zu berechnenden Koeffizienten. Dies geschieht durch mehrere Methoden. Stichworte: Gauss-Eliminierung, Jacobi-Determinante, partielle Ableitungen,... Das System kann immer noch ein lineares System sein: mehr Messungen, mehr Interpolationspunkte, genauer.
Sie können zum Beispiel einige Kalibriertechniken für MEMS-Magnetometer, Beschleunigungsmesser nehmen.
Es wäre jedoch die beste Option, das genaue Messmuster zu bestimmen, das die wertvollen Informationen des Systems berücksichtigt.
Da die Drehzahl gegenüber der Spannung nur ohne Last [kV/RPM] linear ist. Der Effekt des Ladens ist eine Verringerung der Drehzahl um etwa 20%, wenn es gut auf die Aufgabe abgestimmt ist. Es wird eine Startspannung geben, die je nach Haftreibungsschwelle schätzungsweise 15 bis 30 % betragen kann. Die prozentuale Drehzahlreduzierung bei Wasserbelastung kann je nach Propellerdesign im Vergleich zum Trockenlauf mit der Drehzahl zunehmen.
Der beste Weg ist, den Motor und das Laufrad in Wasser zu testen und die Drehzahl, die Spannung, den Strom und den Fahrzeugschub [N] zu messen . Ich würde diese Wertetabelle verwenden oder eine Gleichung ableiten, um sie für die Eingangsleistung [W] im Vergleich zur Schubkraft oder PWM zu verwenden Spannung gegen Drehzahl.
Dann können Sie Ihre verbrauchten Amperestunden akkumulieren oder Wattstunden können von der Batteriekapazität für die Tankanzeige abgezogen werden. Bei einer Verbrauchsrate von weniger als 20 h muss die Batteriekapazität herabgesetzt werden.
Tony Stewart EE75
Tony Stewart EE75
Markieren