PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Balancierender Roboter ohne komplizierte Filter



Unregistriert_
25.11.2014, 19:13
Hallo,

für ein externes Projekt der Schule möchte ich einen balancierenden Roboter bauen. Ich habe schon einige Jahre Erfahrung mit dem Programmieren von Mikrocontrollern (AVR, ARM). Allerdings dürfen wir für dieses Projekt nur einen Arduino benutzen aber daran soll es nicht scheitern. Erfahrung mit der Regelungstechnik für die Motoren habe ich schon durch meine Ausbildung. Was mir allerdings schwer fällt ist die Auswertung des Gyros und des ACC. Im Internet lese ich immer wieder dass man hierfür einen Kalman Filter benötigt, da ich aber keine Ahnung von diesem Themengebiet habe möchte ich nachfragen ob es auch einfachere Wege gibt (mit Gyro+ACC, kein Abstandssensor). Der Roboter muss nicht super präzise stabilisiert werden, er sollte nur stehen bleiben und nicht umfallen wenn man ihn wegstoßt.

Es wäre super wenn Ihr mir ein paar Vorschläge machen könnt wie man das am besten lösen kann und ob es überhaupt möglich ist.

Gruß

HaWe
25.11.2014, 19:44
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/viewtopic.php?f=70&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!
:cool:

Unregistriert_
26.11.2014, 13:29
Hallo HaWe,

vielen dank für die schnelle und ausführliche Antwort. Damit hätten sich meine Fragen fürs erst einmal erledigt.

Gruß

Unregistriert
26.11.2014, 15:26
Sorry, aber eine Frage habe ich noch.
Was für Motoren eignen sich am besten? Ich habe die EMG30 gefunden, diese kommen mir aber ein bisschen groß vor. Gibt es eine etwas kleinere Alternative?

Gruß

HaWe
26.11.2014, 15:56
kommt ntl auch auf die benötigte elektrische (und mechanische) Leistung an und die notwendige Drehzahl - und wie sie mechanisch verbaut werden sollen oder müssen.
wenn Motoren im Bereich 600-2000 mA (Leerlauf-Stalling) mit etwa 40-50Ncm Drehmoment (ca. 3 U/s Drehzahl an der Antriebsachse) funktionieren:
Nimm die Lego-Motoren, ich finde, sie sind durch ihre eingebauten Rotationsencoder (=Quadraturencoder, max. 0,5° Auflösung an der vorderen Achse) ideal für solche kleinen Modelle!

29374
auf dieser Seite findest du auch die Pinbelegung des exzentrischen RJ11-Steckers (Nase einfach abschneiden). Sie laufen übrigens mit 7-12V, die Encoder brauchen 3.3 bis 5V.
http://trivox.tripod.com/lego-nxt-motor-input-output.html

mit Fernsteuerung:


http://www.youtube.com/watch?v=7OfJwG0EhBU
ab 4:33 !!
http://www.youtube.com/watch?v=7OfJwG0EhBU
Programm in einer Art C-ähnlichem "Dialekt": http://www.hitechnic.com/file.php?f=786-HTWayC.nxc

oder hier, nicht ferngesteuert, sondern als Linienfolger:


http://www.youtube.com/watch?v=5fNYDkjgO4M