Forum: Mikrocontroller und Digitale Elektronik Quaternien / IMU


von Smazze (Gast)


Lesenswert?

Hallo Freunde,
ich suche einen OpenSourcecode für eine IMU.
Bekommen tu ich von der IMU Beschleunigungsdaten, Winkelgeschwindigkeit 
und Quaternien.
Diese möchte ich nu in einem C-Programm über einen sogenannten 
Strapdown-Algorithmus verrechnen.
http://www.uav.ethz.ch/research/projects/navigation_algorithms/3DerdfestE_big?hires

Kennt einer von euch nen OpenSourceCode wo man sich mal anschauen kann 
wie andere dies gemacht haben?

Danke im Vorraus
Smazze

von Jan K. (jan_k)


Lesenswert?

Hi!

Erst einmal: das nennt sich Quaternionen ;-) und die geben die 
Orientierung an, ähnlich wie z.B. Euler Winkel oder eine DCM Matrix. 
Normalerweise berechnet man aus Beschleunigung + Winkelgeschwindigkeit 
und evtl einem Magnetometer eben diese Orientierung.

Was genau möchtest du also machen?

Edit:
Ah ok, du willst ein INS basteln. Das funktioniert theoretisch so, dass 
du über die Orientierung den Gravitationsvektor, Coriolis- und sonstige 
Beschleunigungen aus den Beschleunigungsdaten abziehst und die übrig 
bleibende Beschleunigung integrierst ;)
Ob es dafür was in open source gibt weiß ich nicht, das ist nicht 
unbedingt trivial. Was hast du für eine IMU?

Wie gesagt, das heißt INS, inertial navigation system, oder 
trägheitsnavigation. Such mal danach, z.B. in google scholar oder ieee. 
Da gibts millionen papers.

Schöne Grüße,
Jan

: Bearbeitet durch User
von Smazze (Gast)


Lesenswert?

Hey Jan,
danke erstmal für deine Antwort!

Ich habe eine UM7:
http://www.chrobotics.com/shop/um7-lt-orientation-sensor

Das mir die Quaternionen die Orientierung angeben habe ich soweit 
verstanden.
Was ich irgendwie noch nicht verstanden hab ist, wie ich mit Hilfe von 
Drehgeschwindigkeit der IMU, Quaternionen und Beschleunigung 
(Sensorkoordinatensystem) auf eine Geschwindigkeit im 
Raumkoordinatensystem (Navigationssystem) komme.

Im 2D mit Eulerwinkel muss ich ja einfach eine Drehmatrix mit 
einrechnen:


vx+=(  ax*cos(phi)+ax*sin(phi)  ) /IMUfrequenz;   //Geschwindigkeit
vy+=(  ay*-sin(phi)+ay*cos(phi) ) /IMUfrequenz;
x +=vx/IMUfrequenz;                                //Postion
y +=vy/IMUfrequenz;

Das += für die Integration
die cos und sin stehen jeweils für die Rotationsmatrix


Nun sollte das ganze mit Quaternionen im 3D ja ähnlich klappen :)
Denke dazu brauch ich dann die Differentialgleichung der Quaternionen 
ähnlich wie oben mit der Rotationsmatrix, nur das ich nun die die 
Beschleunigungen in eine Quaternionenform bringen muss?!

von Smazze (Gast)


Lesenswert?

Bzw hab ich nun verstanden wie ich meine Beschleunigungsdaten vom 
inertial-Koordinatensystem in den Bodyframe umrechne.
Nun brauch ich wohl erstmal nurnoch die Transformation andersrum.. Aber 
die wird ja auch schon irgend nen schlauer Mensch aufgestellt haben :P

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.