PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Trägheitsnavigation



bastman
29.11.2006, 13:28
Hallo

Ich habe eine Platine mit einem 2 Achsen Beschleunigungssensor(ADXL311) und einem Gyroskop(ADXR300) von Analog drauf. Jetzt würde ich gerne aus den Werten, die mir die Platine liefert eine Positionsbestimmung machen nur im Bezug auf die Platine.
Könnte mir einer helfen wie man das genau Realisiert? Oder Informationen zukommen lassen?
Also wie man richtig mit den Werten umgeht(umrechnet) und wie man evtl. einen Algorithmus dafür entwickelt?
Die Werte die man berücksichtigen muss sind:
Eigenrauschen des Sensors
Temperaturabhängigkeiten des Sensors
Kreiseldrift
Achsnichtorthogonalität
Bias(Systematische Fehler)
Empfindlichkeit
Maßstabs und Nullpunktfehler

Ich habe die Platine an eine AD Karte dran und lese diese mit LabVIEW aus.

Ich wäre über jede Hilfe sehr dankbar

Datenblätter:
ADXL311
http://www.analog.com/UploadedFiles/Data_Sheets/ADXL311.pdf
Gyro
http://www.analog.com/UploadedFiles/Data_Sheets/ADXRS300.pdf

Raszycz
11.12.2006, 16:18
Hi bastman,

ich beschäftige mich seit 2-3 Wochen mit etwas Ähnlichem (meine Platine ist momentan erst bestückt mit zwei LIS3LV02DQ-Beschleunigungssensoren und einem MicroMag3-Magnetfeldsensor).
Hier mal zusammengefasst, was ich bisher weiß:

>> Also wie man richtig mit den Werten umgeht(umrechnet) und wie man evtl. einen Algorithmus dafür entwickelt?
So etwas wie EMA (exponentieller gleitender Mittelwert) ist wegen der Verzögerung (gefiltertes Signal "hinkt" hinterher) nicht geeignet. Sehr interessant weil für Echtzeitsysteme dieser Art gut einsetzbar ist hierfür der Kalman-Filter (rekursiv), durch den erst einmal sämtliche Messwerte geschickt werden. Stichworte hier sind neben "Statistik": Methode der kleinsten (Fehler-)Quadrate, "Erraten" zukünftiger Messwerte und Mittelwerte

>> Die Werte die man berücksichtigen muss sind: [...]
Du solltest Dich intensiv mit (geometrischen) Matrizenoperationen beschäftigen:

Für alle translatorischen Berechnungen mit den 3D-Vektoren der Beschleunigungssensoren sollten 4x4-Matrizen (XYZ-Komponenten + 4. "homogene" H-Komponente für Translation) geeignet sein. Es ist nicht zu unterschätzen, was sich damit alles machen lässt. Du kannst z.B. einen in den Komponenten verschobenen und falsch skalierten Messwert-Vektor eines Beschleunigungssensors ("Offset und Gain") mit dem Erwartungswert (+-1g in XY, XZ, YZ-Ruhelage) abgleichen. Wenn außerdem die beiden Sensoren durch eine nicht optimale Befestigung bedingt gegeneinander etwas verdreht sind, kannst du auch die Drehung mit einer solchen Matrix korrigieren. Wenn Du es geschickt anstellst, hast du am Ende einen Satz von Matrizen (für jeden Sensor je einzeln abgestimmt), mit denen du alle möglichen Unstimmigkeiten ausgleichen kannst und so schöne Messwerte aus deinen Rohwerten bekommst. (Stichwort hier u.a.: Inverse Kinematik)

Für rotatorische Berechnungen brauchst du ein gutes Verständnis dafür, wie man die Drehung um eine beliebige (3D-)Achse realisieren kann. Den Anfang machen hier 3D-Rotationsmatrizen, ein paar Vorteile ("eindeutige" Nulldrehung usw.) bietet darüberhinaus die Modellierung mit Quaternionen.

Beim Thema Integration der Messwerte solltest Du Dir Lösungen anderer Projekte anschauen. Interessant ist hier die Unterscheidung, wie genau Du integrierst (zeit- oder ortsabhänig), da gibts große Unterschiede in der Stabilität (je nach Einsatzbereich). Damit habe ich mich aber noch nicht genauer beschäftigt.

Zum Thema Drift, Sensorungenauigkeiten, Fehler durch nicht stabile Integration: Hier solltest Du in Erwägung ziehen (je nachdem, über welche Strecke oder welchen Zeitraum Du eine hohe Genauigkeit brauchst), auf zusätzliche "absolute" Sensordaten als Stützwerte (für Korrektur der eigentlichen Messwerte) zurückzugreifen. Mit absoluten Sensordaten meine ich hier globale Position (GPS), Luftdruck~Höhe oder Erdmagnetfeld.


Insgesamt bedeutet das eine Menge Arbeit, wenn Du am Ende ein brauchbares Ergebnis haben willst.

Gruß,
Martin