Trajektorienkrümmungen in Echtzeit ermitteln (zeitdiskret)

Gast #3395490
guten Abend,
ich stehe gerade etwas auf dem Schlauch. Vielleicht habt ihr einen Tip 
für mich.

Ich muss Messsignale auf Plausibilität untersuchen. Und zwar in 
Echtzeit.

Meine Eingänge sind x[k] und y[k], die in konstanten Zeitintervallen 
abgetasteten Positionen einer Trajektorie.
Nun sind nur solche Messwerte plausibel, die eine Krümmung mit 
bestimmten Eigenschaften implizieren.
Ich möchte also die Bahnkrümmung in 2D ermitteln, um sie gegenzuchecken.
Klar ist, dass wenn ich x[k] und y[k] messe, lediglich die Krümmungen 
bis kappa[k-1] ermitteln kann.
Im einfachsten Fall mache ich ein Kreisfitting mit den Koordinaten von 
k, k-1 und k-2 und verkaufe das als Krümmung.

Leider ist das Kreisfitting sehr langsam also habe ich nach einer 
schnelleren Formel gesucht.
für den kontinuierlichen Fall gibt es die Formel

allerdings setzt diese Voraus, dass man die Ableitungen v und a kennt, 
die ja im diskreten Fall nur näherungsweise bekannt sind.
ich berechne v_x[k] = x[k] - x[k-1] uns a_x[k] = v_x[k] - v_x[k-1].
Das hat aber zur Folge, dass nach dieser Formel eine starke 
Geschwindigkeitsabhängigkeit entsteht. Nahe der Geschwindigkeit null 
sinkt die Krümmung rapide ab. Und das selbst für Punkte, die 
offensichtlich eine starke Krümmung aufweisen.

Mache ich irgendetwas falsch oder gibt es eine Formel für mein Problem?

Ansonsten bleibe ich beim Kreisfitting
Hai!

rava schrieb:
> Leider ist das Kreisfitting sehr langsam

Hmmm. Wieso das?

Durch Deine drei Punkte k-2, k-1 und k sind ja auch drei
Sehnen festgelegt, und rein anschaulich sollte der
Kreismittelpunkt der Schnittpunkt der Mittelsenkrechten
dieser Sehnen sein.
Diesen Schnittpunkt sollte man mit den vier Grundrechenarten
aus den Koordinaten der drei Punkte berechnen koennen.

Was übersehe ich?

Grusz,
Rainer
Gast
ich habe mich jetzt für


kappa = theta_dot / |v|


entschieden.


ich hatte gehofft, mir den atan2 sparen zu können, mit dem ich theta 
ausrechnen muss. Aber ich brauch die "Richtung" der Kurve noch an 
anderer Stelle.

Schade.
>>ich hatte gehofft, mir den atan2 sparen zu können

Den atan2 kannst Du Dir schenken, das ist nicht nötig um den Mittelpunkt 
und damit den Radius eines Kreises zu bestimmen, der durch drei Punkte 
gegeben wird.

Das geht rein mit linearer Algebra, nämlich einer Gleichung mit zwei 
Unbekannten, siehe Code. Der Code ist nicht optimiert, das geht wohl 
noch eleganter und schneller. Kern sind und bleiben allerdings zwei 
lineare Gleichungen mit zwei Unbekannten, die Du löst.

math rulez
Cheers
Detlef

clear
x1=[0+1  ; 1+1];
x2=[1/sqrt(2)+1;1/sqrt(2)+1];
x3=[1+1;0+1];
m1=(x2-x1);
m2=(x3-x2);
d1=[m1(2);-m1(1)];
d2=[m2(2);-m2(1)];
coff=inv([d2 -d1])*(x1+m1/2-x2-m2/2);
mittelpunkt=x1+m1/2+coff(1)*d1

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.