Trajektorienkrümmungen in Echtzeit ermitteln (zeitdiskret)

Gast #3395490
Lesenswert?

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
#3396091
Lesenswert?

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 #3399090
Lesenswert?

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.
#3400056
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren