Hallo zusammen,
ich habe die Aufgabe bekommen die Daten eines IMU (LORD 3DM-GX4-45
https://www.microstrain.com/inertial/3dm-gx4-45) auszulesen und somit
die Aktuelle Position zu bestimmen sowie bei Bewegung eine Art
Bewegungsmuster zu erstellen. Hierzu benötige ich ja Quasi die eigene
Position in einem Koordinatensystem, verbessert mich gerne wenn ich
falsch liege.
Bisher habe ich mit IMU's keinerlei Erfahrung und weiß nicht so recht wo
ich ansetzen soll um die Aufgabe zu lösen. Mir wurde zur Aufgabe anfangs
gesagt das ich die Positionsdten durch den eingebauten Kalman Filter
erhalte, was wie ich glaube nicht so ist da dieser,wie ich verstanden
habe, lediglich die Daten "bereinigt" und ausgibt.
Okay, also die Daten die erhalten kann sind unter anderem
Beschleunigungs und Rotationsdaten mit denen ich irgendwie über
Integrationen an Positionsdaten(also quasi x,y,z) kommen könnte. Jetzt
habe ich mehrere Beiträge dazu gelesen in denen davon wegen steigender
ungenauigkeit abgeraten wird.
Von mir wird erwartet das ich am ende eine art Punktwolke, welche das
Bewegungsmuster darstellt, ausgebe welche dann weiterverarbeitet werden
kann.
Ich hoffe ich konnte es einigermassen verständlich erklären so dass Ihr
mir eine Richtung weisen könnt.
Liebe Grüße
Christian
Wo liegt denn Dein Problem? Oder andersrum gefragt, was kannst Du schon
von diesen Punkten:
- Datenblatt lesen
- passenden uC auswählen
- Sensor elektrisch korrekt anschließen und sensor und uC mit Strom
versorgen
- programm für den uC schreiben
- daten vom uc an einen PC übertragen,
...?
Probier doch einfach, was der Sensor "einfach so" für Daten liefert, und
dann verfeinerst Du.
Hallo Rainer,
ich habe das Datenblatt des IMU's bereits gelesen,angeschlossen, ein,
bisher übersichtliches, Porgramm geschrieben und Daten auch empfangen.
Mein Problem ist das ich nicht weiß wie es nun weitergeht,auch nicht
wonach ich so recht suchen soll.
Ich habe erwartet das ich Positionen erhalte, sowas wie xyz, doch ich
habe stattdessen "nur" die Möglichkeit mir Beschleunigung,Rollwinkel,
Magnetdaten etc. ausgeben zu lassen.
Meine Frage ist also wie geht es weiter, wie mache ich aus den Daten
Positionen oder anders ausgedrückt wie kann ich die Lage bestimmen wenn
ich den IMU bewege.
Vielleicht noch weiterführende Infos, der IMU soll später auf eine
Drohne die dann mittels IMU Ihre position ermittelt und dementsprechend
reagieren soll.
Hallo MAthias,
danke für deinen Gedankenanstoß, das hilft mir etwas weiter.
Verstehe ich das richtig das ich doppelt integrieren muss?
Wenn ich nun außerhalb von Gebäuden den IMU nutze kann ich die evetuell
auftretenden Abweichungen ja durch die Daten des GPS abfangen aber
innerhalb von Gebäuden kann das doch recht schnell sehr ungenau werden.
Ich habe Materie Integration zwar noch nicht ganz verstanden,das wird
wohl auch noch ne weile dauern, aber mir scheint das es bei doppelter
Integration auch 4 Fach so ungenau wird. Nicht das ich aufeinmal auf dem
Mond stehe :D .
Eine andere alternative gibt es wohl nicht, ausser der Einsatz von
weiterer Sensorik ?
Gruß Christian
Naja. Beschleunigung integriert ergibt Geschwindigkeit. Geschwindigkeit
integriert ergibt Weg. Was ist daran so schwierig. Mach's doch einfach
mal. Solange alles in einer Ebene stattfindet ist's doch einfach.
Christian schrieb:> Bisher habe ich mit IMU's keinerlei Erfahrung und weiß nicht so recht wo> ich ansetzen soll um die Aufgabe zu lösen. Mir wurde zur Aufgabe anfangs> gesagt das ich die Positionsdten durch den eingebauten Kalman Filter> erhalte, was wie ich glaube nicht so ist da dieser,wie ich verstanden> habe, lediglich die Daten "bereinigt" und ausgibt.
Ja und nein. Das Kalmanfilter beinhaltet die Aufintegration der Daten.
Allerdings muss das Filter parametrisiert werden und das ist keine
einfache Sache. Es gibt ja genüngend Arduino Codes und andere Beispiele
für Open Source IMUs. Meistens werden zur Parametrisierung Modelle
gebildet an denen man seinen Algorithmus einstellt (z.B. Matlab o.Ä.)
und dann der Algorithmus final implementiert. Das ist aber schon heftige
Mathematik und da muss man viel Hirnschmalz reinstecken. Gute Einführung
https://www.cbcity.de/das-kalman-filter-einfach-erklaert-teil-1
Christian realisiert das schon korrekt. Der Fehler wächst sogar
quadratisch. Jedes kleinste Rauschen, jeder nichtkompensierte Offset,
jede Nichtlinearität lässt deine Positions in Nirwana abhauen, du
brauchst also Möglichkeiten zum Reset der Geschwindigkeit ("zero
velocity reset").
All das erfordert natürlich, dass du die aktuelle Orientierung sehr
genau weißt und die Richtung der Schwerkraft abziehen kannst, sonst
integrierst du dauerthaft 1g in irgendeine Richtung.
Es ist schwierig!
- der Sensor muss ordentlich kalibriert werden
- Orientierung muss zuverlässig sein
- Samplerate muss hoch sein
- von Zeit zu Zeit (würde was im Sekundenbereich erwarten) brauchst du
eine Referenz, sonst driftest du weg.
So einfach wie z.B. hacky sich das vorstellt ist es nicht. Es ist
verdammt kompliziert.
Spezialanwendung, wo z.B. zero velocity update gemacht wird:
https://www.youtube.com/watch?v=6ijArKE8vKU und papers von Madgwick
(https://scholar.google.de/scholar?hl=de&as_sdt=0%2C5&q=Sebastian+Madgwick&btnG=)
Hallo Hacky,
wie alles im Leben ist das relativ, nicht wahr?
Meine 10.Klasse liegt 20 Jahre zurück und das was wir letzlich gemacht
haben waren Gleichungssysteme. Für mich ist dies ganz und garnicht
einfach denn ich habe Mathe nicht studiert.
z.B. v(t) =t∫0a(τ)dτ oder x(t) =t∫0v(τ)dτ=t∫0t∫0a(τ)dτ dθ
t = steht für die Zeit, welche? Als die Messdaten aufgenommen wurden
nehme ich an?
∫ = Integral, wie rechne ich das oben t unten steht 0
a = Beschleunigung?
τ = Tau = 6,3irgendwas?
dτ = keine Ahnung was d ist aber es wäre dann d*Tau ?
θ = Theta, ein Winkel im Polarkoordinatensystem ?
Folgendes habe ich dazu gefunden,gelesen,inhaltlich etwas verstanden
doch die Formeln, da sehe ich kein Land.
(Seite 8 2.3.2Positionsbestimmungg)
[[Link]http://www8.informatik.uni-wuerzburg.de/fileadmin/10030800/user_upload/quadcopter/Abschlussarbeiten/INS_Lukas_Ifflaender_BA.pdf]
Zur Positionsbestimmung werden Accelerometer verwendet.
In einem ersten Schritt wird die relative Beschleunigung errechnet.
Dabei ist es wichtig auch
die Gravitation zu beachten. Das heißt, dass
~g von ~a
abegzogen werden muss. Dabei muss die
Ausrichtung des Systems berücksichtig werden.
~g muss also vom externen System in das Körper-
system tranformiert werden.
Aus der errechneten Beschleunigung wird durch Integration die
Geschwindigkeit errechnet:v(t) =t∫0a(τ)dτ
Durch einen zweiten Integrationsdurchgang wird anschließend die Position
bestimmt:
Laut Datenblatt besitzt das Ding ein eingebautes GPS mit einer
Updatefrequenz zw. 1 und 4Hz. Was also vermutlich tatsächlich von dir
verlangt wird ist, dass du es schaffst zwischen den GPS Updates die
Beschleunigung zu Integrieren ohne dass dir die Position wegschießt...
Jegliche weitere Diskussion ist ohne zusätzliche Angaben sinnlos. Es
macht etwa einen erheblichen Unterschied ob der Sensor auf ein Fluggerät
oder einen Fuß geschnallt wird. Bei zweiterem sind nämlich wie Jan
bereits angesprochen hat sogenannte "Zero Velocity Updates" möglich die
sozusagen den Fehler "resetten" können. Ebenfalls wichtig ist ob das
eine Out- oder Indoor Anwendung sein soll. Das würde nämlich klären ob
das GPS im Sensor überhaupt was bringt...