SeveQ
11.05.2012, 08:07
Hallo Leute,
im Zuge der Entwicklung unseres Otter 2 für die dieses Wochenende stattfindende Eurobot Qualifikation sind wir auf ein... nein, eigentlich sind wir auf etliche Probleme/Herausforderungen gestoßen, aber diese eine würde ich hier gerne nochmal diskutieren. Nur der Neugier wegen. Ein Konzept haben wir schon, das einigermaßen funktioniert.
Also... ein zweirädriger Roboter soll an einen bestimmten Zielpunkt auf einer Ebene fahren. Dazu bekommt er einen Vektor, der von seiner Startposition zum Zielpunkt weist.
Welche Kriterien nimmt man gemeinhin an, um sagen zu können, ja, jetzt hat der Roboter seinen Zielpunkt erreicht?
Unsere Lösung sieht derzeit folgendermaßen aus:
Die Kraftsteuerung der Motoren erfolgt über einen Regelkreis mit PID-Regler. Im ersten State erhält der Regelkreis die Winkeldifferenz zwischen Blick- und Zielvektor als Regeldifferenz. Im zweiten State erhält er die Differenz aus zurückgelegter relativer Distanz und Betrag des Zielvektors. Überschwinger versuchen wir zu vermeiden, indem die Regelparameter P, I und D so "ausgelegt" (rumprobiert, bis es akzeptabel war) wurden, dass ein sanftes Anfahren und Stoppen erfolgt. Den Augenblick des Erreichen des Zielpunktes ermitteln wir, indem wir schauen, ob der Betrag der Stellgrößen beider Motoren in Summe einen gewissen Wert unterschreitet und auch der Betrag der zuletzt erfassten Fahr- und Drehgeschwindigkeit unter einem bestimmten Wert liegt. Dann geben wir das Signal "Ziel erreicht".
Das funktioniert, ist aber nicht gerade sehr genau und schön. Leider haben die Getriebe unserer Motoren ein bisschen Spiel, sodass ein exaktes Ausregeln der Position und des Winkels nur schwer zu erreichen ist. Die Strecke selbst ist also leider nicht stationär genau. Da würde ich evtl. noch gerne irgendwie gegenregeln.
Insgesamt wüsste ich gerne, ob dieses Vorgehen schon der Königsweg ist, oder ob es da noch bessere Algorithmen zur Erfassung des Ereignisses "Ziel erreicht" gibt.
Danke
Viele Grüße,
Hendrik
im Zuge der Entwicklung unseres Otter 2 für die dieses Wochenende stattfindende Eurobot Qualifikation sind wir auf ein... nein, eigentlich sind wir auf etliche Probleme/Herausforderungen gestoßen, aber diese eine würde ich hier gerne nochmal diskutieren. Nur der Neugier wegen. Ein Konzept haben wir schon, das einigermaßen funktioniert.
Also... ein zweirädriger Roboter soll an einen bestimmten Zielpunkt auf einer Ebene fahren. Dazu bekommt er einen Vektor, der von seiner Startposition zum Zielpunkt weist.
Welche Kriterien nimmt man gemeinhin an, um sagen zu können, ja, jetzt hat der Roboter seinen Zielpunkt erreicht?
Unsere Lösung sieht derzeit folgendermaßen aus:
Die Kraftsteuerung der Motoren erfolgt über einen Regelkreis mit PID-Regler. Im ersten State erhält der Regelkreis die Winkeldifferenz zwischen Blick- und Zielvektor als Regeldifferenz. Im zweiten State erhält er die Differenz aus zurückgelegter relativer Distanz und Betrag des Zielvektors. Überschwinger versuchen wir zu vermeiden, indem die Regelparameter P, I und D so "ausgelegt" (rumprobiert, bis es akzeptabel war) wurden, dass ein sanftes Anfahren und Stoppen erfolgt. Den Augenblick des Erreichen des Zielpunktes ermitteln wir, indem wir schauen, ob der Betrag der Stellgrößen beider Motoren in Summe einen gewissen Wert unterschreitet und auch der Betrag der zuletzt erfassten Fahr- und Drehgeschwindigkeit unter einem bestimmten Wert liegt. Dann geben wir das Signal "Ziel erreicht".
Das funktioniert, ist aber nicht gerade sehr genau und schön. Leider haben die Getriebe unserer Motoren ein bisschen Spiel, sodass ein exaktes Ausregeln der Position und des Winkels nur schwer zu erreichen ist. Die Strecke selbst ist also leider nicht stationär genau. Da würde ich evtl. noch gerne irgendwie gegenregeln.
Insgesamt wüsste ich gerne, ob dieses Vorgehen schon der Königsweg ist, oder ob es da noch bessere Algorithmen zur Erfassung des Ereignisses "Ziel erreicht" gibt.
Danke
Viele Grüße,
Hendrik