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
Das Gyro misst die Winkelbeschleunigung. Das hilft leider wenig bis gar nichts bei einer Winkelbestimmung. Integration kannste vergessen, Zuviel Offsetdrift
Nein, tut er nicht. Ein Gyroskop misst die Winkelgeschwindigkeit! Michael
Stimmt, aendert aber nichts. Das hilft leider wenig bis gar nichts bei einer Winkelbestimmung. Integration kannste vergessen, Zuviel Offsetdrift
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
deshlab ja auch einen kompass, sonst nix. und ggf einen beschl.sensor um den neigungswinkel zu bestimmen. Klaus.
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.
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
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.
> 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.
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".
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
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.
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
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.
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
Ich nochmal, @ Karl heinz Buchegger Danke für die Antwort. Werde das so machen. Gruß
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.