PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gyrosensor - Bräuchte Hilfe bei Winkelbestimmung



chmbw
10.11.2010, 16:59
Hallo,

ich werkel derzeit im Rahmen eines Uniprojektes an einem "autonomen Fahrzeug", allerdings bin ich in Sachen Sensorik noch nicht sonderlich bewandert...Das System ist mit einer SPS bestückt.
Nun habe ich ein kleines Problem mit der Berechnung des Winkels bzw. der Winkeländerung pro Zyklus. Momentan bestimmt das Fahrzeug seine Orientierung über den Vergleich der zurückgelegten Strecke an seinen Antriebsrädern (Odometrie), ich möchte das ganze jetzt allerdings über einen Gyrosensor machen.

Link zum Datenblatt (Bezeichnung vom Sensor: NGS1):
http://www.sensor-technik.de/dbdownload/downger_105_1.pdf

Angeblich soll der Sensor die Drehrate bestimmen, also die Winkelgeschwindigkeit um die Hochachse (das Fahrzeug soll nur auf Ebenen Flächen fahren)
Das Signal vom Gyrosensor wird analog ausgegeben und als
Integer (−32.768 bis 32.767) verarbeitet. Der Gyrosensor soll einen Messbereich von +-50 °/s haben.

Aufgrund der kurzen Zykluszeit von 3,5 ms nehme ich die Geschwindigkeit jeweils als konstant an. Somit müsste meine Winkeländerung sich jeweils zu:

omega * t = phi

Meine Berechnung sieht so aus:

winkel_wert = 0.0035 * (winkel_integer + offset) * 50 / 32767

winkel = winkel + winkel_wert

winkel_integer ist der digitalisierte Ausgang vom Gyrosensor, also mein "Rohwert". Der Offset ist notwendig, weil wenn der Sensor komplett in Ruhe liegt er um -4000 leicht schwankt und ich ihn somit auf 0 lege.

Jetzt habe ich aber das Problem, dass ich je nachdem wie schnell ich den Sensor drehe unterschiedliche Winkelwerte kriege. Z.B:
ich drehe den Sensor LANGSAM um 45° ich kriege etwas mit 20° ausgegeben. Ich drehen ihn SCHNELL um 45° ich komme in den Bereich um 75°-85°.

Meine Überlegung bis jetzt war dazu folgende: Wenn ich den Sensor schnell drehe, ist die Zeit die ich für eine 45°-Drehung brauche kürzer, dafür ist die Winkelgeschwindigkeit höher. Drehe ich ihn langsam brauche ich mehr Zeit für die Drehung habe aber eine geringere Geschwindigkeit und somit müsste doch das ganze unabhängig von der Drehgeschwindigkeit sein?!

Wo könnte mein Denkfehler liegen, was habe ich evtl übersehen oder nicht verstanden? Ich freu mich über jede Anwort! :)

Viele Grüße
chmbw

PS:
Sollte ich irgendwelche Infos / Angaben vergessen haben, entschuldigt bitte und ich liefer sie sofort nach.

Richard
10.11.2010, 20:18
Große Erfahrung habe ich jetzt auch nicht, aber so weit mir bekannt kann ein Gyro keinen Winkel sondern NUR die Winkelgeschwindigkeit messen. Daraus muss dann ( integrieren) der Winkel ermittelt werden. Gyros haben oft einen starken Drift, der mittels Bescheunigungs Sensor etwas behoben werden kann. Gute Hilfe dazu kannst Du bei den Trikopter Fliegern finden, das ist ein echt Haariges Thema!

Gruß Richard

RP6conrad
10.11.2010, 20:26
1. Odometrie ist fiel genauer dan ein driftende gyro mit Auflosung 0.6°/S.
2. Ihre gyro hat eine Bandbreite von 40 Hz, ein Abtastrate + Integration von 3.5 mS ist fiel zu Schnell. Sinfoller ist eine Integration jeden 25 mS.
3. Der Auflosung betragt maximal 0.6°/s, das bedeutet das der Drift bei einer Integrationzeit von 25 mS schon 40*0.6 = 24°/sek betragt. Selbst bei absolute Stilstand driftet der Winkel komplett weg.
4. Erste Ubung : Drift bestimmen beim Stillstand. Wie in ihre Formule :
Winkel = Winkel + Zeit*Winkelgeschwindigkeit.
In Idealfall bleibt der Winkel ungeandert beim Stillstand. Normalerweise driftet der Winkel weg.
5. Gibt da eine Moglichkeit um diesen Drift zu kompensieren (Magnetfeld Messung mit Kompass ?). Wen nicht, ist das eigentlich unbrauchbar zum navigieren.
6. Google mal auf Balance Roboter. Genau das gleiche Thema, hier wird den Drift kompensiert mit eine Beschleunigung Sensor, aber naturlich in einen Andere richting.

chmbw
11.11.2010, 01:48
Erstmal herzlichen Dank für eure Antworten! Zusätzliche Sensoren werde ich wohl nicht einbauen dürfen, davon kann ich ausgehen. Zur Verfügung stehen mir nur dieser Gyro und zwei Inkrementalgeber an den Antriebsachsen (und halt die Software selbst).

Mein weiteres Vorgehen hatte ich mir jetzt wie folgt überlegt:

-Eine SPS hat ja immer eine sog. "StartUpTask". In der Zeit steht das ganze Fahrzeug noch still. Kann ich hier nicht die Drift über einen gewissen Zeitraum messen, abspeichern und diese Drift dann vom jeweiligen Messwert immer abziehen?

-40 Hz bedeutet ja, dass der Sensor 40 mal pro Sekunde misst. Ich weiß jetzt allerdings nicht wie lang ich maximal eine Task machen kann. Wenn ich alle 12,5 ms messen würde, messe ich dann einmal eine wirkliche Änderung und jedes zweite mal nur die Drift? Hab ich das so richtig verstanden?

Nur wie erklären sich meine großen Abweichungen, wenn ich den Sensor um 45° hin und zurück drehe, auch in Abhängigkeit der Geschwindigkeit?! Oder ist der einzige Grund dafür die Drift?

Wenn ich Kurvenfahren habe, kann ich mir die Winkeländerung ja noch aus der Odometrie berechnen. Wie gestalte ich nur hier jetzt die Korrektur bzw. den Vergleich mit dem Gyrosensor am intelligentesten, da die Odometrie an sich ja auch keine wirklich genaue Geschichte ist..

RP6conrad
11.11.2010, 11:29
Da sind einige Tricks um diesen Drift zu minimalisieren : Beim Stillstand soll der Winkelaenderung null sein. Die gemessene Drift kan dan weiter als Offset verwendet werden. Problem : Diese Drift ist meistens auch Temperaturabhangig.
Der Bandbreite von 40 Hz bedeutet das diesen Gyro eine Messverzogerung hat von ca 25 ms : bei Aenderung von Drehrate wird die ausgegebene Werte ca 25 ms Verzogerung haben. Was mir wundert ist die Auflosung von 0.6°/s, und die max Wert von 50°/s. Das bedeutet dan nur eine 7bit Auflosung. Die Integerwert von 16 bit muss dan schlagartige Sprungen machen. Das kan ein Grund sein von die Schlechte Ergebnissen bei verschiedene Drehraten.
Eine fixzeit für die Integration ist absolut notwendig. Da muss du eine 25 ms Interruptbasis machen und dort integrieren. Das darf nicht in die Hauptschleife sein, da diese Durchlauf nicht immer das gleiche Zeitinterfall hat.
Hier ein Bild von die Messungen von mein Balance Roboter