Hallo Dominik,
auf meiner Internetseite ist der Quellcode veröffentlicht:
http://www.gerold-online.de/cms/wheelie/mein-wheelie/quellcodes.html
2 Knackpunkte gibt es bei der Balanciererei:
1. Beschleunigungssensoren liefern unbrauchbare Lageinformationen. Diese
müssen erst mit Hilfe des Gyros und eines PID oder Kalmanfilters erzeugt
werden. Das ist aber noch nicht die Regelung, sondern nur die Erzeugung
von brauchbaren Neigungsinformationen der Plattform.
2. Die Regelung selbst. Du wirst viel Theorie dazu finden wie Regelungen
funktionieren, auch die Wirkungsweise und der theoretische Abgleich der
Regelung (Sprungantwort). Wenn du dann irgendwas ausgerechnet hast und
keinen groben Fehler machst wird das Ding auch balancieren. Es
balanciert eigentlich immer irgendwie. Bohrst du tiefer, taucht immer
öfter das Wort empirisch auf. Das ist nicht verwunderlich, schließlich
willst du ja nicht nur ein inverses Pendel, sondern 2 inverse Pendel
aufeinander! Da sich das obere Pendel nur langsam programmieren lässt,
hat auch Segway verschiedene Abstimmungen für das untere Pendel
eingebaut: Beginner bis Profi. Hinzu kommt noch die Trägheit des Systems
die beeinflusst wird durch: Gewicht des Fahrers, Luftdruck der Reifen,
Innenwiederstand der Batterie uvm..
Hier der entscheidende Teil meiner Regelung:
void algo(void)
{
//The I-Part of the Controller
Drive_sum += tilt_angle;
if(Drive_sum > Drivesumlimit)Drive_sum = Drivesumlimit; //you
have to limit the I-Controller
if(Drive_sum < -Drivesumlimit)Drive_sum = -Drivesumlimit;
//Drive_sum max = 255*150
Drivespeed = (int)(tilt_angle * Parameter4 + Drive_sum * Parameter5
/ 10);
}
tilt_angle ist die mit einem Kalmanfilter erzeugte Lageinformation.
http://www.youtube.com/watch?v=eOmlB13yijU (man beachte die
Sprungantwort!)
Drivespeed ist die Motor-PWM = Motorstrom = Drehmoment.
Drive_sum ist die Summe von tilt_angle, also der I-Teil der Regelung.
Tiltangle selber der P-Teil.
Hääääh? Also ein PI-Regler? Wieso das denn?
Hmmm, ist das richtig? Wenn ja warum? Du studierst, also sag du mir es.