[Lua] Mehr GPS-Informationen mit NMEA:GPS

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Mehr GPS-Informationen mit NMEA:GPS

Beitragvon rudi » 16.09.2012, 10:55

Bei der SX260 werden die GPS-Werte von einem GPS-Empfänger über die serielle Schnittstelle UART1 bereitgestellt. Diese werden sekündlich im NMEA-Protokoll übertragen und in einem 64 kByte großen Ringpuffer abgelegt. Der neueste Datensatz wird zusäzlich in einem weiteren Speicherbereich abgelegt. Diesen nutzt auch die Funktion updateGPS(), um den GPS-Property zu aktualisieren.

RAM-Adressen SX260_100B:
  • Zeiger auf die Startadresse des 0x10000 Byte großen Ringpuffers
    pRingBuffer = 0x1783C
  • Adresse des Offset-Wertes für den nächsten Datensatz im Ringpuffer
    oRingBuffer = 0x17838
  • Zeiger auf die Startadresse des neuesten Datensatzes für updateGPS() und nmea.lua
    pNmeaBuffer = 0x65AC+0x8
Mit dem Skript nmea.lua werden die NMEA-Daten abgefragt und angezeigt. Allgemeine Funktionen zum lesen der Pufferdaten und konvertieren der Daten in eine EXIF-GPS angelehnte Struktur, einschließlich dem Test auf eine verwendbare Kamera/Firmware und dem Start/Stop des GPS-Empfängers, sind in der nmeaLib.lua zusammengefasst. Bei Bedarf wird der GPS-Empfänger gestartet und am Ende der Zustand vor dem Start wieder hergestellt. Das Skript kann auch im Wiedergabemode benutzt werden.

Das Beispiel benutzt GPS-Daten von einem Aufenthalt in Hamburg.
In der linken Hälfte werden Breite, Länge, Höhe, Bewegungsgeschwindigkeit, Bewegungsrichtung, Datum, Uhrzeit [GMT] angezeigt. Rechts sind die empfangenen Satelliten und deren Empfangsstärke zu sehen.
Hamburg_nmea.lua.png
Hamburg_nmea.lua.png (5.75 KiB) 15141-mal betrachtet

NMEA:GPS-Daten aus dem LOG
Code: Alles auswählen
* Mode: PLAY, Date: 02.09.2012 11:43:03
GGA,094315.000,5333.7527,N,00958.7328,E,1,8,1.12,8.2,M,46.0,M,,
GSA,A,3,12,29,09,27,25,31,14,02,,,,,1.41,1.12,0.85
GSV,3,1,12,12,72,075,34,25,63,273,31,14,39,260,28,29,33,204,17
GSV,3,2,12,02,31,103,24,09,25,144,32,04,25,056,16,31,19,308,21
GSV,3,3,12,27,18,143,30,44,11,118,,32,05,329,,20,03,356,
RMC,094315.000,A,5333.7527,N,00958.7328,E,0.16,214.32,020912,,,A
VTG,214.32,T,,M,0.16,N,0.29,K,A

zugehöhrige GpsTable in EXIF-GPS ähnlicher Struktur
Code: Alles auswählen
Altitude = {
  1 = 82 [number]
  2 = 10 [number]
}
AltitudeRef = 0 [number]
DateStamp = 2012:09:02 [string]
FixQuality = 1 [string]
Latitude = {
  1 = 53 [number]
  2 = 1 [number]
  3 = 33 [number]
  4 = 1 [number]
  5 = 45162 [number]
  6 = 1000 [number]
}
LatitudeRef = N [string]
Longitude = {
  1 = 9 [number]
  2 = 1 [number]
  3 = 58 [number]
  4 = 1 [number]
  5 = 43968 [number]
  6 = 1000 [number]
}
LongitudeRef = E [string]
MapDatum = WGS-84 [string]
MeasureMode = 3 [string]
ProcessingMethod = GPS [string]
SatInfo = {
  1 = {
    1 = 12 [number]
    2 = 72 [number]
    3 = 75 [number]
    4 = 34 [number]
  }
  2 = {
    1 = 25 [number]
    2 = 63 [number]
    3 = 273 [number]
    4 = 31 [number]
  }
  3 = {
    1 = 14 [number]
    2 = 39 [number]
    3 = 260 [number]
    4 = 28 [number]
  }
  4 = {
    1 = 29 [number]
    2 = 33 [number]
    3 = 204 [number]
    4 = 17 [number]
  }
  5 = {
    1 = 2 [number]
    2 = 31 [number]
    3 = 103 [number]
    4 = 24 [number]
  }
  6 = {
    1 = 9 [number]
    2 = 25 [number]
    3 = 144 [number]
    4 = 32 [number]
  }
  7 = {
    1 = 31 [number]
    2 = 19 [number]
    3 = 308 [number]
    4 = 21 [number]
  }
  8 = {
    1 = 27 [number]
    2 = 18 [number]
    3 = 143 [number]
    4 = 30 [number]
  }
}
SatToTrack = 8 [number]
SatTrackList = {
  1 = 12 [number]
  2 = 29 [number]
  3 = 9 [number]
  4 = 27 [number]
  5 = 25 [number]
  6 = 31 [number]
  7 = 14 [number]
  8 = 2 [number]
}
Speed = {
  1 = 29 [number]
  2 = 100 [number]
}
SpeedRef = K [string]
Status = A [string]
TimeStamp = {
  1 = 9 [number]
  2 = 1 [number]
  3 = 43 [number]
  4 = 1 [number]
  5 = 15000 [number]
  6 = 1000 [number]
}
Track = {
  1 = 21432 [number]
  2 = 100 [number]
}
TrackRef = T [string]
VersionID = {
  1 = 2 [number]
  2 = 3 [number]
  3 = 0 [number]
  4 = 0 [number]
}


Gruß rudi
Dateianhänge
nmea.zip
nmea.lua V0.4; nmeaLib.lua V0.5
(6.41 KiB) 905-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon genie01 » 18.09.2012, 11:14

Servus rudi,

tolle Sache; gefällt mir gut. =D>

Eine Frage habe ich dazu. Wie hast Du den Zeiger auf die Startadresse des neuesten Datensatzes für updateGPS() und nmea.lua
pNmeaBuffer = 0x65AC+0x8 gefunden.

Würde das gerne auf die SX230HS übertragen.

Liebe Grüße
genie01
genie01
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 60
Registriert: 04.08.2011, 11:52
Kamera(s): Keine Canon mehr!

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon rudi » 18.09.2012, 12:06

Hallo genie01,

ich habe in der Firmware der SX230 schon mal danach gesucht. Dabei ist mir aufgefallen, dass die SX230 anscheinend nicht mit NMEA-Daten bei updateGPS() arbeitet. Es sollte aber der Ringpuffer zu finden sein. Dafür erstelle eine RAM-Dump im Aufnahme-Modus mit aktiven und "fixem" GPS.
Eine Textsuche im Dump (z.B. mit HxD) nach "$GP" ("Dollar, G, P") sollte Ergebnisse bringen. Bei der SX260 gibt es zwei Blöcke mit NMEA-Daten. Der Erste ist der Ringpuffer und der zweite Block enthält den aktuellen Datensatz für updateGPS().

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon genie01 » 18.09.2012, 12:43

Servus rudi,

danke für die schnelle Antwort.

Eine Textsuche im Dump (z.B. mit HxD) nach "$GP" ("Dollar, G, P") sollte Ergebnisse bringen.

Hatte leider keinen Erfolg.

Im RAM-Dump mit aktiven GPS und 3D-Fix: Kein $GP gefunden, jedoch an 8 Stellen die Zeichenfolge "WGS-84".
Im RAM-Dump ohne aktiven GPS: Jedoch nur an 5 Stellen die Zeichenfolge "WGS-84".

Ich glaube jedoch, dass diese Werte nicht automatisch aktualisiert werden.

Liebe Grüße
genie01
genie01
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 60
Registriert: 04.08.2011, 11:52
Kamera(s): Keine Canon mehr!

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon Sinter » 19.09.2012, 16:01

Hallo Rudi,

die Sache scheint etwas tricky zu sein. Ist denn vielleicht schon absehbar, ob das Skript zukünftig auch auf allen anderen GPS-Cams (bspw. S100) lauffähig werden kann, oder gibt es in Einzelfällen bereits erkennbare Hürden?

Viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon rudi » 20.09.2012, 12:10

Hallo,

ich habe mich nochmal eingehend mit der SX230 und S100 beschäftigt. Bei beiden Kameras wird nicht die NMEA-Funktionalität des GPS-Chips benutzt. Statt dessen wird das SiRF-Binär-Protokoll benutzt. Eine Dokumentation ist hier zu finden.
Grundsätzlich bedeutet das, dass die NMEAlib.lua dafür nicht direkt einsetzbar ist. Da das Protokoll aber ebenfalls GPS-Informationen liefert, bekommen wir sie auch passend gewandelt. Welche GPS-Daten zur Verfügung stehen zeigt uns eine Datensatzsuche im RAM-Dump.

Um einen Datensatz finden zu können, hier der grundsätzliche Aufbau eines SiRF-Binary Datensatzes:
Code: Alles auswählen
1. Startskennung, 2 Bytes: 0xA0, 0xA2
2. Anzahl der Daten-Bytes, 2 Bytes
3. Daten-Bytes; 1.Byte ist die Mitteilungskennung (MessageID), Rest sind die Daten
4. Prüfsumme, 2 Bytes
5. Endekennung, 2 Bytes: 0xB0, 0xB3

Jede Mitteilungskennung besitzt eine feste Anzahl von Bytes für die Daten, siehe SiRF-Dokumentation.

Um den Aufwand beim Suchen im RAM-Dump erst einmal gering zu halten, habe ich den wichtigen Datensatz "Geodetic Navigation Data" herausgesucht. Da er der einzige mit geografischen Koordinaten ist, muss dieser auch da sein.

Aufbau der Message ID 41 (41d = 0x29):
Code: Alles auswählen
1. 0xA0 0xA2
2. 0x00 0x5B
3. 0x29 .....
4. 0x?? 0x??
5. 0xB0 0xB3

Gesucht wird daher nach den Hex-Werten "A0A2005B29" im Dump. Zur Kontrolle addiert man auf die gefundene Adresse (von 0xA0) die Länge der Daten (hier 0x005B) und weitere 6 Bytes, insgesamt 0x61, und hat die Adresse, an der lt. Protokoll 0xB0 0xB3 stehen muss.

Nun hat man schon mal einen Anhaltspunkt wo die GPS-Datensätze liegen und sollte noch weitere auch mit anderen Mitteilungskennungen finden. Üblicherweise übermitteln GPS-Empfänger bestimmte Datensätze immer wieder. Durch die Wiederholungen ist es möglich alle benutzten Mitteilungskennungen zu erkennen. Damit wissen wir welche Informationen zur Verfügung stehen.

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon genie01 » 20.09.2012, 14:32

Servus rudi,

danke für deine Mühen mit mir.

Hab mal nach der Zeichenfolge "A0A2005B29 ... B0B3" im Dump ohneaktivem GPS gesucht. Gefunden: 0 Stellen!!!!
Hab mal nach der Zeichenfolge "A0A2005B29 ... B0B3" im Dump mit aktivem GPS gesucht. Gefunden: 39 Stellen!!!!

Muß mir jetzt mal alle gefundenen Werte näher ansehen. Wird wohl eine Weile dauern, bis ich alle Stellen durchgesehen habe.

Liebe Grüße und Dank
genie01
genie01
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 60
Registriert: 04.08.2011, 11:52
Kamera(s): Keine Canon mehr!

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon Sinter » 21.09.2012, 13:32

Hallo Rudi,

vielen Dank für die Info.

Merkwürdig, wie Canon hier offenbar keine einheitliche Linie verfolgt. Man könnte fast meinen, bei Canon arbeiten zwei konkurrierende Teams an den Kameras.

Viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon msl » 21.09.2012, 16:38

Hallo Sinter,

wie es aussieht, kann sich Canon nicht so richtig entscheiden. Bisher gibt es 4 GPS-Kameras, SX230 & S100 Erscheinungsjahr 2011, D20 & SX260 Erscheinungsjahr 2012. Ich möchte fast wetten, dass bei der D20 die NMEA-Daten genauso wie bei der SX260 auslesbar sind.

Möglicherweise sind das aber schon die einzigen GPS-Kameras von Canon. Bei dem Nachfolgemodell der S100, der S110, verzichtet man auf GPS und legt den Schwerpunkt auf WiFi. GPS wird nur noch optional via WLAN angeboten.

Generell kann man feststellen, das auch bei anderen Herstellern der Trend zum integrierten GPS-Empfänger nicht unbedingt ausgeprägt ist. Der prozentuale Anteil GPS-unterstützter Kameras ist überall im Vergleich zur Gesamtpalette relativ gering.

Da es nur wenige GPS-Kameras gibt und der Programmieraufwand für zusätzliche GPS-Funktionen sehr hoch ist, plädiere ich dafür, möglichst viele der bestehenden (trigonometrischen) Funktionen auch für Nicht-GPS-Kameras einzusetzen. Durch manuelle Ortsangabe könnte man z.B. Sonnenauf- und Untergangszeiten bestimmen. Das sind für den Fotografen wichtige Informationen - Stichwort blaue Stunde. Mit solchen Daten könnte man den CHDK-Kalender entscheidend aufwerten.

Nebenbei bemerkt hat rudi hier wieder mal gezeigt, was man mit Lua und den damit verbundenen Zeichenfunktionen alles so anstellen kann. Die grafische Umsetzung ist beeindruckend.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon Sinter » 21.09.2012, 17:00

Hallo Msl,

eine schöne Idee mit der blauen Stunde. Vielleicht 20 verteilte Städte in Deutschland (gleiches gilt für andere Länder) speichern und deren Namen und Ortsdaten in CHDK hinterlegen. Dann kann man sich aussuchen, welcher Stadt man aktuell am nächsten ist und kann relativ präzise angezeigt bekommen, wann Sonne und Mond ortsabhängig auf- und untergehen, bzw. vielleicht auch in welchem Winkel sich die Sonne bereits unter dem Horizont befindet. Taucht die Sonne steil ab, so ist die blaue Stunde kürzer. Taucht sie flacher ab, länger.

Viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Re: Mehr GPS-Informationen mit NMEA:GPS

Beitragvon mittelhessen » 11.02.2015, 11:07

Ich habe mir soeben etwas voreilig das LUA-Script heruntergeladen, dann aber erst gelesen, dass es in dieser Forum für meine S100 gar nicht anwendbar ist. Hat sich denn bezüglich der S100 inzwischen was getan, so dass es auch dafür (SiRF-Binär-Protokoll) ein funktionsfähiges Script gibt? Das wäre echt super!
mittelhessen
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 20
Bilder: 0
Registriert: 07.02.2015, 10:38
Kamera(s): Canon PowerShot S100 (1.02A)


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron