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
http://en.wikipedia.org/wiki/Gimbal_lock Behalte die Rotation in einer Matrix oder Quaternion Cheers, Roger
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
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.
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
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.
Hallo, ein gutes Suchwort ist "Quaternion" z.b. http://de.wikipedia.org/wiki/Quaternionen und http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation Gruesse, Timo
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.
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.