Liste der Anhänge anzeigen (Anzahl: 2)
Kugelroboter
Hallo,
nachdem ich mich schon mal mehr oder weniger erfolgreich mit dem Thema "Balancieren" beschäftigt habe, wollte ich dieses mal einen Roboter bauen, der in zwei Dimensionen das Gleichgewicht hält.
Ich habe also einen Roboter gebaut, der auf einer Kugel (Gymnastikball, ca. 40cm Durchmesser) balanciert. Er besteht fast nur aus einem omnidirektionalen Antrieb und Elektronik.
Um das Gleichgewicht halten zu können, muss er natürlich wissen, wo unten ist. Dazu hat er einen zweiachsigen Beschleunigungssensor (ADXL322) und zwei Gyros (ENC03R). Die Daten der Sensoren filtere ich im Moment noch mit einem Komplementärfilter, das soll aber mal ein Kalman-Filter werden.
Die beiden Balancier-Dimensionen (links/rechts und vor/zurück) werden unabhängig voneinander gesteuert.
Außerdem habe ich noch eine Fersteuerung für den Roboter gebaut, sodass man ihn gezielt in eine Richtung steuern kann. In dieser Fernsteuerung befindet sich ebenfalls ein Beschleunigungssensor, sodass man sie nur in die Richtung kippen muss, in die der Roboter fahren soll.
Das Balancieren funktioniert ganz gut, man muss nur aufpassen, dass der Roboter nicht zu schnell wird, weil er sonst irgendwann nicht mehr schnell genug reagieren kann. Die Funkverbindung zwischen der Fernsteuerung und dem Roboter habe ich mit dem RFM12-Funkmodul gebaut.
Geregelt wird der Roboter mit zwei PID-Reglern, jeder für eine Achse.
Auch die Reglerparameter können über die Fernsteuerung verändert werden. (Fernsteuerung ist vielleicht der falsche Begriff, eigentlich besteht sie nur aus einem Display, einem Funkmodul und etwas Elektronik.)
Während der Roboter balanciert, kann man sich am PC anzeigen lassen in welchem Winkel er gerade meint zu stehen, sodass man den Filter und Regler gut einstellen kann.
Ein kleines Video gibts auch.
Allerdings ist mir noch nicht eingefallen wofür so ein Roboter gut sein könnte. Es macht zwar Spaß ihn zu steuern und es sieht auch lustig aus, wenn er auf dem Ball herumhüpft, aber richtig sinnvoll scheint er nicht zu sein.
Gruß,
Jan
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe noch ein wenig weiter gebastelt. Der Roboter hat jetzt an den Achsen Lochräder, sodass er erkennen kann, wann er zu schnell wird. Die Auswerteelektronik fehlt noch, ich kann deshalb noch nicht sagen, ob er dadurch besser balanciert.
Zitat:
Damals hatte ich als Amphibien Roboter gedacht. Also Wasser und Grund, aber ich denke es dürfte keine Gummiball sein, weil schon kleine Sprünge sind tödlich.
Das verstehe ich nicht richtig. Ein Roboter der auf einer Kugel auf dem Wasser balanciert? Oder "nur" auf dem Wasser und dem Grund normal (ohne balancieren) herumfährt?
Ich habe auch Bilder der Fernsteuerung gemacht. Das Display ist von Pollin (120346), der Rest ist die standart µC Beschaltung + RS232 und RFM12.
Liste der Anhänge anzeigen (Anzahl: 2)
Ich bin jetzt mit der Auswertung der Radsensoren fertig. Der Roboter weiß also wie schnell er fährt. Leider bringt das bis jetzt nicht besonders viel, das liegt daran, dass die Geschwindigkeiten nur mit einer kleinen Verzögerung gemessen werden. Jedesmal wenn die Lichtschranke ein Loch meldet, wird die Geschwindigkeit aktualisiert. Da aber nur 16 Löcher in der Scheibe sind, dauert das selbst bei der Höchstgeschwindigkeit immer noch länger als ein Regeldurchlauf. Leider fehlt mir auch die Richtungserkennung, ich nehme als Laufrichtung immer die, mit der die Motoren im Moment angesteuert werden. Da aber die Motoren nicht sofort auf Richtungsänderungen reagieren, stimmt das nicht immer. Außer zwei Lichtschranken pro Rad fällt mir gerade keine Lösung ein. Da bei meinen Lochrädern aber die Löcher kleiner sind als die Zwischräume dazwischen, müsste ich wahrscheinlich neue machen.
Außerdem habe ich noch ein Problem:
Ich habe mir mal die Daten der Sensoren auf dem PC anzeigen lassen, einmal im Stillstand, einmal beim Balancieren. Wenn die Motoren aus sind, liefert die Sensorplatine einen sehr genauen Winkel. Sobald der Roboter balanciert, habe ich ein sehr starkes Rauschen auf allen Sensoren (ACC-Sensor und Gyro) und deshalb auch auf dem berechneten Winkel.
Da meine Abtastgeschwindigkeit beim Balancieren sehr langsam ist, könnte es natürlich auch sein, dass der Winkel sich einfach so schnell verändert. Schneller kann ich leider nicht abtasten, weil der Roboter mit dem Balancieren sehr beschäftig ist.
Allerdings glaube ich eher, dass es Rauschen ist, weil die Gyros teilweise sehr große Signale liefern, obwohl die Winkelgeschwindigkeit beim Balancieren ziemlich klein bleibt.
Eigentlich erstaunlich, dass der Roboter überhaupt balanciert.
Liste der Anhänge anzeigen (Anzahl: 1)
Akkus sind noch relativ voll, Lehrlaufspannung so um 7,7V. Wenn ich nur einen Akku benutze, einen Motor schnell laufen lasse und ihn so stark blockiere, dass ich noch keine Angst um die Radbefestigung habe, bricht die Spannung auf ca. 7,4-7,5V ein. Laufen alle Motoren gleichzeitig los, ohne blockierung, geht die Spannung kurz runter, so etwa auf 7,2V.
Wenn ich beide Akkus benutze sollte die Spannung noch höher bleiben. Angeblich kann ein Akku einen Strom von 40A liefern (behauptet der Hersteller, aber die übertreiben manchmal etwas), zusammen also 80. Sollte reichen.
Zitat:
Wegen "Da meine Abtastgeschwindigkeit beim Balancieren sehr langsam ist," habe ich irgendwie geschlossen, dass du das Balancieren im Programmcode abgestellt und dadurch eventuell irgendwelchen für die Messung relevanten Code geändert hast.
Der Code für die Messung verändert sich dadurch nicht, nur der Interrupt fürs Balancieren springt eben öfter dazwischen, sodass ich die Werte nicht mehr so schnell hintereinander bekomme wie sonst.
Zitat:
Was passiert denn, wenn du die Sensorplatine mechanisch von den Motoren trennst und nur die Sensorplatine in der Hand bewegst.
Es sieht dann deutlich besser aus, fast keine Störungen mehr. Das was noch übrig bleibt kommt wahrscheinlich von meiner Handbewegung.
Ich habe die Sensorplatine wieder eingebaut und das Balancieren gestartet. Der Roboter fuhr dabei aber nicht auf dem Ball, sondern lag verkehrt herum auf dem Tisch. Die Sensoren haben noch ein paar Schwankungen, aber der berechnete Winkel ist wirklich deutlich besser (Bild). Dass er nicht mit den Beschleunigungssensor übereinstimmt liegt daran, dass der Roboter nicht damit klar kommt, dass er verkehrt herum liegt.
Vielleicht ist das "Rauschen" wirklich nur das Balancieren.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
das angehängte Bild sollte klären was ich meine. Also mit Winkelgetriebe nur Radachse um 90° Grad drehen.
Grüß
Paul