www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Winkelbestimmung mit einem Gyroskop


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade am Aufbau eines Systems, mit dem ich den Winkel eines 
autonomen Roboters bestimmen will.
Als Sensor dient mir der Gyroskope LISY300AL 
(http://www.st.com/stonline/products/literature/ds/14753.pdf), zur 
Verarbeitung der Daten benutze ich ein Atmega88.
Das lesen der Werte, des Gyros und die Kommunikation mit dem Rechner 
funktionieren soweit schon.  Als VREF dient mir die Versorgungsspannung 
von 3.3V. Der Analoge Output des Gyros ist in Ruhelage 1.62V.
Jetzt zu meinem Eigentlichen Problem. Ich bin seid ein paar Tagen auf 
der Suche im Netz und in diesem Forum wie man nun den Winkel bestimmen 
kann, während der Roboter lustig vor sich hin fährt. Ich finde im Paper 
leider keine Hinweise über Zeit/Stärke Verhältnis zueinander.
Eventuell hat ja einer von euch eine Idee, Beispiel Code oder ein Link 
der mir weiterhelfen könnte.

Gruß Alex

Autor: ah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Gyro misst die Winkelbeschleunigung. Das hilft leider wenig bis gar 
nichts bei einer Winkelbestimmung. Integration kannste vergessen, Zuviel 
Offsetdrift

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, tut er nicht. Ein Gyroskop misst die Winkelgeschwindigkeit!

Michael

Autor: ah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, aendert aber nichts. Das hilft leider wenig bis gar nichts bei 
einer Winkelbestimmung. Integration kannste vergessen, Zuviel
Offsetdrift

Autor: Spike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,

wie der Name des Sensors sagt (yaw rate) misst er die 
Winkelgeschwindigkeit. Das Datenblatt sagt Dir auch, wie das Signal 
aussieht. Auf Seite 5 in Tabelle 3 steht zum Einen die Ausgangsspannung 
Voff in Ruhelage (1,65V), die nahe bei den von Dir gemessenen 1,62V 
liegt.
Die Drehgeschwindigkeit wird unter der Sensitivity So mit 3.3mV/grad/s 
angegeben.
Heisst bei einer Drehgeschwindigkeit von 10 grad/Sekunde kannst Du 
abhängig von der Drehrichtung 1,653V oder 1,587V AM Ausgang messen (+- 
33mV)
Um den absoluten Winkel zu erhalten, musst Du die Geschwindigkeit 
integrieren, vereinfacht gesagt mit 10 Hz messen und 1/10 des gemessenen 
Wertes aufaddieren. Je nach Frequenz der Messung wird dies, wie "ah" 
anmerkt, hinlänglich ungenau.

Spike

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
deshlab ja auch einen kompass, sonst nix. und ggf einen beschl.sensor um 
den neigungswinkel zu bestimmen.

Klaus.

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

Bewertung
0 lesenswert
nicht lesenswert
Klaus2 schrieb:
> deshlab ja auch einen kompass, sonst nix.

Ist egal. Entscheidend ist, dass bei deiner Aufaddiererei nicht 0 
herauskommen wird, wenn du den Sensor um 90° nach links und wieder 
zurückdrehst. Dafür wird dir der Sensor auch dann eine Drehung ausgeben, 
wenn der Sensor defintiv einfach so in Ruhe auf dem Tisch liegt.

Ob deine Ruhelage willkürlich ist, oder ob die so ausgerichtet ist, dass 
0° nach Norden zeigt, spielt dabei keine Rolle.

Autor: Spike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grundsätzlich kann man einen Gyro schon verwenden. Moderne IMU arbeiten 
zum Teil auch auf Basis von MEMS Sensoren.
Ich würde mir auch keine so große Sorge bezüglich der Offsetdrift 
machen.
Man kann ja im Betrieb nachkalibrieren, denn wenn der Roboter steht ist 
die Drehrate Null.
Man sollte allerdings keine Wunder erwarten...nach 3 Stunden 
Geländefahrt eine Genauigkeit von 0.1 Grad ist wohl unrealistisch :-)

@Klaus2:

Mit einem Kompass kann man je nach Umgebung durchaus gute Ergebnisse 
erzielen, jedoch ist gerade in Gebäuden das Magnetfeld z.T. arg 
verbogen. Da fährt man dann einer gekrümmten Feldlinie nach.
In diesem Zusammenhang, Beschleunigungssensoren zur Neigungsmessung 
funktionieren i.d.R. nur im Stillstand zuverlässig.

Spike

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, das mit dem Stillstand gilt wohl auch für den Gyro, denke ich mal - 
auser man filtert gerne aufwendig digital :)

Kompass inhouse stimmt natürlich, hatte ich vergessen. Wobei ich mich da 
ehrlich gesagt auch am Quadrokopter orientiere, bei denen klappt das 
einiger Maßen. Evtl mal "inspirieren lassen"? :)

Klaus.

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

Bewertung
0 lesenswert
nicht lesenswert
> Ich finde im Paper
> leider keine Hinweise über Zeit/Stärke Verhältnis zueinander.

Da würde ich gar nicht lange fackeln und es auf einen Versuch ankommen 
lassen.
Integrieren wie beschrieben und dann den Sonsor um 360° drehen. Der Wert 
der dann rauskommt ist dein Integrationsergebnis für einen Vollkreis. 
Der Rest ist dann einfach nur 3-Satz. Wenn ein Wert von 2875 einer 
Drehung um 360° entspricht, wie gross ist dann der Winkel bei einem 
Integrationswert von 457? (3 Äpfel kosten 5 Euro, wieviel kosten 7 
Äpfel)

Probier aber unbedingt aus, wie sich das Ergebnis verändert, wenn du 
schnell drehst/langsam drehst etc. 5 Minuten warten und nachsehen, ob 
das Ergebnis sich auch dann nicht verändert, etc.
Dein Gyro scheint temperaturkompensiert zu sein. Ist schon einmal etwas.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, probier es aus, und sehe, dass es nach allerspätestens 10 
Sekunden nicht mehr funktioniert.

Bei IMUs und auch bei Quadrokoptern wird ein zusätzlicher 
Beschleunigungssensor benutzt, der den Winkel zur Erdgravitation misst. 
Somit kann man das Integral immer ganz leicht hinter dem (stark 
getiefpassten Beschleunigungssensor) "hinterherziehen".

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

erst einmal danke für die Antworten, habe mich mal Inserieren lassen :)

@ Klaus
Kompass kommt leider nicht in Frage da der Robot nur in Gebäuden fährt 
und ich schlechte Erfahrungen damit habe.  Aber an sich hast du recht.

@ Spike
Super Sache habe ich ganz überlesen. Werde mal versuchen ob ich etwas 
Brauchbares hinbekomme. Der Offsetdrift sollte hoffentlich nicht allzu 
schlimm, sein da der Robot nur 90 Sekunden fährt und dann wieder in 
Ausgangslage gebracht wird.

Ich hätte noch eine Frage. Wäre der Watchdog Timer genau genug um z.B. 
alle 10 Hz zu messen? Oder gibt es eine andere Möglichkeit um dies zu 
realisieren, denke da an Threadaufteilung, fals dies bei einem Atmega88 
möglich ist.

Sollte ich weiterkommen werde ich euch auf dem Laufenden halten.


Gruß Alex

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

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:

> Ich hätte noch eine Frage. Wäre der Watchdog Timer genau genug

Den Wtschdog willst du da mit Sicherheit in seiner Hundehütte lassen. 
Der hätte andere Aufgaben.

> um z.B.
> alle 10 Hz zu messen?

Kannst du mit jedem x-beliebigen Timer machen.
Normalerweise hat man sowieso in einem Programm einen Timer durchlaufen, 
der dem ganze Programm eine stabile Zeitbasis von zb 1ms in einer ISR 
verpasst.

> Oder gibt es eine andere Möglichkeit um dies zu
> realisieren, denke da an Threadaufteilung, fals dies bei einem Atmega88
> möglich ist.

Kommt drauf, was der Mega sonst noch so alles zu tun hat.
Ist aber oft Overkill.
Timer aufsetzen, der zb. alle 1ms eine ISR aufruft. In der ISR die 
Aktion anstossen. Wenns schnell geht, kann die ISR auch selber die 
Aktion ausführen, aber ansonsten kann sie ein Flag setzen, welches in 
der Hauptschleife ausgeführt wird.

In deinem Fall bietet es sich an, dass die Timer-ISR den ADC startet 
(aber nicht auf das Ergebnis wartet!). Ist der ADC fertig, wird ein 
ADC-Interrupt ausgelöst, in dem wiederrum der ADC Wert ausgelesen und 
integriert wird.

Autor: Spike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,

"probieren geht über studieren"!

Bedenke folgendes, um nicht frustiert zu werden:

1. Die 10 Bit des ADC geben Dir eine Messauflösung von etwa 1 
Grad/Sekunde (Quantisierung)-> also nicht Mircogradgenauigkeit erwarten.

2. Die Messfrequenz kannst Du fast mit jedem Timer des 88er erzeugen. -> 
Am Besten direkt so proggen, dass eine Veränderung der Messfrequenz 
einfach möglich ist. Die 10Hz waren nur als Beispiel gedacht, gerade 
wenn Du den nächsten Punkt siehst, ist eine höhere Messfrequenz 
sinnvoll.

3. Denk dann mal über einen Filteralgorithmus nach. Ein Moving Average 
Filter ist recht einfach geproggt, auch hier die Parametrisierung 
variabel halten und ausprobieren.

4. Die Ergebnisse hier bekanntgeben, ich bin schon gespannt.


Viel Erfolg

Spike

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um was für einen Winkel geht es eigentlich? Gierwinkel (Also 
Fahrrichtung) oder Neigungswinkel? Bei ersterem ist meine Idee mit dem 
Beschleunigungssensor natürlich nonsense.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

@ Simon K.
Es geht um ein Gierwinkel des Robotors in Bezug auf eine ca. 3 x 2.3 
Meter große Spielplatte. Das Gute ist, dass ich nur ein Winkel brauche. 
Entschuldige hätte ich vorher sagen sollen.

Alex

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nochmal,

@ Karl heinz Buchegger
Danke für die Antwort. Werde das so machen.

Gruß

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.