Bestimmung der Start/Ziellinie in GPS Daten[solved]

Hallo zusammen,

ich habe einen funktionierenden GPS Datenlogger der via SD Karte in einer Textfile alle GPS Daten aufzeichnet. Der Logger ist an einer Yamaha r6 montiert und die Aufzeichnung kann nach dem Startup und der Suche des Satellitensignals via Knopf am Lenker gestartet/beendet werden. So jetzt ist mein Problem, dass ich beim Auswerten die Start/Ziellinie erkennen sollte damit ich dann die jeweiligen Rundenzeiten miteinander vergleichen kann. Hat jemand eine Idee wie ich das am besten hinbekommen könnte? Ich dachte dass ich den Logger nehm, und auf der Ziellinie ein wenig auf und ab lauf um so eine Art "Map" zu erhalten, welche ich dann mit den aufgezeichneten Daten vergleich. Sobald das Motorrad dann innerhalb dieser "Map" ist hab ich das Ziel erkannt. Das ganze wäre natürlich einfacher über eine Lichtschranke neben der Strecke zu realisieren aber ich brauch die Onboardaufzeichnung wegen Geschwindigkeitsdiagrammen, Sektorzeiten usw. Das ganze ist nur Hobbymäßig, der Logger ist ja eh nicht sonderlich genau(5HZ). Daher weis ich nicht ob meine oben genannte Idee überhaupt zuverlässig funktioniert. Bei 250 km/h Zieldurchfahrtgeschwindigkeit und 5HZ Rate des Loggers leg ich pro generiertem Positionswert ca. 14 Meter zurück... Im dümmsten Fall bin ich da schon über Start/Ziel gefahren.

Habt Ihr ne Idee wie ich das am besten lösen kann?

Danke im Vorraus

Noch nicht wirklich, aber ne Logik.
Die Koordinaten der Ziellinie kennst Du.
Solange die aktuelle Position vor der Linie ist, bist Du in der aktuellen Runde.
Ist die nächste gemessene Position nach der Linie, bist Du in der nächsten Runde.

Jetzt kannst Du aus der letzten Position und der aktuellen Position die Laufzeit ermitteln, die Du für diese Strecke (14 Meter) gebraucht hast.
Dann setzt Du ins Verhältnis die Strecke von letzter Messung bis Ziel und bekommst dafür die gefahrene Zeit heraus.
Diese Zeit schreibst Du in die aktuelle Runde und der Rest geht in die nächste Runde.

Kannst Du nen Satz Daten liefern? GPS der Ziellinie und je 5 GPS und Zeitwerte davor und danach, damit mal sieht, wie das aussieht?

Ich hab das so verstanden, dass dies grade eine der Aufgaben ist.
Reicht allerdings, einen Punkt der Strecke entsprechend zu markieren: Entweder der Aufzeichnung Start-Stop Taster (z.B. lang gedrückt, während du auf der Start-Ziellinie stehst) oder ein separater Taster.

"Vor der Linie" bedeutet, dass die Entfernung zum Zielpunkt abnimmt. Mit 4 Messpunkten reicht also einfachste Entfernungsbestimmung zwischen jeweils aktueller Position und Zielpunkt.

Genau so war das gedacht :slight_smile:

Hallo,

dein Map Ansatz ist schon richtig. Denn du weißt ja nie wo du genau herkommst. Die Start/Zielgerade wird ja kaum im 90° Winkel des Koordinatenrasters liegen. Du kannst links oder rechts fahren, das wird in den Koordinaten nicht nur eine Achse verändern.
In deinem Fall müßtest du ja die komplette Strecke ablaufen. Es wäre ein verhältnismäßig hoher Aufwand der immer noch mit Messtoleranzen behaftet ist.
Jedes Autonavi gibt "Ziel erreicht" aus wenn man sich in einem bestimmten Umkreis des Ziel befindet.
Dein Map Ansatz etwas anders.
Du stellst dich auf den Mittelpunkt der Start/Zielgeraden und speicherst diese Koordinaten.
In deinem Programm oder per variabler Eingabeoption berechnest du davon ausgehend einen 15m Umkreis. 7,5m zu allen Seiten. Wenn du fährst und befindest dich im hinterlegten Umkreis biste im Ziel. Verlässt du das biste auf der Strecke.
Den Umkreis musste so groß festlegen das du unter allen Umständen bei Vmax drin liegst. Lieber einen Meter größer, denn wenn du mehrere Runden am Stück fährst spielt das keine Rolle, weil es in dem Umkreis nur eine Erfassung gibt.

Den "Map" - Ansatz halte ich für überflüssig.
Selbst wenn der Start/Ziel - Punkt am Rand der Strecke liegt und du relativ weit davon entfernt die Linie querst, ist doch immer der Fall gegeben, dass die Distanz zum Start/Ziel-Punkt erstmal abnimmt und später zunimmt. Zwischen den zwei minimalen Entfernungen kannst du interpolieren um die "exakte" Zeit der Ziellinienüberquerung ( d.h. wenn du dem Zielpunkt am nächsten warst) zu bestimmen.

Klar solltest du eine Mindestentfernung unterschreiten, um nicht auf der Gegengeraden auch eine Ziellinienüberquerung zu erkennen.

Was hat dieses Thema mit Arduino zu tun?

Soviel ich verstanden habe willst Du eine GPS Aufzeichnung auf dem PC bearbeiten.

Grüße Uwe

Zunächst einmal vielen Dank für eure Antworten,

die Daten hab ich momentan nicht zur Hand(bin gerade auf Geschäftsreise im Ausland), aber die sehen so aus du hast in der linken Spalte ne Zeit, dann berechne ich mir aus den ausgegebenen WGS Koordinatensystem in x und y Werte. Die Höhe wird nicht berücksichtigt.

@michael_x mit "map" meinte ich eine 2D Fläche oder Wolke oder eben wie Doc_Arduino gesagt hat ein Kreis mit einem Gewissen Radius.

Ich hatte das so gedacht mal als Kreis, ist real dann eher was Wolkenförmiges:

Daraus ergeben sich halt zwei Probleme, es gibt halt schon nen großen Bereich. Vielleicht wäre es doch am besten, wenn ich den Logger in die Hand nehm und einmal die Zielline Ablauf. Laut Datenblatt hat der ne Genauigkeit von 2,5 m, kann ich mir schlecht vorstellen, man sagt doch das GPS (außer fürs Militär) irgendwas um die 10m sind oder irre ich mich da? Angenommen dass mit den 2,5 Metern stimmt so halbwegs, dann hätte ich ja sehr (im Vergleich zu Daten vom Motorrad) genau x und y Werte der Ziellinie. in meinem Auswertungstool müsste ich dann nur den ersten Wert überprüfen, Welcher für x und y größer ist als die der Ziellinie. Abhängig von der gefahrenen Geschwindigkeit ergibt sich da halt trotzdem einen entsprechende Messtoleranz. Gut ich bin kein Profi und kann meine Runden auf2 Hundertstel genau reproduzieren...

Die einzige Möglichkeit, die mir einfällt eine höhere Genauigkeit zu bekommen wäre halt ein GPS Logger mit einer höheren Abtastrate. Gibt es für den Arduino einen Logger mit einer höheren Abtastrate als 5Hz?

Grüße

@my_xy_projekt klingt nach einer guten Idee :ok_hand:, leider werd ich das diese Saison nicht mehr ausprobieren können - Bike ist schon eingemottet. Bisher hab ich die Messungen immer via Knopf gestartet und beendet, was natürlich nicht sonderlich genau war bei +250 km/h :rofl:

Grüße

Ausgehend davon, das FinishLine == StartLine ist:
Die Startaufstellung ist doch bekannt.
Damit hast Du mit dem Start der Aufzeichnung den Punkt, auf den Du Dich beziehen kannst.
Wenn Du jetzt in der Startaufstellung erst in der xten Reihe stehst, kennst Du den Abstand zur FinishLine.

Damit verschiebt sich nur der Bezugspunkt. Deine erste Runde ist Runde 0 - wenn Du das erste Mal FinishLine überfahren hast, beginnst Du Deine erste Runde zu zählen.

Also alles nichts, was nicht logisch zu lösen ist.

Damit hast natürlich recht, allerdings zeichne ich ja nicht nur das Rennen auf, sondern auch Quali und Training. Da fahr ich ja erst mal alles schön warm um dann ne schnelle Runde zu fahren. Ich aktiviere den Logger also in der vorletzen Kurve vor Start/Ziel. Ich bau mir aktuell mit der MATLAB GUI ein Tool wo ich dann nur noch die Rohdaten einlesen kann und er mir alle Rundenzeiten + weitere Daten die aufzeichne ausgibt. Ich hab bisher nie Start/Ziel separat aufgezeichnet, sondern einfach "per Gefühl" während der Zieldurchfahrt die Messung beendet/gestartet. Dadurch hatte ich bei 4 aufgezeichneten Runden 4 verschiedene Dateien, wo kein Startpunkt/Endpunkt der selbe war. Somit ist das ja nicht wirklich verlässlich. Aber danke für deinen Input ich probier das nächstes Jahr aus.

Las mir mal 5 Minuten. Ich will Dir mal was zeigen.

Ok, ich habs.
Du brauchst für die FinishLine zwei Bezugspunkte.
Und zwar genau den Übergang zwischen den Koordinaten.
Um das zu verdeutlichen:
Ich habe in meinem Bild zwei Punkte markiert. Der erste ist 50Grad, 20 Minuten und 01 Sekunde (Startaufstellung), der andere dann 03 Sekunden ("hinter" FinishLine).
Das ist der jeweilige Übergang aus Sekunde 02.
Damit ist klar, das sich das Finish eigentlich fast in der Mitte - ein wenig nach links verschoben - in 50 20 02 befindet.
Es ist vollkommen egal, wo Du den Logger zum ersten Mal startest.
Nehmen wir an, Du stehst an Startposition 4 - Dann kennst Du den Weg
a: Übergang von Sekunde 01 zu Sekunde 02 und Du kennst
b: den Abstand zwischen Aufstellposition und Übergang sowie
c: Abstand zwischen Aufstellposition und Finishline

Damit ist das nichts grossartiges... Nicht mal bei 250Kmh :wink:

Du kennst mit deinem Ansatz einen Punkt im GPS Koordinatensystem. Woher weißt du aus welcher Richtung du auf diesen Punkt zufährst?

Oder an my_xy gerichtet. Woher weißt du ob du dich vor oder nach der Ziellinie befindest wenn du nur die Koordinaten der Ziellinie kennst?

Ich glaub, ich hab das oben beantwortet - ich hab nicht gesehen, das Du zwischendurch schon geschrieben hattest - sorry, sonst hätte ich es hier angepinnt.

Hallo,

damit legst du auch einen Bereich zwischen den zwei Punkten fest. Man müßte daraus erst einen Vektor berechnen der sich verkürzt. Nur fährt er auf der Zielgeradenkoordinate zu weit links oder zu weit rechts vorbei wird nichts erkannt. Außer man legt auch hier ein Toleranzfenster fest. Für mich ist das ehrlich gesagt zu kompliziert gedacht. Er muss nur durch einen Koordinatenkreis fahren, sprich durch ein Toleranzfenster, wobei die Mitte der Zielgerade die Mitte vom Koordinatenkreis ist. Damit wird getriggert Zielgebiet "Ziellinie" durchfahren, sprich Zeitpunkt speichern.

@ TO:
Mehr Genauigkeit bekommste durch filtern der Daten. Man sampelt diese und berechnet den Mittelwert immer wieder neu. "Gleitender Mittelwert". Ich weiß nicht ob ein Kalmanfilter hier Vorteile bringt. Wohl eher nur für Regelungssysteme.
Wegen den 5Hz. Es gibt noch welche die 10Hz liefern.

Die FinishLine ist schon als fester Wert abgelegt.
Ich weiss:
Übergang von Sekunde 01 zu Sekunde 02. Das ist ein Punkt, der keinerlei Bezug hat.
Den Bezug bekomme ich indem ich den Weg von StartPosition 4 zu diesem Punkt kenne.
Den Weg von Startposition 4 zur FinishLine kenne ich auch.

Nehmen wir an, das FinishLine zu Start4 15 Meter sind.
Von Start4 zum Umschaltpunkt Sekunde 01/02 sind es 1 Meter.
Dann liegt der Umschaltpunkt von 01 nach 02 bei 14 Meter vor der Finishline.

Alles andere ist interpolieren auf vorherige Werte.
Bei einer AbtastFrequenz von 5 Hz(!) wird nur geschätzt.
Der Punkt von Sekunde 01 zu 02 schwankt in einem Bereich von 14 Meter bei der Abtastrate. Das wird nie genauer.

Erst dann, wenn ich weiss, wann der Punkt 02/03 durchfahren wurde und davon ausgehe, das die Geschwindigkeit sich nicht verändert hat, kann ich annähernd bestimmen, welcher Weg tatsächlich innerhalb welcher Zeit zurückgelegt wurde.
Und nur dann, wenn ich diese Komponente habe, kann ich versuchen daraus die Überfahrt der FinishLine rechnerisch anzunähern.

Hallo,

wofür benötigst du 2 Umschaltpunkte? Was machst du damit?
Wenn das der Abstand werden soll für seine 14m zum messen bei Vmax, dann kann man auch gleich einen Radius festlegen und benötigt dafür nur den Mittelpunkt den man einmal erfasst wenn man in der Mitte der Linie auf der Zielgeraden steht. Die Umkreisberechnung macht dann der µC in aller Ruhe. Danach hat er auf allen Achsen ein GPS Fenster was er durchfahren muss. Der µC vergleicht nur noch die aktuelle Position ob diese im Fenster liegt. Wenn ja hat der die Zielgerade überquert und speichert die aktuelle Zeit für jede Runde aufs Neue. Man benötigt keine weiteren GPS Positionen. Ich bin jedenfalls von dem einfachen Ansatz immer noch überzeugt.

Wie in meiner schlampigen Handzeichnung oben zu erkennen ist, hast du schon ne Abweichung wenn der Kreis nen Durchmesser von 14 Meter hat - eben dadurch das es eigentlich keine klare Linie ist sondern eher ein "Zielbereich". Die Erkennung ob sich das Motorrad innerhalb dieses Bereiches befindet ist allerdings wie du sagst einfach umzusetzen. Ich werde demnächst mal exemplarisch mit dem Auto einen Rundkurs fahren(3-4) Runden und danach an einer beliebigen Stelle des Kurses quer über die Straße laufen ( mit dem Logger ) und somit quasi ne Ziellinie generieren. Die Ergebnisse (x,y) speicher ich ne Matrix in Matlab. Jetzt kommt der Punkt wo ich häng. Da das ja ein 2 Dimensionales Konstrukt ist kann ich nicht einfach sagen wenn akt_position>=x_start dann neue Runde... Die Position x kann ja auch woanders auf der Strecke( z.B. auf der gegenüberliegenden Seite) nochmals auftauchen. Deswegen brauch ich ja auch den y-Wert wie du schon geschrieben hast am Anfang. Hast du ne Idee wie ich das kombinieren kann?

Indem du wie du schon richtig erkannt hast 2 Achsen vergleichen musst. Mit einer Achse kann man kein Fenster malen. Eine Koordinate hat 2 Werte wenn man hier die Höhe weglässt. Es gibt einen Bereich x und einen Bereich y. Nur wenn x/y beide im Fenster liegen befindest du dich im Umkreis der zu vergleichenden Position.

Warum nicht?

if (ost>=65641 && ost <=65644) // Zielgerade 6°56'4x"
{
  if (lastNord<Nord)
  {
    .....
  }
}

Basiert auf das Bildchen oben und rein pseudo.
Damit ist aber das Problem der Bestimmung der Position der FinishLine auf der Zielgeraden nicht gelöst.

Ihr geht offensichtlich immer nur davon aus, das die Finishline mittig im 7Meter Radius der GPS-Position liegt.

Ich hatte vor einiger Zeit ein GPS in der Hand, welches in den Rohdaten die Position und die Geschwindigkeit ausgab.
Ich würde gerne sehen, was Du an Rohdaten bekommst - sonst könnte das nur noch stochern werden.

Notfalls schreib doch mal, was Du da benutzt. dann kann man nachsehen, was da ggfls. vorhanden ist.