LabVIEWForum.de - Unsynchrone Messwerte zu Video

LabVIEWForum.de

Normale Version: Unsynchrone Messwerte zu Video
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo ihr Lieben,

bin total am Verzweifeln.

Ich nehme mit einem Wii-Controller Beschleunigungen, mit einer GPS-Maus Geschwindigkeiten und mit zwei Kameras Videos auf und das ganze in drei verschiedenen Programmen. Die Messwerte schreibe ich in TDMS.
Mit Hilfe einer globalen Variable starte ich die Video- und Messwertaufnahme. Mit einem Video nehme ich während der kompletten Testfahrt meine Systemzeit zur Kontrolle auf. Die andere Kamera nimmt alles vor meiner Nase auf.
Mit diesen Daten gehe ich dann in Diadem und synchronisiere sie über meine Systemzeit. Die Synchronisation funktioniert sehr gut. Meine aufgenommene Systemzeit vom Video weicht nur um paar 100stel von den Zeitwerten meiner Messwerte ab und das während des ganzen Versuchs. In Diadem kann man sich zu jedem Wert auch die Koordinaten anzeigen. Das funktioniert echt super.
Jedoch passen die Geschwindigkeits- und Beschleunigungswerte nicht zu den Videobildern. Untereinander sind sie plausibel. Während ich stehe, ist meine Fahrzeugbeschleunigung 0, wenn die Geschwindigkeit steigt, ändert sich auch meine Beschleunigung usw...
Jedoch passen die Messwerte nicht mit dem Videobild überein. Obwohl ich laut Video noch stehe, fahre ich laut der Messwerte aber schon. Diese Verschiebung steigt mit Dauer des Versuchs.
Hab mal einen kleinen Screenshot angehängt. Die Ampel ist gerade auf grün gesprungen. Jedoch fahre ich laut Messwerten schon mehr als 10 Sekunden. Oben sieht man die Beschleunigung, unten die Geschwindigkeit. (Wundert euch über die super Qualität der Videos nicht. Das wurde mit Web-Cams aufgenommen)


An der zweiten Kamera kann es nicht liegen. Habe aus Verzweiflung mit beiden Kameras meine Systemzeit aufgenommen und da gibts keine Abweichungen zu den Messwertzeiten.

Wenn ich mehr Zeitwerte als Messwerte in der selben Zeitspanne aufnehmen würde, dann X-Achse in Diadem ohne Messwerte weiter laufen, das tut sie nicht.
Weniger Zeitwerte als Messwerte in der selben Zeitspanne würde genau zu dem Effekt führen, der bei mir aufgetreten ist.
Wie kann ich das in LabVIEW verhindern? Ich stehe total auf dem Schlauch.


Ich werde gleich noch meine Programme anhängen, dazu muss ich aber mein Betriebssystem wechseln.

edit: hab mal die Programme zur Aufnahme der Messwerte und hoffentlich alle dazugehörigen SubVIs drangehängt. Die wurden mit LabVIEW 8.6 bearbeitet.
Auf dem wege wäre es auch sehr nett, wenn mir jemand erklären könnte, wie ich die auf 8.5 runterspeichern kann.


ICH DANKE AUCH SCHONMAL FÜR EURE HILFE
Das kann ich Dir sagen: Im Menüpunkt "File" und da "Save for previous version".
Zum eigentlichen Problem kann ich Dir auf die Schnelle leider auch nicht helfen.

Gruß Markus

' schrieb:Auf dem wege wäre es auch sehr nett, wenn mir jemand erklären könnte, wie ich die auf 8.5 runterspeichern kann.
' schrieb:Das kann ich Dir sagen: Im Menüpunkt "File" und da "Save for previous version".
Zum eigentlichen Problem kann ich Dir auf die Schnelle leider auch nicht helfen.

Gruß Markus

DANKE

Aber um nochmal zu meinem Hauptproblem zurück zu kommen...

Habe gerade mal - wieso bin ich nicht früher auf die Idee gekommen - in die TDMS-Dateien rein geschaut. Es trifft leider nicht zu, dass ich mehr Messwerte als Zeitwerte habe, die Anzahlen stimmen genau überein.
Ich bin wirklich am Verzweifeln.

Ich verstehe das nicht. Habe auch mal während der Fahrversuche den Wii-Controller genommen und geschüttelt wie ein Verrückter. Die Ausschläge wurden mir in meinem Frontpannel direkt angezeigt, später beim Auswerten in Diadem war aber wieder die Zeitversetzung zu sehen war...

Ich wäre über Hilfe sehr dankbar.
Ich muss auch sagenBahn

Zusammenhangslose VIs, die du da hochgeladen hast, ich blicke da nicht recht durch.

Was soll das mit der globalen Variablen, die das Programm auf Knopfdruck startet? Was ist denn das für eine Schnapsidee?

Und wenn ich verstehen würde, was du da in deinem Diadem-Screenshot anzeigst?

Gruß, Jens
' schrieb:Ich muss auch sagenBahn

Was soll das mit der globalen Variablen, die das Programm auf Knopfdruck startet? Was ist denn das für eine Schnapsidee?

Gruß, Jens

Ich soll ein Messkonzept entwickeln, mit dem man Geschwindigkeit, Beschleunigung und Videos aufnehmen kann. Da habe ich für jeden Teilbereich ein Programm geschrieben, die genau wie du schion gemerkt hast, mit der globalen Variable gestartet werden.
Es soll auch Anwendungen geben, bei der nur Bilder und die Geschwindigkeit benötigt werden oder nur Beschleunigung und Geschwindigkeit oder nur eine Kamera und nicht zwei. Dacht über diese Schnapsidee könnte man sich jede Menge Copy-Paste-Arbeit sparen.

' schrieb:Und wenn ich verstehen würde, was du da in deinem Diadem-Screenshot anzeigst?

Gruß, Jens

Im oberen Teil links siehst man die aufgezeichnete Systemzeit von meinem Bildschirm, im rechten Teil Video aus der Windschutzscheibe. Darunter dann die Beschleunigungswerte und die Geschwindigkeit, beide über die Systemzeit.
Wenn man nun in den Graphen einen Zeitpunkt auswählt, in dem Fall 13:36:11,paar zerquetschte, dann zeigt DIAdem die passenden Sequenz in den Videos dazu an. Die Koordinaten werden mit den Kreuzen dargestellt, zusätlich sieht man ganz links oben die Beschleunigungskoordinaten des Punktes bei 13:36:11,paar zerquetschte.
Im rechten obenren Teil sieht man das Video, das die Fahrersicht darsellen soll. Man sieht, dass die Ampel Grün ist.
De facto stehe ich aber noch, einen Frame davor war die Ampel nämlich gelb und ich bin noch nicht losgefahren.
Laut Beschleunigungs- und Geschwindigkeitswerten, die man unter den Videos sieht, bin ich aber schon seit einer ganzen Weile losgefahren.

' schrieb:Zusammenhangslose VIs, die du da hochgeladen hast, ich blicke da nicht recht durch.

Gruß, Jens

Ich nehme mit einem Wii-Controller Beschleunigungen, mit einer GPS-Maus Geschwindigkeiten und mit zwei Kameras Videos auf.
Das Programm um Videos aufzuzeichnen habe ich nicht gepostet. Deswegen enhält der Ordner ein Programm das heißt Wii, das die Beschleunigungsaufnahme durch die Wii erledigen soll, ein Programm, das heißt GPS, das die Geschwindigkeit über die GPS-Maus aufnimmt und noch paar Sub-Vis, die namentlich gekennzeichnet sind, eine dll, die man für die wii braucht und die globale Variable.

Ich hoffe, das war jetzt verständlicher...
Jetzt wird es ein wenig klarer.

Auf den ersten Blick fällt mir nicht "Falsches" auf. Wobei der Webcam-Code zur vollständigen Analyse fehlt.

Läuft alles auf einem Computer?

Eine Idee zur systematischen Fehlersuche, lass dir doch mal die Geschwindigkeit online (also im GPS.vi) in einem Chart (keine große Historie, vielleicht 200 Werte) ausgeben und zeichne auch das auch mit der Webcam auf (bzw. beobachte es).

[attachment=17198]

Gruß, Jens
' schrieb:Läuft alles auf einem Computer?


Gruß, Jens

Ja, es läuft alles auf einem Computer. Die Kameras sind über USB angeschlossen, die GPS-Maus und die Wii über Bluetooth.
Ich habe auch schon ausprobiert nur eine Kamera zu nehmen und die Wii über BT und die GPS-Maus über USB anzuschließen, da kam aber das selbe bei raus.

Ich werde auch gleich nochmal den Kamea-Code posten, muss dazu wieder das Betriebssystem wechselnSmile. Ist auch wieder mit LABView 8.6 bearbeitet worden.

Mir ist gestern noch was aufgefallen. Es fehlen keine Daten von der Wii und der GPS-Maus , sie werden anscheinend nur in einer kürzeren Zeit aufgenommen. Oder DIadem kommt mit irgendwas nicht zurecht.

By the Way: DIAdem benutzt einen Befehl, der heißt TTR um die verstrichene Zeit in ms seit dem 1.1.1904 in eine Uhrzeit und ein Datum umzurechnen. Gibt es sowas villeicht auch als VI?
Würde gerne mal die Zeiten aus der TDMS mit denen aus DIAdem vergleichen...

edit: zu dem Kamera-Programm:
Alle gesuchten VIs befinden sich in der LLB, hoffentlichWink
Woran der Fehler liegt kann ich dir leider nicht sagen, aber es hört sich so an, als ob ein Puffer nicht schnell genug ausgelesen wird. Als Zeit nimmst du ja nicht die Zeit, bei der ein Messwert erzeugt wird oder am PC eintrifft, sondern du speicherst den Zeitpunkt der Speicherung selbst. Was du auf jeden Fall machen solltest ist umwandeln der Skalare in Arrays entfernen. Was hat des denn für einen Sinn? Nimm deine Messwerte und schreibe alle zusammen in ein 2D Array (Schieberegister) und speicher dieses erst ab, wenn mehr als 1000 Messwerte pro Kanal im Array sind. Das hat den Vorteil, dass die Funktion tdms-Schreiben schneller ist und das *.tdms_index wesentlich kleiner ausfällt. Evtl kannst du dir dann das defragmentieren sparen. Anbei noch das gewünschte VI.

Lv86_img[attachment=17225]
' schrieb:Woran der Fehler liegt kann ich dir leider nicht sagen, aber es hört sich so an, als ob ein Puffer nicht schnell genug ausgelesen wird. Als Zeit nimmst du ja nicht die Zeit, bei der ein Messwert erzeugt wird oder am PC eintrifft, sondern du speicherst den Zeitpunkt der Speicherung selbst. Was du auf jeden Fall machen solltest ist umwandeln der Skalare in Arrays entfernen. Was hat des denn für einen Sinn? Nimm deine Messwerte und schreibe alle zusammen in ein 2D Array (Schieberegister) und speicher dieses erst ab, wenn mehr als 1000 Messwerte pro Kanal im Array sind. Das hat den Vorteil, dass die Funktion tdms-Schreiben schneller ist und das *.tdms_index wesentlich kleiner ausfällt. Evtl kannst du dir dann das defragmentieren sparen. Anbei noch das gewünschte VI.


Vielen Dank für deine Hilfe. Ich bin relativ neu im Arbeiten mit LabVIEW. Habe auch schon von diesem Schiebereister gehört nur leider noch nie wirklich in der Richtung was damit gemacht. In Verbindung mit einer For-Schleife werden N Werte (Anzahl der Werte abhängig von der Anzahl der Schieberegister) metaphorisch auf N Blätter geschrieben, bevor sie weiter gegeben werden. Bei einer Whileschleife werden die Werte so lange gespeichert, bis die Schleife beendet wird. Ist das so korrekt?

Ich will, auch während der Speicherung, online die Messwerte sehen und auch jeder Zeit die Messwertaufnahme beenden können.
Meine Fragen sind nun, bevor ich anfange mein ganzes Programm umzustellen.

Müsste ich alles, was sich jetzt in der While-schleife befindet, beispielsweise bei dem Wii-Messprogramm, in eine Forschleife packen und mit Hilfe einer Case-Struktur zwischen dem Speichern und dem Nichtspeichern wechseln (So wie es auch bei der Kamera gemacht wurde)? Nur die Stränge zwischen die TDMS: Schreiben und meinen Skalaren durch ein Schieberegister laufen lassen wäre ja sinnlos.

Wie beende ich eine For-Schleife bevor sie die 1000 Messwerte erreicht hat. Die restlichen werte sollen j auach noch meine TDMS: Schreiben erreichen und danach such noch gewährleistet bleiben, dass die TDMS auch gescheit geschlossen wird.


Wie du bestimmt merkst, habe ich ein paar Probleme mit dem Aufbau des Programmes wegen der Zwischenspeicherung durch Schieberegister.

Ich bin euch echt sehr dankbar für eure Hilfe. Ich arbeite schon fast 3 Monate ganz alleine an diesem Projekt. Mein Vorgehen bis jetzt habe ich den Affen abgeschaut. Aber mir fehlt nach so einer langen Zeit einfach die Motivation die Programme durch Versuch und Irrtum zusammenzupfuschen.
ALSO NOCHMALS DANKE
Bevor ich mich jetzt aufmach in die Kneipen meines Vertrauens hier noch ein Example von NI, dass ich für dich etwas erweitert habe. In die obere Schleife musst du noch deinen Kram reinpacken. In dem schieberegister packst du in jedem Durchlauf einen Wert für jeden Kanal hinein. Sobald 1000 Werte pro Kanal drin sind schickt er alles an die zweite Schleife, in der es dann gemütlich auf HD geschrieben wird.

Lv86_img [attachment=17227]
Seiten: 1 2
Referenz-URLs