www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 3D Lagebestimmung mit Gyro, Probelm mit Koordinatensystem


Autor: Steffen Flämig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Thema ist vielleicht etwas OT, aber nach dem Archiv zu urteilen, 
gibt es hier einige die sich mit so etwas beschäftigen.

Mein Vorhaben:

Ich möchte die Lage eines frei beweglichen Systems im Raum (x, y und z) 
bestimmen. Da das System z.T. beschleunigt und abgebremst wird, sich auf 
Kurverbahnen bewegt und auch Erschütterungen und Vibrationen ausgesetzt 
ist, ist eine Lagebestimmung mit Beschleunigungssensoren allein nicht 
ausreichend.

Mein Ansatz:

Ich plane drei orthogonale Beschleunigungssensoren drei orthogonale 
Drehratensensoren (Gyros) und drei Orthogonale Magnetfeldsensoren 
(z.B.ADIS 16350 oder ADIS16405). Die Integration der Daten der Gyros 
sollten die drei aktuellen Neigungswinkel (bezogen auf den Beginn der 
Integration, Initialisierung) ergeben. Da diese wegen verschiedenen 
Dreckeffekten mit der Zeit wegdriften werden, wollte ich ständig die 
vektorielle Summe der drei Beschleunigungssensoren bestimmen. Wenn diese 
1g entspricht ist das System entweder in Ruhe, in einer gleichförmigen, 
unbeschleunigten Bewegung oder auf einer Kurvenbahn die eine 
Zentrifugalkraft von genau 1g entspricht (z. B. Looping mit den 
entsprechenden Parametern). In den ersten beiden Fällen kann man aus den 
Werten der Beschleunigungssensoren durch einfache Vektorrechnung leicht 
bestimmen „wo unten ist“ und die (Weggedrifteten) Integrationswerte der 
Gyros korrigieren. Im letzten Fall sollte der so errechtete Wert „für 
unten“ extrem von den Winkeln der Gyros abweichen und so erkannt und 
verworfen werden können.

Mein Problem:

Es gibt zwei unterschiedliche Koordinatensysteme: Das der „richtigen 
Welt“ (z als Senkrechte zum Erdmittelpunkt) und das des Systems. Liegt 
das System in Ruhe vor mir auf dem Tisch entsprechen gleichnamige Achsen 
beider Koordinatensysteme einander.
Kippe ich es nun um die x-Achse um 90° nach oben (sagen wir mal die 
x-Achse meines Schreibtisches geht von rechts nach links, die y-Achse 
von dem vor mir stehenden Bildschirm zu meinem Bauch , integriert das 
x-Gyro auf +90°. Drehe ich nun das vor mir aufgestellte System um 90° 
nach rechts (also um die z-Achse der Weltkoordinaten die jetzt der 
y-Achse meines Systems entspricht!) integriert das y-Gyro auf +90°! 
Kippe ich nun das System wieder um 90° nach rechts (d.h. -90° um die 
x-Achse des Systems  90° um die y-Achse der Welt!) integriert das 
x-Gyro zurück auf 0°. Das System liegt wieder flach auf dem Tisch, nur 
um 90° um die z-Achse des Welt-Koordinatensystems (Senkrechte) nach 
rechst gedreht (also x: 0°, y : 0°, z: +90°). Die Integrationswerte der 
Gyros stehen aber auf: x:0°, y: +90°, z:0°!

Wie löst man das Problem? Ich habe leider trotz intensiver Suche auch 
bei Google nichts Brauchbares gefunden. Das liegt sich auch daran, dass 
ich mein Problem nicht in treffende Suchbegriffe fassen kann. Auch hier 
bin ich für Tipps dankbar.

Man könnte jetzt in jedem Integrationsschritt eine Transformation der 
System-Achsen in das Welt-Koordinatensystem durchführen. Im obigen 
Beispiel wird dann die die y-Achse des Systems bei der ersten Drehung in 
die z-Achse der Welt (und umgekehrt) überführt. Eine spätere Drehung um 
die (System-)y-Achse integriert dann nicht (oder nur z.T.) den y-Wert 
sondern (oder z.T.) den z-Wert.

Das ist aber bei mehreren duzend oder hundert Messwerten pro Sekunde ein 
erheblicher Aufwand, ganz zu Schweigen von dem (realistischen) Fall, 
dass Drehungen simultan um mehrere Achsen erfolgen.

Ich freue mich auf die Diskussion…

Beste Grüße
Steffen

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://en.wikipedia.org/wiki/Gimbal_lock

Behalte die Rotation in einer Matrix oder Quaternion

Cheers, Roger

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Roger,

>> Behalte die Rotation in einer Matrix oder Quaternion

Wie meinst Du das? Sollte also bei jedem Integrationsschritt eine 
Transformation der System- in die Weltkoordinaten erfolgen?

Gruß
Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen wrote:
> Hallo Roger,
>
>>> Behalte die Rotation in einer Matrix oder Quaternion
>
> Wie meinst Du das? Sollte also bei jedem Integrationsschritt eine
> Transformation der System- in die Weltkoordinaten erfolgen?

Deine Systemkoordinaten sind eine Matrix!

Nimm mal anleihe bei den Computergrafikern. Dort ist das Benutzen einer 
Matrix um beliebige Positionen / Rotationen im Raum festzuhalten, 
absolut üblich und völlig normal.

Mit deinen Euler-Winkeln, wie du schon gesehen hast, kommst du hier 
nicht weiter.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

>> Deine Systemkoordinaten sind eine Matrix!

>> Nimm mal anleihe bei den Computergrafiken. Dort ist das Benutzen
>> einer Matrix um beliebige Positionen / Rotationen im Raum
>> festzuhalten, absolut üblich und völlig normal.

Wie wird dass dort genau bezeichnet? Mir fehlt momentan der Ansatz zum 
googlen etc..

MfG Steffen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen wrote:

> Wie wird dass dort genau bezeichnet? Mir fehlt momentan der Ansatz zum
> googlen etc..

Matrix, Transformationsmatrix


Mit "Transformationsmatrix 3D" finden sich bei google ein paar Einträge. 
Aber einen so richtigen Knüller hab ich damit auf die Schnelle auch 
nicht gefunden.

Autor: Timo Dittmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ein gutes Suchwort ist "Quaternion"

z.b. http://de.wikipedia.org/wiki/Quaternionen

und

http://en.wikipedia.org/wiki/Quaternions_and_spati...


Gruesse,

Timo

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: oha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Rechenarbeit scheint aufwendig zu sein, ist es aber nicht wenn man's 
richtig macht. Wenn man Float haben will, so hat man schon verloren. 
Sowas macht man natuerlich mit Integern. Und ja, man muss gegebenenfalls 
fuer jedes ADC Sample des Beschleunigungssensores eine Transformation 
machen.

Autor: Ron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du vorhast nennt sich auch inertiale Navigation (INS). Die Abbildung 
der Drehraten auf das inertiale Koordinatensystem findet über einen 
Strapdown genannten Algorithmus statt. Diese Abbildung muss zwangsläufig 
mit der Abtastrate der Sensoren geschehen. Die Abtastrate selber hängt 
natürlich stark von der Dynamik deines Fahrzeugs ab, dürfte aber in der 
Regel > 100 Hz liegen.
Die Fusion der Messwerte zur Position selber geschieht am besten über 
einen Kalman-Filter. Details dazu findest du beispielsweise bei Paul 
Groves: Principles of GNSS, Inertial, and Multisensor Integrated 
Navigation
Systems.
Der Rechenaufwand dabei ist allerdings relativ hoch. Ein ARM7 dürfte 
damit schon ziemlich gut ausgelastet sein.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ron,

>> Details dazu findest du beispielsweise bei
>> Paul Groves: Principles of GNSS, Inertial,
>> and Multisensor Integrated Navigation Systems.

Besitz Du dieses Buch? Ist es empfehlenswert?

Autor: Ron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich musste mich mal ein wenig mit der Materie beschäftigen und habe es 
mir dafür ausgeliehen.
Das Buch ist gut geschrieben und auch einigermaßen verständlich. Es geht 
aber dabei auch um die theoretischen Hintergründe. Um einfach so mal 
eben so was zu implementieren solltest Du lieber schauen, ob nicht 
jemand anderes ein ähnliches Projekt bereits auf die Beine gestellt hat, 
da es doch ziemlich umfangreich ist, das vollständig selbst zu 
implementieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.