hallo!
die gute Nachricht lautet:
nein! du brauchst keinen Kalman für einen "Segway"!
Du brauchst noch nichtmal einen Accelerometer-Sensor!
Alles was du an Hardware brauchst ist ein Gyro mit 1° Auflösung, und Encoder-Motore (etwa 1° Auflösung am Rad) sowie einen PID-Controller dafür, den du allerdings sehr sorgfältig tunen musst.
Das System ist sogar recht simpel, es laufen bereits seit fast 10 Jahren Lego-Roboter mit solchen ganz einfach gestrickten Programmen!
Übrigens funktionieren Lego-Encoder-Motore ganz hervorragend mit Arduinos und L293D Motortreibern zusammen:
http://www.mindstormsforum.de/viewto...&t=8302#p65015
Die Gyro-Drift stellt außerdem für Segways auch ein ziemlich einfach in den Griff zu kriegendes Problem dar, wenn sie schwächer ist als - sagen wir - 10° pro Minute.
Du musst nur eine ganz einfache Annahme machen: dass im Mittel nämlich der Segway immer ausbalanciert ist - :
daraus folgt, dass das Integral über alle Gyrowerte immer annähernd Null ist! Damit lässt sich die Drift herausrechnen!
Ein Accelerometer ist nur sinnvoll für die Start-Bedingung, damit er seine senkrechte Stellung erkennt.
Es geht aber auch ohne:
erst waagerecht legen, dann initialisieren und damit eichen auf 90° Gyroneigung, dann hinstellen, und dann den Gyro seinen neuen Senkrecht-Nullwert = -90° vom Waagerecht-Wert umrechnen lassen.
Auch fahren lassen kannst du ihn mit diesem PID-Regler: dann wird als Gyro-Sollwert nicht Null, sondern ein kleiner Offset als Zielwert gewählt (schräge Stellung), und schon muss er sich in die Richtung der Neigung bewegen, um balanciert zu bleiben - heißt: er fährt in Richtung des Neigungs-Offsets. Kurven-fahren kann analog berechnet werden (Räder verschieden schnell, aber Durchschnitt dem Neigungs-Offset angepasst).
Sketch besitzt übrigens bereits eine fertige lib für PID-Controller: PID_v1.h, die allerdings erst konfiguriert (und dann, wie gesagt, getuned) werden muss:
http://playground.arduino.cc/Code/PIDLibrary
HTH!
Lesezeichen