Forum: Mikrocontroller und Digitale Elektronik Winkelmessung


von Simon A. (testnetz)


Lesenswert?

Hallo!

Mir stellt sich folgendes Problem in den Weg.
Ich sollte mit einem Gyroskope und einem Beschleunigungssensor den 
Winkel ermitteln. Nun fand ich weder im WWW noch im Forum beschreibungen 
wie dies am besten zu realiesieren ist. Bei meinem ersten Versuchsaufbau 
kam ich auf keinen günen Zweig da der Sensor, trotz Filter keinen 
halbwegs stabilen Wert am ADW erzeugte. Außerdem weiß ich nicht wie ich 
den Beschleunigungssensor mit einbeziehen muss.

Vielleicht hat jemand dies schon gemacht und könnte mir ein paar Tipps 
geben.
Ich wäre euch sehr Dankbar!

von Peeet (Gast)


Lesenswert?

Wenn du ein 2-Achsen Beschleunigungssensor hast, könntest du damit die 
Richtung der Erdanziehung bestimmen und du hast schon eine erste 
lageerkennung!

von Simon A. (testnetz)


Lesenswert?

Das heißt wenn zB die x Achse gegen Boden zeigt, hat diese den höheren 
Spannungswert am Ausgang wie die um 90° verschobene y Achse.
Bin ich da Richtig?

von Codeumgebung (Gast)


Lesenswert?

Simon A. schrieb:
> Nun fand ich weder im WWW noch im Forum beschreibungen
> wie dies am besten zu realiesieren ist.

Halte ich für ein Gerücht, da ich so was selber schon gemacht habe und 
weiß das es da Unmengen dazu gibt!
Gerade bei Quadrokoptern o.ä. ist sowas standardmäßig drin.


Nun zum Thema:
Die Sensoren rauschen im Normalfall wie Sau!
Sie sind oft stark Temperaturabhängig haben systematische (Nullpunkt-, 
Skalen-, und Justierungsfehler) und zufällige Fehler.

In der Praxis wird nun versucht (meist durch einen Kalmanfilter) diese 
Fehler durch Sensordatenfusion optimal zu minimieren (Gütekriterium).
Ein paar Stichwörter dazu sind Steady-State-Kalmanfilter, 
Extended-Kalman-Filter(EKF) und Unscented-Kalman-Filter(UKF).
Der Aufwand wächst dabei mit der Aufzählung.

Eine weitere Methode ist die Direction Cosine Matrix (DCM).

Hier mal ein paar Links vom Forum:
Beitrag "Kompass / Neigungssensor"
Beitrag "Suche Projektpartner für Kalmanfilter-Implementierung"

Oder noch was zur DCM (mit STM32):
http://www.chrobotics.com/forum/index.php
http://vrhome.net/vassilis/dcm/

Kaufquelle Fertigteil:
http://www.watterott.com/de/CHR-6d-IMU

von Codeumgebung (Gast)


Lesenswert?

Simon A. schrieb:
> Das heißt wenn zB die x Achse gegen Boden zeigt, hat diese den höheren
> Spannungswert am Ausgang wie die um 90° verschobene y Achse.
> Bin ich da Richtig?

Das kommt darauf an in welche Richtung der Vektor als positiv 
(Pfeilrichtung) angenommen wird!

Aber prinzipiell kannst Du im statischen Fall (keine oder nur langsame 
Bewegung) den Winkel über 2 im Rechten Winkel angeordnete 
Beschleunigungssensoren bestimmen (Pythagoras).
Dazu musst Du natürlich zuerst den Offset Deines Sensor bestimmen und da 
ist dann Teilweise wieder das Problem, da dieser Offset teilweise auch 
sehr Temperaturabhängig (und sogar Lageabhängig) ist.

Sobald irgendwelche Vibrationen oder Bewegungen mit ins Spiel kommen 
kannst Du alleine über die Beschleunigungssensoren keine Winkel mehr 
bestimmen.

Das Gyroskop wird sozusagen für schnelle Winkeländerungen und für die 
Unempfindlichkeit gegenüber Beschleunigungen (Vibrationen, wackeln, 
usw.) genommen.
Die Beschleunigungssensoren dienen dann zum stützen des berechneten 
Winkels (über Gyro) damit durch die Integration der 
Winkelgeschwindigkeit keine Fehler entstehen.
Man hat ja wie oben schon gesagt einen absoluten Bezugspunkt (im 
statischen Fall) mit den Beschleunigungssensoren, mit dem Gyro kann man 
nur relative Winkel angeben!!!

Grüße

von Codeumgebung (Gast)


Lesenswert?

Ach ja, noch so als Anmerkung:
Wenn Dein Mathe nicht mindestens auf Hochschulniveua ist, dann such Dir 
lieber ne andere Beschäftigung ;-)

Ist nicht gerade Trivial (ne Vernüntige IMU kostet >5k Euro).

von Simon A. (testnetz)


Lesenswert?

Über Kalmanfilter bin ich bereits infomiert. Auch über dessen Verwendung 
auf 8 bit Prozessoren.
Ich habe für den Testaufbau den Code von 
http://www.gerold-online.de/cms/wheelie/einleitung.html verwendet und 
auch dessen Auswertungsprogramm über RS232. Nur dreht sich bei mir der 
künstliche Horizont ständig um 360° bzw wenn er den Nullpunkt gefunden, 
erkennt das Programm kleine und schnelle Veränderungen, geht dann aber 
anschließend immer in die Nulllage zurück. Meines erachtens wäre der 
Gyro eingegangen, da auch der verstärkte Ausgang nicht mehr 
funktioniert.

Also um Kalman und 2 Sensoren kommt man woll nicht herum.

von Codeumgebung (Gast)


Lesenswert?

Simon A. schrieb:
> Meines erachtens wäre der
> Gyro eingegangen, da auch der verstärkte Ausgang nicht mehr
> funktioniert.

Na dann solltes Du mal zuerst versuchen nachzuweisen, dass das auch so 
ist.
Raten hilft da nicht weiter.
Schritt für Schritt...erst mal schauen ob Deine Sensoren noch 
ordentliche Werte liefern, dann versuchen den Code zu verstehen und dann 
die Anpassungen vornehmen.

Simon A. schrieb:
> Über Kalmanfilter bin ich bereits infomiert. Auch über dessen Verwendung
> auf 8 bit Prozessoren.

Informiert heißt nicht verstanden.

von Codeumgebung (Gast)


Lesenswert?

Simon A. schrieb:
> Ich habe für den Testaufbau den Code von
> http://www.gerold-online.de/cms/wheelie/einleitung.html verwendet

Ach ja, ganz vergessen...das ist übrigens der Elektor-Wheelie.

Wenn es um Kalmanfilter geht, dann kopieren sie sowieso alle zusammen im 
Internet.
Bei meinen Recherchen damals habe ich mindesten 5 Projekte gefunden, die 
alle einen Kalmanfilter entwickelt haben...komisch dass die alle genau 
gleich ausgesehen haben.

Wie es schon oben im Link nachzulesen ist...der ist von Tom Pyke:
http://tom.pycke.be/mav/92/kalman-demo-application

Es sei denn der hat ihn auch irgendwo kopiert...

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Simon,

> Ich sollte mit einem Gyroskope und einem Beschleunigungssensor den
> Winkel ermitteln.
> Bei meinem ersten Versuchsaufbau
> kam ich auf keinen günen Zweig da der Sensor, trotz Filter keinen
> halbwegs stabilen Wert am ADW erzeugte.

Diese Lastenheftangaben sind noch zu mager für brauchbare Antworten:
1. Wieviel Drift ist pro Stunde akzeptabel?
2. Welche Störgrößen müssen ausgeglichen werden?
3. Kann die mobile Plattform auch schlingern und stampfen oder ist sie 
fest horizontal ausgerichtet?
4. Welche lateralen Beschleunigungen treten auf?

In www.roboternetz.de findest Du Hunderte von Beiträgen, wie man nur 
einen Quadrokopter stabil kriegt mit einem Drehratensensor als Gyroskop. 
Oder mit einem Vibrationskreisel.

Ein Kollege am Nachbartisch hatte eine ähnliche Aufgabe wie Du. Die 
Vorgaben des Produktmanagers hätten mit einem Wendezeiger mit einem 
mechanischen Kreisel gelöst werden können, ergänzt um einen 
nordsuchenden mechanischen Kreisel (Beschaffungskosten >20k€, dazu 
jährliche Wartung) oder auch Laserkreisel (Litef). Das wagte der Kollege 
dem Produktmanager monatelang nicht zu sagen. Stattdessen mühte er sich 
lieber mit Kalmanfilterei herum. Die aber kann die Drift des Nordsensors 
nicht ausgleichen.

Wenn Du eine deutlich bessere Lösung hast als die im Roboternetz mit 
einem elektronischen Kompass im schwankenden geomagnetischen Feld und in 
schwankenden Störfeldern infolge Gleichströme, das wäre auch hier 
interessant.

(Mein erster Ansatz dazu ähnelt DGPS - ein Sensor fest am Boden misst 
die Schwankungen des geomagnetischen Feldes (Kompassnadeln zittern 
allein wegen Sonnenwind, die Dämpfung der Nadel ist nur eine Art 
Tiefpass.) und informiert das mobile Gerät, das stabilisiert werden 
soll.
Meinen zweiten Ansatz würde ich verkaufen, daher keine Details in der 
Öffentlichkeit.)


Produktmanager fanden das perpetuum mobile wohl schon immer 
interessanter als die Hauptsätze der Thermodynamik, in welcher Form sie 
dies auch immer neu erfinden.

Ciao
Wolfgang Horn

von Günter (Gast)


Lesenswert?

Hallo Simon,

der Kalmanfilter ist kein Wunderding, das alle Probleme löst. Jedoch ist 
es in Bezug auf Störungen und Sprungantwort einem PID-Regler überlegen.
Bei meinem Beispielcode sind ein paar Dinge zu beachten:
1. Je nach eingesetztem Sensor muss der Code der Einbaulage angepasst 
(invertiert) werden. Soll heißen, wenn der Beschleunigungssensor beim 
Bewegen positivere Werte liefert, muss auch der Gyro positivere Werte 
liefern.
2. Der Code liegt in einem Interrupt der von einem Timer ausgelöst wird. 
Das stellt sicher, dass der Filter in einem festen Intervall aufgerufen 
wird. Nur so habe ich gute Ergebnisse erzielt.
3. Die Sensoren müssen auf eine gemeinsame Basis gebracht werden. In 
meinem Fall habe ich die ADC-Werte in ° bzw. °/s umgerechnet.
Code:
gyro_sensor = (double)(ReadChannel(Ad_kanal_gyro)-Average_gyro)* 
1.4634135; // /1025*3.0V/0.002
adxl_sensor = ((double)(ReadChannel(Ad_kanal_adxl)-Adxl_zero))* 1.5139; 
// /1025*3.0V/0.0019333 0,348V for 180° = 1,9333mV per °
Die Werte habe ich aus den Datasheets der Sensoren.

Zitat:
>Wenn es um Kalmanfilter geht, dann kopieren sie sowieso alle zusammen im
Internet.
Bis auf Herrn Kalman selber haben es wohl alle kopiert. Das ist auch 
nicht weiter verwerflich, solange man immer schön die Quellen nennt. 
Natürlich habe ich auch Tom gefragt, ob ich Teile seines Codes verwenden 
darf.


Zitat:
>Wenn Dein Mathe nicht mindestens auf Hochschulniveua ist, dann such Dir
lieber ne andere Beschäftigung ;-)
Ich habe kein Abitur und auch nie studiert. Also lass dich nicht 
entmutigen, die Ausdauer ist das einzig entscheidende!

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.