GPS-Kilometerzähler

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • @tschoeatsch
      Auf der Webseite bei Wikipedia finde ich die Aufschlüsselung des NEMA Datensatzes.

      Da ist ein Beispiel-Datensatz aufgebröselt, der sieht so aus:

      $GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
      $GPRMC,HHMMSS,A,BBBB.BBBB,b,LLLLL.LLLL,l,GG.G,RR.R,DDMMYY,M.M,m,F*PP


      Achte mal auf die Stelle RR.R ich habs rot markiert.
      Dazu steht in der Tabelle mit den Erklärungen:
      Kurs über Grund in Grad bezogen auf geogr. Nord

      Dann hast du doch deinen Kurs. 00.0 wäre Kurs Nord, 90,0 wäre Kurs Ost usw.
      Übrigens dein Tipp mit dem schneller schreiben hat ungemein geholfen! a_38_b45e201d
    • Michael wrote:

      tschoeatsch wrote:

      hat man den Winkel des Zeigers bezüglich der Geradeausrichtung.
      Geht das dann auch in deinem platten Koordinatensystem?
      Wieso nicht?

      Sphärische und ebene TrigonometrieBearbeiten

      Bei „kleinen“ sphärischen Dreiecken ist die Krümmung weitgehend vernachlässigbar und die Sätze der sphärischen Trigonometrie gehen in die Sätze der ebenen Trigonometrie über:
      Der für rechtwinkelige Kugeldreiecke gültige Satz {\displaystyle \,\cos c=\cos a\cdot \cos b} entspricht dem Satz von Pythagoras (vgl. oben).
      Der Sinussatz der sphärischen Trigonometrie geht wegen {\displaystyle \,\sin a\approx a} in den Sinussatz der ebenen Trigonometrie über.
      Der Seiten-Kosinussatz der sphärischen Trigonometrie geht in den Kosinussatz der ebenen Trigonometrie über.
      Der Winkel-Kosinussatz der sphärischen Trigonometrie geht in den Satz von der Winkelsumme für ebene Dreiecke über.
      Zur Verebnung sphärischer Dreiecke siehe Satz von Legendre.
      Zitat aus de.m.wikipedia.org/wiki/Sph%C3%A4rische_Trigonometrie
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Mitch64 wrote:

      @tschoeatsch
      Auf der Webseite bei Wikipedia finde ich die Aufschlüsselung des NEMA Datensatzes.

      Da ist ein Beispiel-Datensatz aufgebröselt, der sieht so aus:

      $GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
      $GPRMC,HHMMSS,A,BBBB.BBBB,b,LLLLL.LLLL,l,GG.G,RR.R,DDMMYY,M.M,m,F*PP


      Achte mal auf die Stelle RR.R ich habs rot markiert.
      Dazu steht in der Tabelle mit den Erklärungen:
      Kurs über Grund in Grad bezogen auf geogr. Nord

      Dann hast du doch deinen Kurs. 00.0 wäre Kurs Nord, 90,0 wäre Kurs Ost usw.
      Übrigens dein Tipp mit dem schneller schreiben hat ungemein geholfen! a_38_b45e201d
      Der vom Modul ausgegebene Kurs ist natürlich auch so ein Zappelphillip wie die Geschwindigkeit, einfach weil das alles mit Positionen mit Sekundenabstand errechnet wird. Im Laufe der Experimente wird sich zeigen, wie man das nutzen kann.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch wrote:

      Der vom Modul ausgegebene Kurs ist natürlich auch so ein Zappelphillip wie die Geschwindigkeit, einfach weil das alles mit Positionen mit Sekundenabstand errechnet wird. Im Laufe der Experimente wird sich zeigen, wie man das nutzen kann.
      Richtig. Aber deine Berechnung über die Position wird auch nicht besser sein.
      Wenn die Rohdaten flattern, wird auch die Berechnung flattern.

      Irgendwie wirst du damit leben müssen.
      Oder du setzt auf einen gleitenden Mittelwert mit ordentlich Verzögerung. Aber dann ändert sich die Position und Kurs auch entsprechend verzögert.
    • tschoeatsch wrote:

      Der vom Modul ausgegebene Kurs ist natürlich auch so ein Zappelphillip wie die Geschwindigkeit, einfach weil das alles mit Positionen mit Sekundenabstand errechnet wird. Im Laufe der Experimente wird sich zeigen, wie man das nutzen kann.
      Jetzt wäre ein guter Zeitpunkt, sich mal den Kalman Filter anzuschauen.
      cbcity.de/das-kalman-filter-einfach-erklaert-teil-1
    • Michael wrote:

      Kalman Filter anzuschauen
      Prinzip (Eindimensional) grob verstanden. Aber wie berechnet man denn die Varianz?
      Und wenn da in den Messwerten, von denen man die Varianz ermitteln möchte,
      mehr als einen Maxwert da ist. Also z.B. 3 Maxwerte mit gleichem Wert?

      In Excel gibts eine Funktion um aus einer Stichprobe eine Streuung berechnen zu lassen.
      Wie mach man das in Bascom?
    • @Mitch64 ich will eigentlich nicht mitteln, ich hab' vor, eine Mindeststrecke an Bewegung abzuwarten. Ist die überschritten, wird dann mit der tatsächlichen gerechnet. Im Stand bleiben die ausgegebenen Positionen auf paar dezimeter konstant. Wenn ich jetzt abwarte, bis zB 2 m überschritten werden, ist alles noch genau genug und 2 m hat man schnell beieinander. Ich denke mal, relativ ist das Modul genau, absolut natürlich nicht sooo genau. Die Schwankungen im Stillstand sind vermutlich alles Rechenungenauigkeiten, von Modul und auch meinerseits.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Michael wrote:

      tschoeatsch wrote:

      Der vom Modul ausgegebene Kurs ist natürlich auch so ein Zappelphillip wie die Geschwindigkeit, einfach weil das alles mit Positionen mit Sekundenabstand errechnet wird. Im Laufe der Experimente wird sich zeigen, wie man das nutzen kann.
      Jetzt wäre ein guter Zeitpunkt, sich mal den Kalman Filter anzuschauen.cbcity.de/das-kalman-filter-einfach-erklaert-teil-1
      Erstmal bekomme ich den link nicht auf. Zweitens: wenn ich das lese "Im Gegensatz zu den klassischen FIR- und IIR-Filtern der Signal- und Zeitreihenanalyse basiert das Kalman-Filter auf einer Zustandsraummodellierung, bei der explizit zwischen der Dynamik des Systemzustands und dem Prozess seiner Messung unterschieden wird. In seinem Zeitverhalten ist er ein IIR-Filter mit einer Verzögerungsstufe."(irgendwo in wikipedia zu finden), dann weiß ich, den brauch ich nicht, den Filter, weil ich keine Doktorarbeit mit meinem 3,49€ Modul machen will. Da kauf ich lieber eine Tube Astronautennahrung und leg die bei, dann hat der Kapitän, wegen eventueller Ungenauigkeiten meines Systems, mehr Zeit zum Suchen des richtigen Wegs.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Nachdem mein Probeprogramm nicht so recht funktioniert hat, habe ich mal die Formel für die Entfernungsmessung mal mit Koordinaten aus dem Wikipedia-Eintrag überprüft.
      de.wikipedia.org/wiki/Orthodrome
      Berlin-Tokio.PNG
      Die Formel in ein Testprogramm getippt

      BASCOM Source Code

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 34
      4. $swstack=32
      5. $framesize=64
      6. $baud = 9600
      7. Declare Function Entfernung_rad(byval Laenge1_double As Double , Byval Breite1_double As Double , Byval Laenge2_double As Double , Byval Breite2_double As Double)as Double
      8. Declare Function Entfernung_m(byval Laenge1_double As Double , Byval Breite1_double As Double , Byval Laenge2_double As Double , Byval Breite2_double As Double)as Double
      9. Dim L1 As Double , L2 As Double , B1 As Double , B2 As Double , E As Double
      10. Dim O_w As String * 1
      11. B1 = 52.517 'Berlin
      12. L1 = 13.40
      13. B2 = 35.70 'Tokio
      14. L2 = 139.767
      15. E = Entfernung_rad(l1 , B1 , L2 , B2)
      16. E = E * 6370
      17. Print "Berlin-Tokio in km"
      18. Print E
      19. Print "Soll=8918km"
      20. B1 = 47.137967
      21. L1 = 10.249798
      22. B2 = 47.137729
      23. L2 = 10.250305
      24. E = Entfernung_rad(l1 , B1 , L2 , B2)
      25. E = E * 6370000
      26. Print "Beispiel in m"
      27. Print E
      28. Print "Soll=46.68m"
      29. B1 = 47.137967
      30. L1 = 10.249798
      31. B2 = 47.137729
      32. L2 = 10.250305
      33. E = Entfernung_m(l1 , B1 , L2 , B2)
      34. Print "Beispiel andere Formel in m"
      35. Print E
      36. Print "Soll=46.68m"
      37. Do
      38. Loop
      39. End
      40. Function Entfernung_rad(byval Laenge1_double As Double , Byval Breite1_double As Double , Byval Laenge2_double As Double , Byval Breite2_double As Double)as Double
      41. 'https://de.wikipedia.org/wiki/Orthodrome
      42. 'acos(sin(Breite1) * sin(Breite2) + cos(Breite1) * cos(Breite2) * cos(Länge2-Länge1))
      43. Local Laenge1_rad As Double , Breite1_rad As Double , Laenge2_rad As Double , Breite2_rad As Double
      44. Local Sin_b1 As Double , Sin_b2 As Double , Cos_b1 As Double , Cos_b2 As Double , L2_l1 As Double , Cos_l2_l1 As Double
      45. Local Helfer1 As Double , Helfer2 As Double
      46. Laenge1_rad = Deg2rad(laenge1_double)
      47. Laenge2_rad = Deg2rad(laenge2_double)
      48. Breite1_rad = Deg2rad(breite1_double)
      49. Breite2_rad = Deg2rad(breite2_double)
      50. Sin_b1 = Sin(breite1_rad)
      51. Sin_b2 = Sin(breite2_rad)
      52. Cos_b1 = Cos(breite1_rad)
      53. Cos_b2 = Cos(breite2_rad)
      54. L2_l1 = Laenge2_rad - Laenge1_rad
      55. Cos_l2_l1 = Cos(l2_l1)
      56. Helfer1 = Sin_b1 * Sin_b2
      57. Helfer2 = Cos_b1 * Cos_b2
      58. Helfer2 = Helfer2 * Cos_l2_l1
      59. Helfer2 = Helfer2 + Helfer1
      60. Entfernung_rad = Acos(helfer2)
      61. End Function
      62. Function Entfernung_m(byval Laenge1_double As Double , Byval Breite1_double As Double , Byval Laenge2_double As Double , Byval Breite2_double As Double)as Double
      63. 'https://matheplanet.com/default3.html?call=viewtopic.php?topic=163679
      64. Local Laenge1_rad As Double , Laenge2_rad As Double
      65. Local Laenge1 As Double , Laenge2 As Double , Breite1 As Double , Breite2 As Double , Cos_l1 As Double , Cos_l2 As Double
      66. Local Helfer1 As Double , Helfer2 As Double
      67. Laenge1_rad = Deg2rad(laenge1_double)
      68. Laenge2_rad = Deg2rad(laenge2_double)
      69. Laenge1 = Laenge1_double * 1000000
      70. Laenge2 = Laenge2_double * 1000000
      71. Breite1 = Breite1_double * 1000000
      72. Breite2 = Breite2_double * 1000000
      73. Cos_l1 = Cos(laenge1_rad)
      74. Cos_l2 = Cos(laenge2_rad)
      75. Helfer1 = Laenge1 - Laenge2
      76. Helfer1 = Helfer1 * Helfer1
      77. Helfer1 = Helfer1 * Cos_l1
      78. Helfer1 = Helfer1 * Cos_l2
      79. Helfer2 = Breite1 - Breite2
      80. Helfer2 = Helfer2 * Helfer2
      81. Helfer2 = Helfer2 + Helfer1
      82. Helfer2 = Sqr(helfer2)
      83. Entfernung_m = Helfer2 / 9
      84. End Function
      Display All
      liefert folgenden output


      Berlin-Tokio in km
      8.92968182363383E3
      Soll=8918km
      Beispiel in m
      46.5866754640741
      Soll=46.68m
      Beispiel andere Formel in m
      61.4187955173967
      Soll=46.68m

      Die alternativen Koordinaten stammen von einem Forumsbeitrag hier
      matheplanet.com/default3.html?…iewtopic.php?topic=163679
      dort wird auch mit der Formel aus wikipedia gerechnet und zusätzlich eine vereinfachte Formel angegeben. Die allerdings rechnet in bascom doch recht ungenau, statt 46,68m kommt bei mir 61,42m raus, im Beitrag
      46,56m. bascom scheint da doch irgendwo größere Ungenauigkeiten zu haben (oder ich hab' einen Fehler in der Formel), sodass ich mit der wikipediaschen Formel weiter mache, die in bascom so leidlich genau zu rechnen scheint.
      Inzwischen hab' ich auch erkennen müssen, was ich mühsam bauen will, gibt es schon fertig
      amazon.de/VDO-Fahrradcomputer-…fRID=410FQ1V342WM5GZ84FJN
      was mich aber noch nicht zur Aufgabe meine Projekts veranlasst. Ich hab' jetzt auch schon einen passenden Namen gefunden 'Bermuda'.
      Mein Problem, was ich noch habe, ist eine Drift. Wenn ich im Stillstand mir eine Koordinate merke und die Entfernung zu den sekündlich eintrudelnden Koordinaten der gleichen Position (Stillstand) berechne, dann steigt die Entfernung und kann schon mal 15m oder mehr erreichen. Das hat mich erst irritiert, aber ob das so schlimm ist, ich glaube es grad' nicht mehr, ich muss halt drauf eingehen, damit im Stillstand nicht der km-Zähler weiter läuft.
      Ich gehe jetzt mal mit meinem Versuchsaufbau spazieren...
      Files
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Wieder zurück
      gps-Vergleich.jpg
      5,65km mit meinem Versuchsaufbau zu 5,72km zur 'Referenz Garmin geko201'. Wobei man noch etwas beschönigen kann: das geko registriert jeden Schritt, mein Programm wartet bis 20m zusammen gekommen sind. Bei meiner Wanderung war mein Hund dabei, der am Wegesrand Mäuse fangen wollte, da musste ich ein paarmal hin und her gehen, was vielleicht auch so 20m mehr auf dem geko brachte.
      Die klein geschriebenen 7,29 ist der aktuelle Drift. Die Geschwindigkeit, die ich ausrechne, passte auch zur geko-Anzeige. Aktuell die 1,06km/h natürlich nicht, die werden bei Stillstand erst nach einer gewissen Zeit gelöscht.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------