Linearisierung des Motorschubs

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:

  • Y-Achse: 50 %
  • X-Achse: 0 %
  • Z-Achse: -20 %

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:

  • Y-Achse -> #1: 50 %, #2: 50 %, #3: 50 %, #50 %
  • X-Achse -> #2: 0%, #2: 0%, #3: 0%, #4: 0%
  • Z-Achse -> #3: -20 %, #2: -20 %, #3: 15 %, #4: 15 %
  • Gesamt: -> Nr. 1: 30 %, Nr. 2: 30 %, Nr. 3: 65 %, Nr. 4: 65 %

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.

Frage

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:

  1. Führen Sie die Berechnungen wie oben beschrieben durch und ermitteln Sie die geschätzte Arbeitsgeschwindigkeit jedes Motors
  2. Wiederholen Sie die Berechnung dieses Mal für jede Achse mit der angewendeten Korrektur als Funktion der geschätzten Arbeitsgeschwindigkeit

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.

BEARBEITEN

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:

Geben Sie hier die Bildbeschreibung ein

Wo der Pfeil den Schub anzeigt, der ausgeübt wird, wenn eine positive Spannung an den Motor angelegt wird.

Was mich nicht interessiert

  • Ich möchte Geschwindigkeit, Geschwindigkeit oder andere Navigationsparameter des Fahrzeugs nicht steuern
  • Die Schnittstelle der Motoren ist nicht aussagekräftig: Ich denke immer in ±100%. Dann kann die Schnittstelle Spannung, 4-20 mA, PWM, serielle Leitung usw. sein ... es spielt überhaupt keine Rolle
  • Das Fahrzeug hat keinen geeigneten Sensor, um seine aktuelle Geschwindigkeit oder Geschwindigkeit zu messen

Was ich schon gemacht habe

  • Ich habe den Motor in einen Pool gelegt, der an einer Wägezelle befestigt ist, und ich habe den Schub für über 50 Sollwertwerte gemessen (dh 0%, 10%, 20%, ..., -10%, -20%, ... )
  • Diese Werte ergeben zwei Kurven (positive und negative Quadranten) in Form von A x^P + B x, wobei x das Steuersignal ist

Was ist das Ziel

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).

Strom ist Beschleunigung, Spannung ist stationäre Geschwindigkeit. Die Richtung hängt von der gespeicherten kinetischen Energie gegenüber der angelegten Kraft*Zeit ab. Die maximale Geschwindigkeit hängt von der Last (Luftwiderstand) im Verhältnis zur maximalen Leistung ab und davon, ob der Schub auf die Last abgestimmt ist.
Kann man mit einem Drucksensor (Staurohr) die Geschwindigkeit messen? oder ein Spirometer?
Nein, es ist nicht möglich. Die Bewegungen befinden sich in einem offenen Regelkreis. Eigentlich interessiert uns die Geschwindigkeit des Fahrzeugs nicht (dafür haben wir einen höheren Regelkreis mit anderen Geräten wie GPS oder INS). Die Geschwindigkeit, von der ich gesprochen habe, sind die Sollwerte der Motoren, um die richtigen Bewegungen entlang der Achsen bereitzustellen.

Antworten (2)

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.

Ich habe bereits den Schub gegen die Spannung in Wasser gemessen und eine Funktion dafür gefunden. Strom und Drehzahl scheinen mir "mittlere" Werte zu sein, die für das Ziel nicht nützlich sind. Außerdem habe ich nie über Batterie gesprochen! Überhaupt keine Batterie. Ich entschuldige mich, wenn mein Englisch schlecht ist, aber ich suche nach der richtigen Stelle in der Regelschleife, wo ich die Gleichungen platzieren soll.
Es hängt davon ab, was Sie steuern möchten. Wenn es sich um einen geschlossenen Regelkreis handelt, muss die Rückmeldung Drehzahl oder Strom sein. Was ist das Ziel?
Ich werde die Frage mit weiteren Details aktualisieren!
Machen Sie sich klar, wie Sie den Schubvektor gemessen haben, der nicht so sehr von der Fahrzeuggeschwindigkeit abhängt, als dass der Schub die Beschleunigung steuert. Wenn Sie also die Fahrzeuggeschwindigkeit steuern möchten, müssen Sie den Motorschub integrieren, der nicht die Motorspannung ist