Hallo an alle Beitragsleser, ich moechte einen zweiraedigen autonomen Roboter bauen, der fuer jedes Rad einen eigenen Antrieb hat. Ich will dazu einen Arudino Micro oder Arduino Uno verwenden. Da die beiden Raeder von jeweils einem Motor angetrieben werden, will ich mit einer PI-Rueckkopplung sicherstellen, dass diese beiden Raeder mit der gleichen Geschwindigkeit fahren, wenn der Roboter geradeaus fahren soll. Dafuer habe ich einen Code mit der Arduino-IDE geschrieben, den ich als notepad diesem Beitrag angehaengt habe. Ich habe ihn erfolgreich debuggt, das heisst er ist frei von syntaktischen Fehlern. Aber ich bin mir nicht sicher, ob er auch semantisch richtig ist. Das heisst, ich weiss nicht, ob ich die PI-Regelung richtig implementiert habe. Koenntet ihr das bitte ueberpruefen. Ich habe den Code kommentiert. Freundliche Gruesse, Berus
Das mag jetzt eine blöde Frage sein, aber warum willst du das überhaupt? In unserem Roboterprojekt hatten wir Drehencoder an den Rädern, mit denen wir Odometrie (dead reckoning) gemacht hatten. Daraus ergab sich dann eine Position, und die haben wir geregelt. Schließlich war es uns doch scheißegal, wie die Motoren sich drehen - wichtig ist die Position.
Wenn die Raeder an einer Achse befestigt sind und diese von einem Motor angetrieben wird, dann haben die beiden Raeder mit Sicherheit auch die gleiche Geschwindigkeit. Wenn die beiden Raeder unabhaenig voneinander betrieben werden und sich der Roboter nach links dreht, dann dreht das rechte Rad schneller als das linke. Danach soll der Roboter wieder geradeaus fahren. Wie soll er das machen, wenn die Raeder unterschiedlich schnell drehen. Fuer soeinen Fall benoetigt man doch ein System, dass die beiden Raeder synchronisiert, oder etwa nicht? Bitte berichtige mich, wenn ich falsch liege.
Claude J. schrieb: > Wie soll er > das machen, wenn die Raeder unterschiedlich schnell drehen. Fuer soeinen > Fall benoetigt man doch ein System, dass die beiden Raeder > synchronisiert, oder etwa nicht? genau das will er doch machen.
Ich siehe in der code dass du keine encoder (pulse/umdrehung) doch einen tachogenerator (drehsgeschwindigkeit) verwendet. Damit werden die kleinste fehler von tacho /adc mit in die Regelung genommen. Auch ist die erzeugte Spannung von diese Tacho sehr niedrig bei kleine Drehzahlen. Eine identische Geschwindigkeit ueber das ganse Drehzahlbereich kannst du so nicht regelen. Selbst bei perfecte Kalibrierung und Code integrieren die Fehler sich. Besser fur eine Differential Robot sind wheelencoder. Diese geben X-pulse/umdrehung. Damit regelst dus Geschwindigkeit, aber auch odometrie ist dan moglich.
S. R. schrieb: > wichtig ist die Position. Genau. Annahme: Beide Antriebsmotoren haben exakt die gleiche Drehzahl. Dann läuft der Robi nur dann exakt geradeaus, wenn alles ideal ist. Gleicher Raddurchmesser kein Schlupf der Räder ebener Untergrund.
Bei diesen Roboterprojekten geht es unter anderem darum, die Grenzen dieser Regelung zu erkennen. Schlupf ist jedenfalls der größte Störfaktor, wenn der Roboter keine weiteren Anhaltspunkte hat, als nur die beiden Odometrie Sensoren. Spätestens wenn man Kurven fährt, beschleunigt und bremst, muss man berücksichtigen, wie gut die Räder am Boden haften. Leider ändert sich das je nach Boden und Verschmutzungsgrad. Zwei weitere Faktoren, für die man üblicherweise keine Sensoren hat. Also wenn der Roboter nur mit Odometrie Sensoren vom Wohnzimmer aus ins Bad fährt, umdreht und dann in der Kühe vor dem Herd zum stehen kommt, kann man schon sehr zufrieden sein.
Stefan U. schrieb: > Zwei weitere Faktoren, für die man üblicherweise keine Sensoren hat. Jede Maus auf dem Schreibtisch kann das und hat dafür einen Sensor. Unmöglich scheint es nicht zu sein ;-)
Reinhard #. schrieb: > Dann läuft der Robi nur dann exakt geradeaus, > wenn alles ideal ist. Stefan U. schrieb: > Schlupf ist jedenfalls der größte > Störfaktor, wenn der Roboter keine weiteren Anhaltspunkte hat, als nur > die beiden Odometrie Sensoren. Mag ja sein, dass alles irgendwo seine Grenzen hat, aber er hatte doch gefragt ob die Regelung korrekt implementiert ist. Aus meiner Sicht sollte die so funktionieren. Jan H. schrieb: > Selbst bei perfecte > Kalibrierung und Code integrieren die Fehler sich. Warum sollen sich die Fehler integrieren? Abweichungen der Sensoren fuehren zu Abweichungen der Raddrehzahlen, aber ueber die Zeit integrieren wird sich da nichts, denke ich. Und da der ADC immer der Gleiche ist, sind auch die ADC Fehler R/L gleich.
Wolfgang schrieb: > Jede Maus auf dem Schreibtisch kann das und hat dafür einen Sensor. > Unmöglich scheint es nicht zu sein ;-) Nein, Maus kann keine Drehung um die eigene Achse detektieren, nur die Bewegung. Für so etwas wären 2 Bewegungssensoren notwendig.
Was spricht denn gegen einmal laufen lassen ? Das Wichtigste ist eine Debugschnittstelle, bei der man waehrend dem Betrieb Daten entnehmen kann, sich ueber die Parameter informieren, und Parameter aendern kann. Dagegen ist ein kleiner Regler trivial. Schreib mal ein Interface, das ontarget Debugging ermoeglicht. Diesen muss natuerlich ins Konzept passen. Es duerfte klar sein, dass mit Breakpoints nichts ist...
Zuallererst fuer die vielen wohlgemeinten und konstruktiven Beitraege. @svenska: dead reckoning/odometrie ist ein anderes Kapitel, dem ich mich spaeter widmen will. @Jan Heynen: ich moechte je einen Wheelencoder an die Raeder befestigen. Diese liefern mir ein Spannungssignal, stellvertretend fuer die Radgeschwindigkeit, welches in einen Wert von 0 bis 1023 umwandelt. Dieses soll von dem PI-Regler verwendet werden, um die Geschwindigkeiten zu synchronisieren. @Reinhard: Schlupf sollte fehlen, und die Raeder haben den gleichen Radius. Nur der Boden kann manchmal seine Oberflaechenbeschaffenheit aendern. Dies u.a. soll der PI-Regler ausgleichen. @Stefanus: tatsaechlich geht es mir in erster Linie um die Synchronisation der beiden Raeder und nicht um Odometrie. Genau, und wenn Schlupf oder durch Schmutz oder eine eisige Oberflaeche entstehen sollte, dann soll das der PI-Regler kompensieren. Ehrlich gesagt, soll der Roboter mehr koennen als nur die paar Meter vom Wohnzimmer ins Badezimmer zu fahren. Er soll auch Hindernisse erkennen und umfahren bzw. nicht gegen etwas stossen. @Wolfgang: da hat Wolfgang vermutlich Recht. @vorticon: danke fuer die Beantwortung meiner Frage :). Bezueglich der Fehler wegen der ADC, denke ich genau so wie du. Aber das hast du mir erst begreiflich gemacht bzw. kam diese Angelegenheit als Problem fuer mich nicht in Betracht. @Marc Vesely: leuchtet ein @Noch nicht Rentner: warte gerade noch auf Bauteile. Deshalb habe ich es einfach noch nicht getestet. Und es ist mein erstes Arduino Projekt, deshalb wollte ich mal wissen, wie ich mich bei dem Programmcode fuer den PI-Regler angestellt habe. Bisher hatte ich meistens Denkfehler aufgrund von Verstaendnismaengeln bei solchen technischen Sachen. Deshalb bin ich davon ausgegangen, dass es wieder so ist. Ok, vielen Dank an alle. Ich probier den Code aus sobald ich meine Bauteile habe. Freundliche Gruesse, Berus
vorticon schrieb: >> Selbst bei perfecte >> Kalibrierung und Code integrieren die Fehler sich. > > Warum sollen sich die Fehler integrieren? Abweichungen der Sensoren > fuehren zu Abweichungen der Raddrehzahlen, aber ueber die Zeit > integrieren wird sich da nichts, denke ich. Und da der ADC immer der > Gleiche ist, sind auch die ADC Fehler R/L gleich. Claude J. schrieb: > @Reinhard: Schlupf sollte fehlen, und die Raeder haben den gleichen > Radius. Nur der Boden kann manchmal seine Oberflaechenbeschaffenheit > aendern. Dies u.a. soll der PI-Regler ausgleichen. In beide fallen wiest der PI regler ueberhaupt nicht das eine Abweichung gibt ! Er bekommt nur die Werte aus den ADC von Geschwindigkeit von beide Motoren. Diese Werte hat eine Abweichung von Ist, und bei jedes neue Durchlauf wird diese "Integriert" für Position. Position ist der Integral von Geschwindigkeit ! Darum sind Wheelencoder besser geignet für Gerade Aus zu fahren. Um sie einen Idee zu geven welche Genauigkeit errreichbar ist siehe mal diese Video an (robot mit Wheelencoder):[link]https://www.youtube.com/watch?v=fp8s_tlwyIY[/link]
Jan H. schrieb: > In beide fallen wiest der PI regler ueberhaupt nicht das eine Abweichung > gibt ! Er bekommt nur die Werte aus den ADC von Geschwindigkeit von > beide Motoren. Diese Werte hat eine Abweichung von Ist, und bei jedes > neue Durchlauf wird diese "Integriert" für Position. Position ist der > Integral von Geschwindigkeit ! Ja, wenn du es so gemeint hast, hast du natuerlich Recht, in der Bewegung wird sich ein Fehler integrieren. Ich habe dich so verstanden, dass du meinst, der Regler werde einen Fehler aufintegrieren.
Um Schlupf zu kompensieren, brauchst du aber Sensoren, die nicht schlupfen.
Meine Frage bezog sich darauf, dass man am Ende die Position regeln möchte und nicht die einzelnen Räder. Wenn die Motoren ungenau arbeiten, dann wird die Positionsregelung (evtl. inklusive Blickrichtung) das schon richten. Unser Roboter fuhr jedenfalls ziemlich genau geradeaus, wenn ich beiden Motoren die gleichen Werte gegeben habe. Einen fixen Korrekturfaktor für eine systematische Abweichung hatte ich auch drin (war unnötig), aber einen Sinn für eine Regelung der Geradeausfahrt sehe ich noch immer nicht. Kann man überhaupt von der Spannung zuverlässig auf die Drehgeschwindigkeit des Motors schließen? Auch bei verschiedenen Lasten (Steigungen) und Batterie-Ladezuständen? Die Reglerparameter ergeben sich ja aus einem Modell des Motors, aber wenn schon die Realität da schwankt... Wenn die Motoren so scheiße sind und es keine zuverlässigen Drehencoder (oder andere Sensoren) gibt, dann könnte man mit so einer geregelten Geradeausfahrt den Roboter möglicherweise kalibrieren (pro Exemplar), aber jede Kurvenfahrt versaut einem dem I-Anteil doch wieder...
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.