Forum: Digitale Signalverarbeitung / DSP / Machine Learning Trajektorienkrümmungen in Echtzeit ermitteln (zeitdiskret)


von rava (Gast)


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

von Rainer Z. (razi)


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

von rava (Gast)


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.

von Detlef _. (detlef_a)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.