Hallo,
ich möchte einen balancierenden Roboter bauen. Der Roboter soll auf 2
Rädern stehen, die natürlich seperat angesteuert werden. Somit kann der
Roboter nur noch nach vorne oder hinten fallen. Um dies zu messen würde
ich einen Kreiselsensor (Gyroskop) verwenden. Die Regelung würde ich
dann über einen Atmega8 machen wollen.
Nun bin ich mir bei 2 Sachen noch unschlüssig. Es wäre doch am
einfachsten die Räder getrennt über eine H-Brücke anzusteuern? Reicht
der Kreiselsensor aus um das Kippen zu bemerken? Oder muss ich einen
Beschleunigungssensor nehmen?
Danke im Voraus.
Gruß Chris
Es gibt im Netz genug Info über Segway-Nachbau zu finden, ich denke da
wirst Du die besten Antworten dazu erhalten. Auch hier gibt es was dazu
zu finden.
Beim Segway verwendet man ja beide Sensoren, da man ja beschleunigen
möchte wenn man sich weiter vorlegt. Daher kommt ja meine Frage ob der
Kreiselsensor reicht. Ich habe mir ja auch schon ein paar sachen
durchgelesen, auch über das inverse Pendel, aber bin mir halt nicht
sicher.
Du musst ja nicht beide Räder getrennt ansteuern um zu balancieren -
ausser du willst noch steuern um Kurven zu fahren.
Gibt unzählige solche Projekte im Netz, Google mal wieder.
> Beim Segway verwendet man ja beide Sensoren, da man ja> beschleunigen möchte wenn man sich weiter vorlegt.
Das weißt aber nur du.
Dem Segway ist das egal. Der versucht seinen Fahrer im Gleichgewicht zu
halten, indem er sich selber unter den Fahrer zu platzieren versucht.
Stehst du ruhig und aufrecht auf einem Segway, dann macht der genau das,
was du auch von deinem Roboter haben willst: Er balanziert dich aus.
Hallo,
es werden 2 Sensoren benötigt ein Gyro und ein Beschleunigungssensor.
Mit einen Gyro kann ich nicht die Lage erkennen. Natürlich könnte man
mit dem Gyro ein Integral bilden das läuft aber mit der Zeit weg.
Gruß
Uli
Hallo Chris,
Chris_Specht schrieb:> Um dies zu messen würde> ich einen Kreiselsensor (Gyroskop) verwenden.
Tja das ist so eine Sache. Grundsätzlich kann ich dir verraten, dass ein
Gyro nicht ausreichend ist. Du benötigst immmer die Kombination aus
Beschleunigungssensor und Gyroskop. Diese Kombination ist auch als 'IMU'
bekannt. Geeignete Kombinationen gibt es u.A. auf Sparkfun.de bzw.
deutschen Vertretern. Zur 'Datenverarbeitung'. Die ist leider alles
andere als trivial. Fester Bestandteil ist zur korrekten Lageerkennung
(das komplexeste am ganzen Segway) der sog. Kalmanfilter.
http://en.wikipedia.org/wiki/Kalman_filter
Leider ist's nicht einfach als es aussieht. Du hast einige
Grundproblematiken:
1. Gyroskope sind zu unempfindlich, rauschen brutal und verändern ihre
Werte je nach Temperatur. Auf Grund dieser 'Mängel' brauchst du noch
einen Beschleunigungssensor. Der misst die Erdbeschleunigung mit -
daraus kann man auch einen Winkel errechenen. Zur Unterstüzung nimmt man
aus dem Gyroskop die Integration über die Zeit dazu.
2. Auch der Beschleunigungssensor rauscht ein bisschen und driftet über
der Temperatur - aber das Hauptproblem ist, dass zwar die gemessenen
Werte (Winkel) sehr gut sind, aber die Beschleunigung (die
Ausgleichsbewegung des Roboters) die gewünschte zu messende
Erdbeschleunigung total verfälschen.
Der Kalmanfilter bekommt das alles glücklicherweise in den Griff. Sowohl
das Rauschen, als auch das Driften wird gut wegkompensiert. Ist der
Kalmanfilter gut angepasst kommen da zuverlässige Winkel raus.
Hier is eine Implemention mit Quellcode zu finden
(http://diydrones.com/profiles/blogs/705844:BlogPost:23188) Hier
allerdings für noch einige Achsen mehr (Modellflug). Sowas brauchst du
dringendst auch.
Dein nächstes Problem ist der Regelungsalgorithmus. Auch das ist full
overdose Mathe: http://de.wikipedia.org/wiki/Regler#PID-Regler
Um den kommt man leider auch nicht herum.
Es ist deutlich komplexer als man annimmt, dass so ein Segway erstmal
steht geschweige denn in die Richtung fährt die man gerne hätte.
Es sollte definitiv nicht dein erstes Projekt mit AVR sein - ansonsten
wird das ein ziemlich harter Brocken.
Du brauchst in jedem Fall 2 H-Brücken - ergo für jeden Motor eine
H-Brücke.
Kann es sein, dass du aus dem Allgäu kommst ?!
Hallo,
nein ich komme nicht aus dem Allgäu.
Das ist nicht mein erstes Projekt mit AVRs bzw. Regelungstechnik. Die
Frage mit den Sensoren kam mir, da ich schon beide Varianten gesehen
habe. Sprich eine mit einem Kreiselsensor und Beschleunigungssensor und
auch eine nur mit einem Kreiselsensor.
Das mit dem Kalmanfilter oder Komplementärfilter habe ich auch schon
alles gelesen. Mir ist auch klar, dass dieses Projekt nicht innerhalb
eines Tages realisierbar ist.
Gut dann werde ich mich mal nach passenden Sensoren umschauen.
Danke schonmal für die Ratschläge!!
Gruß
Chris_Specht schrieb:> Die> Frage mit den Sensoren kam mir, da ich schon beide Varianten gesehen> habe. Sprich eine mit einem Kreiselsensor und Beschleunigungssensor und> auch eine nur mit einem Kreiselsensor.
Das kann ich mir beim besten Willen nicht vorstellen. Ich habe mich im
Rahmen einiger Studienarbeiten sehr intensiv mit Gyroskopen und
Beschleunigungssensoren und deren Kombinationen im Hinsicht auch eine
IMU beschäftigt. Ich habe dabei auch die Integration des Gryroskops über
die Zeit zu filtern und zu verbessern. Es ist trotzdem nicht
ausreichend. Das Integral rennt dir sofort weg. Ein
Beschleunigungssensor alleine kann rein physikalisch überhaupts nicht
funktionieren - nur in einem näherungsweise statischen / ruhenden mit
reiner Winkeländerung und keiner transversalen Bewegung versehenen
System (was der Segway beim besten Willen nicht ist) kann man damit
Winkelmessung betreiben. Beim Segway bilden sich so erfahrungsgemäß sehr
schnell oszillierende Status (ja das schreibt man so).
Chris_Specht schrieb:> Das mit dem Kalmanfilter oder Komplementärfilter habe ich auch schon> alles gelesen.
Ja aber mit Sicherheit nicht verstanden. Du würdest dich wundern, was
ich schon alles 'gelesen' habe. Glaub mir - das ist nicht so einfach
(der Kalmanfilter erst recht nicht). Die wenigsten Leute die den
Kalmanfilter verwenden verstehen ihn auch. Ich kenne viele viele
Projekte in denen mit Cope 'n Paste gearbeitet wird. Unter anderem
findet man sehr oft die von mir bereits gelinkte
Kalmanfilterimplementierung. Ich sage immer - ich darf fremden Code
verwenden wenn ich ihn selber auch schreiben kann. Das alles gilt auch
für sämtliche Libraries in C oder Äquivalentes ... Wer nicht mal 'von
Hand' eine ADC auslesen kann, der darf dann auch nicht adc.h verwenden.
Derjenige hat weder verstanden wie es geht noch kann er ansatzweise
Debuggen.
Chris_Specht schrieb:> Das ist nicht mein erstes Projekt mit AVRs bzw. Regelungstechnik.
Die Sache ist die - was für eine Regelungstechnik. Ich hatte an der Uni
2 ganze Semester lang Regelungstechnik und hatte gefühlt hinterher ein
Basis mit der man Arbeiten konnte. Bis man das dann aber umsetzt und für
den Segway vernünftig aufbaut wird einige Zeit vergehen. Im Internet
finden sich oft Projekte mit 'interessanter' bis mangelhafter
Regelungstechnik die dann doch irgendwie funktioniert aber auch
irgendwie nur so lala und wenn's dann mal kalt wird dannn fällt der
Segway um ... Nur weil man den Wikipediaartikel gelesen hat kann man
noch lange keinen PID Regler vernünftig aufbauen. Ich will nicht sagen,
dass es sonderlich komplex oder unmöglich ist, aber man muss es einfach
vernünftig realisieren und es bedarf viel Zeit und Geduld um sowas
ordentlich zu machen.
Chris_Specht schrieb:> Mir ist auch klar, dass dieses Projekt nicht innerhalb> eines Tages realisierbar ist.
Das ist schonmal ein sehr guter Ansatz.
Chris_Specht schrieb:> Gut dann werde ich mich mal nach passenden Sensoren umschauen.http://www.watterott.com/de/ArduIMU-Sensor-Board-Six-Degrees-of-Freedom-Main
oder
http://www.watterott.com/de/IMU-6DOF-Razor-Ultra-Thin-IMU1
Ersteres ist eher zu empfehlen - hatte ich auch schon zu diesem Zwecke
im Einsatz (Segway).
Watterott.com hat den Vorteil, dass es Produkte von Sparkfun vertreibt -
dadurch entfallen hohe Versandkosten und Probleme mit dem Zoll.
Chris_Specht schrieb:> Danke schonmal für die Ratschläge!!
Sei mir nicht böse - ich habe sicher oft eine recht harsche Meinung aber
ich möchte Menschen nur vor den Fehlern bewahren die ich teilweise
selbst gemacht haben. Ich will dich nicht entmutigen oder runter machen
- ich will dir nur vor Augen führen, dass das kein Nebenbeiwitzprojekt
ist. Ich kenne es nur allzu gut, dass man sich einen kleinen 'overload'
aufhalst und sich selbst überfordert. Hinterher ist man nur frustriert,
das Projekt liegt in der Ecke und die 200€ die man investiert hat auch.
So nebenbei noch ein paar Worte zu den Motoren. Da musst du ein bisschen
aupassen. Ich hatte damals mit Conrad Getriebemotoren (9€-25€)
angefangen - das Getriebe ist mir nach ein paar Stunden in einzelteilen
ins Gesicht geflogen gekommen (obwohl Metallgetriebe). Nur so eine
kleine Warnung - ich gebe zu unser Segway ware mit knapp 7kg auch ein
Schwergewicht.
Hallo Michael,
besten Dank für deine Kommentare, sie send sehr konstruktiv. Natürlich
habe ich das mit dem Kalmanfilter z.B. nicht 100%ig vertsanden, jedoch
sehe ich mich in der Lage es zu verstehen. Das nötige Grundwissen und
den Spaß daran neues zu erlernen habe ich, denke ich mal ;-).
Mir geht es derzeit mehr darum, dieses Projekt einzustufen. Es soll
nämlich auch eine Art Studienarbeit mit 2 Personen werden. Daher
informieren wir uns gerade etwas über das ganze, ob es machbar ist in
einem beschränkten Zeitraum.
Ein "Neubau" eines solchen Roboters fällt da wohl raus, da wir die Sache
mit den Sensoren und der Software nicht so schwierig eingeschätzt
hatten.
Daher tendieren wir derzeit für einen NXT von Lego. Dafür gibt es einen
Kreiselsensor und interaktive Motoren, die einen Rotationssensor haben.
Damit können wir uns auf die reine Software konzentrieren und ggf. noch
optionale Funktionen einbauen falls wir rechtzeitig fertig sind.
Tag zusammen,
ich taste mich gerade an einen Quadrocopter. Auch hier werden ja Gyros
und Beschleunigungssensore benötigt.
Nur mal zum Verständnis: Die Daten vom Gyro summier ich auf und erhalte
ja dadurch einen Winkel der angibt, wie weit ich von der
Ausgangsposition weg bin. Natürlich ist dieser Winkel ferhlerbehaftet
durch numerische Integration und Drift vom Sensor.
Der Beschleunigungssensor gibt mir seinen maximalen Wert, wenn ich
parallel zur Erdoberfläche bin und dieser Wert wird kleiner, wenn ich
den Sensor kippe.
Jetzt würde ich einen Komplementärfilter nehmen. Den Gyrowert
aufsummieren, mit einem Hochpass filtern und zum Beschleunigungssensor
(durch Tiefpass gefiltert) addiren. Diese Summer wäre dann ja meine
Winkelabweichung.
Sind grundlegende Fehler in meinem Gedankengang?
Gruß
Quadrocopter schrieb:> Sind grundlegende Fehler in meinem Gedankengang?
Ja... was hat ein Quadrokopter mit diesem Thread zu tun? Mach doch bitte
einen eigenen auf mit passendem Titel..
Hallo zusammen,
ich arbeite auch gerade an einem balancierenden Roboter. Ich nutze einen
Beschleunigungssensor um die Winkelabweichung zu messen und einen
Gyro-Sensor um die Winkelgeschwindigkeit zu messen. Die Position, also
Winkelabweichung, regele ich über einen PD-Regler, was auch soweit
klappt.
Mein Problem ist das Driften des Gyros. Die Winkelbeschleunigung regele
ich über einen PI-Regler aber das Integral bzw. die Summe läuft mir
immer weg wegem dem Rauschen des Gyros. Nun weiss ich nicht so recht wie
ich das in den Griff bekommen kann.
Ist die Idee mit der Kaskadenregelung, also PD für Winkel und PI für
Winkelbeschleunigung ok oder sollte ich einen anderen Ansatz wählen?
Gruß Manuel
Hi Manuel,
ich denke das genau für diesen Zweck der oben erwähnte Kalman-Filter
eine sinnvolle Lösung wäre. Ob deine Regelung auch funktionieren würde
kann ich dir leider nicht sagen.
Viele Grüße