PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Algorithmus für fortlaufende Bahnkurvenberechnung



Soror
18.11.2005, 13:19
Hallo allerseits,

ich habe da ein mathematisches Problem und hoffe, dass mir das "allwissende" Forum weiterhelfen kann. Ich übermittle meinem Roboter Positionsdaten, die er mit einer schönen Kurve abfahren soll. Ich kann auch jeweils einige Positionsangaben im Voraus senden (ca. 1 Sekunde). Nun würde ich gerne aus diesen Positionsangaben eine stetige Bahnkurve berechnen.

Ich denke dabei an eine Lösung, in der ich jeweils ein "Fenster" von beispielsweise 7 Punkten ( x/t-Diagramm) nehme und darüber die Kurve berechne. 3 Punkte in der Vergangenheit, 1 Punkt in dem sich der Roboter zur Zeit befindet, 3 Punkte für die nahe Zukunft. Mein erster Gedanke war eine Approximation mit Polynomen. Wenn das Berechnungsfenster aber um eine Position "verschoben" wird, verändert sich die Bahnkurve und der Übergang von der alten zur neuen Kurve ist nicht stetig. D.h. der Roboter macht einen Ruck. Mit der Bezier-Kurve kann ich diesen Ruck zwar verhindern, ich erreiche aber meine vorgegebenen Punkte nicht mehr.

Daher suche ich einen Algorithmus oder einen Lösungsvorschlag, der eine solche Bahnkurve schön stetig berechnet. Mindestens die x/t und die v/t Kurve müssen stetig sein. Unter Umständen muss sogar die zweite Ableitung, also die a/t-Kurve auch stetig sein. Ich bin nicht sicher wie stark das Schienengerüst der Roboter (ca. 30 bis 50 Stück) anfängt zu Schwingen, wenn sie mit einem Ruck beschläunigen.

Ich bin für alle Hinweise und Vorschläge dankbar :-).


Grüsse,

Soror

SprinterSB
18.11.2005, 23:12
Schon mal mit (kubischen) Splines (http://de.wikipedia.org/wiki/Spline) versucht? Falls die nicht genügen, evtl Splines höherer Ordnung.

BlueNature
19.11.2005, 00:20
Servus Soror!

Ich habe da mal was ausgetüftelt gehabt mit Kurvenbahnen. Grundlage war ein Radius und ein zu fahrender Reisabschnitt. Wenn du jetzt in festen Zeiteinheiten immer eine neue Berechnung der Sollposition des linken Antriebs und des rechten Antriebs durchführst bekommst du die fortlaufenden Sollwerte des linken und des rechten Antriebs. Annahme die Geschwindigkeit ist fest hast du in jeder Zeiteinheit den selben Weg und Winkel bis zum Zielpunkt. Diese Zeitabschnitte sind viele kleine Wegstrecken welche immer eine kurze Gerade bilden. Wenn man nun das ganze näher betrachtet erhältst du Dreiecke auf der Kurvenbahn welche eine konstante Größe besitzen. Diese sind im Voraus zu berechnen anhand der Interpolationsrate und der zu fahrenden Strecke, also der Zeit welche die Strecke benötigen wird.

Mach einfach mal den Versuch und setz immer an der Innenseite des vorhergehenden Dreiecks ein gleichartiges Dreieck an. Du wirst auch ohne Zirkel eine Kreisbahn zeichnen. Das ist das Grundprinzip der Kurveninterpolation.

Vorraussetung ist natürlich ein guter Lage-, Drehzahl- und evtl. Stromregelkreis je Antriebsseite der fortlaufend mit den errechneten Interpolationsdaten beschickt wird im fest einzuhaltenden Zeitintervall der Interpolation.

Grüße Wolfgang

19.11.2005, 17:16
hallo,

danke für die 2 Tipps :-).

@Georg-Johann: Das mit den kubischen Splines sieht sehr interessant aus. Ich werde mich da mal einarbeiten. Ich kannte bisher nur B-Splines, die die Punkte nicht exakt treffen. Ich hoffe meine Atmega128 beitzt genug Rechenleistung, um diese kubischen Splines zu berechnen.

@Wolfgang: Das mit den 3ecken und den Kreisen ist eine interessante Lösung. Aber einen solchen Algorithmus auszutüfteln der eine schöne stetige Bahnkurve berechnet ist wahrscheinlich nicht gerade leicht. Ich werd mich daher an die kubischen Splines halten, da find ich schnell einen Algotithmus aus nem Mathebuch :-).

Grüsse,

Soror