Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein Balancierenden Roboter
Hallo alle zusammen,
nach sicher zwei Monaten der Projektphase (mit zahlreichen Fehlversuchen ua. mit dem Beschleunigungssensor) ist es mir nur doch noch gelungen einen (fast 8-[ ) Balancierenden Roboter zu bauen. \:D/
Größe: 15x11x6 (HxBxT) [cm]
Gewicht: 350g (inklusive Akkus)
Räder: 2x Moosgummi 35mm (verbunden über starre welle)
Versorgung: 6xAAA Zellen (zurzeit mit Kabel O:) )
Sensor: GP2D120
uP: Mega8
Treiber: L293D
Material: PMMA (Plexi)
Der Bot besteht im Wesentlichen 3 „Schichten“. Auf der Obersten befinden sich die Akkus, in der Mitte Die Elektronik (uP und Sensor) und ganz unten der antrieb. Eine einfache Übersetzung sorgt für rasches reagieren.
Die Rechenarbeit übernimmt ein Mega8, welcher vom Sharp (GP2D120) Sensor den aktuellen Winkel bekommt und mittels PID Algorithmus den Motor über ein PWM Signal ansteuert. Die Regelparameter können über den UART verändert werden (P, I, D – Anteil, sollwert)
Anbei ein kleines Video um zu sehen woran es noch fehlt. Der Roboter Balanciert eine Zeit lang, jedoch fängt er an zu schaukeln und kann sich nach einer Zeit nicht mehr Regeln.
Weiters misst der ADC des Mega8 nicht genau. Wenn man die konstante (mit Voltmeter überprüft) Versorgungsspannung misst schwanken die Werte des ADC auch um 1-2 Digits.
Ich habe es bereits mit einer externen Referenzspannung versucht, was auch ein besseres Ergebnis gebracht hat.
Wahrscheinlich ist der Sharp Sensor einfach zu langsam (wie schon in diversen Themen diskutiert wurde) für diese Anwendung. Der Loop des Prozessors befindet sicher bei 500uS.
Weiters habe ich versucht den Sharp Sensor „weiter Draußen“ anzubringen, jedoch ohne Erfolg.
Vielleicht könnt ihr mich noch ein paar Tipps geben wie ich dass Regelverhalten verbessern könnte.
Danke im Vorhinein
Anhang:
Bilder (leider Schlechte Qualität aber ich glaube man kann alles erkennen):
Roboter 1 (http://mitglied.multimania.de/llocked/Roboter/bot1.jpg)
Roboter 2 (http://mitglied.multimania.de/llocked/Roboter/bot2.jpg)
Roboter 3 (http://mitglied.multimania.de/llocked/Roboter/bot3.jpg)
Roboter 4 (http://mitglied.multimania.de/llocked/Roboter/bot4.jpg)
Roboter 5 (http://mitglied.multimania.de/llocked/Roboter/bot5.jpg)
Roboter 6 (http://mitglied.multimania.de/llocked/Roboter/bot6.jpg)
Video:
Balancetest (http://www.youtube.com/watch?v=VIM9o34EucU)
Quellcode:
Software (http://mitglied.multimania.de/llocked/Roboter/bot.c)
Mit freundlichen Grüßen
Hallo locked!
Das sieht ja schon sehr gut aus!
Ich habe es leider aus Zeitgründen noch nicht geschafft weiter zu machen, an meinem Roboter.
Ich denke, dass das Problem Deines Roboters ist, dass er nur einen Messwert bzw. nur einen Sensor besitzt!
Interessante Arbeit. Wie ist das bei den Wheel-Balaning-Robots, reicht da ein PID-Regler aus ? Das ganze läuft ja unter inversem Pendel und es sind bestimmt auch ein paar Nichtlinearitäten zu korrigieren.
Fährt der nur auf 2 Rädern? 8-[
Ja, genau, NUR AUF ZWEI RÄDERN!
ja genau, und er hält (ab und zu :) ) die Blance über eine PID Regelung.
mfg
Also ich kann das Video nicht öffnen. Er sagt mir falsche Endung fürs Format aber abspielen kann er es nciht.
Andun
wäre es vlt möglich ein video in mpg zu machen? weil wmv ist unter linux ein problem
gruß fabi
So, habe nun einen *.mpg Datei auch oben.
Leider hat die 7.8 MB, keine Ahnung warum die soviel größer is als die *.wmv?
mfg
Moinsen
Erst mal gratulation dazu das du den zum stehen gebracht hast.
Vielleicht kannst du mir mit deinen Wissen auch weiterhelfen mir bei meinen projekt weiterzuhelfen.
Ich bau mir grad nen stehendes Pendel.
Das kann man sich so vorstellen als ob du deinen Roboter nicht auf Rädern laufen lasst sondern auf nen Schlitten. Den du dann durch Beschleunigen bzw verzögern dazu bringst das Pendel zu balanzieren.
Spater will ich es dann auch ncoh aufrichten lassen usw. Aber erst soll das ding mal stehenbleiben
Die Sache mit dem Winkel des Pendels hab ich vorerst mit nen poti geregelt. (hoffentlich ist das genaugenug) wird sich dann beim ersten test rausstellen :-(
Die Geschwindigkeit und Position und Beschleunigung bekomme ich dann mit Hilfe eines Inkrementalgebers heraus. Der an dem Motor der den schlitten zieht (über Riemen) befestigt ist.
So weit so gut hoff ich mal. Kommen bestimmt noch mehr prob ;-)
Aber vielleicht kannst du mir mit der Regelung weiterhelfen.
Die muesste doch eigentlich genau gleich sein. wär gut wenn ich sie verwenden dürfte.
Mein problem ist auch noch das ich noch keine Ahnung hab was für einen Motor ich da einbauen mus geschweige wie ich diesen ansteuern kann.
Hatte mir es mit PWL vorgestellt.
Aber für nen Beispiel wär ich schon dankbar.
Wie hast du denn die verstärkungsfaktoren deines PD / PID regelers bestimmt.?
Ja denn
danke schonmal
cu
themaddin
01.12.2005, 06:44
ich kann das Video nicht runterladen....
Da kommt immer die Tripod-Seite wo steht das man sich einloggen soll.
MfG
Martin
@themaddin ich habe das gleiche problem. wäre sehr nett wenn du(locked) das noch beheben könntest.
gruß fabi
Hallo locked,
leider kann ich auch nicht dein Video anschauen, wäre aber interessant um eventuelle Tipps geben zu können. Außerdem wäre es gut, die Parameter des Reglers Kp,Kd und Ki zu wissen.
Zudem könntest Du noch einen Versuch in einer durchgebogenen Senke (z.B. Badewanne) machen. Falls da dein Bot gut ausbalanciert, bin ich guter Dinge, dann geht es nur noch um Feinheiten.
Gruß Waste
Bluesmash
01.12.2005, 19:37
wow! "staun" :shock:
genialer bot den du da gebaut hast! was mich erstaunt ist das der kleine motor mit der einfachen übersetzung genug kraft hat den bot so schön zu halten! weiter so!
gruss bluesmash
also wenn ihr das video downloadet könnt ihr es problemlos angucken. bin echt erstaunt von deinem bot man denkt immer er kippt aber er kippt doch nicht O:) . sieht alles sehr gut aus respekt
gruß fabi
@themaddin&fabix
Video runterladen:
Wenn ihr den Link direkt anklickt, geht's nicht.
Wenn ihr bei Firefox "Link Ziel Speicher unter" verwendet, geht's
Gruss,
stochri
Mit Firefox und "Ziel speichern unter" kam bei mir nur eine html-Datei mit 10k Größe an. Erst mit dem Internet Explorer gings.
@locked
sieht doch schon sehr gut aus
gruß Waste
Hallo Waste,
bei mir läuft Firefox 1.6 unter Linux. Man muss bei meinem System die Maus auf den Link sezten und dann mit rechts " Link Ziel speicher unter drücken ". Aber vielleicht ist Firefox für Windows etwas anderst zu bedienen. Keine Ahnung.
Gruss,
stochri
Ja, genauso hab ich es auch bei mir unter Windows gemacht, ging nicht. Erst mit dem IE.
Kein Problem. Durch den Hinweis, dass es bei euch geht, habe ich dann den IE ausprobiert und jetzt hab ich ja auch das Video.
Waste
Bin mir nicht ganz sicher aber ich glaube es wäre für den Schwerpunkt des Roboters besser wenn die Batterie möglichst nah an der Achse liegen würden.
Gruß Solo
@solo
Bin mir nicht ganz sicher aber ich glaube es wäre für den Schwerpunkt des Roboters besser wenn die Batterie möglichst nah an der Achse liegen würden.
Nö. Versuch mal einen Besen auf der Hand zu balancieren. Das ist einfacher, wenn die schwere Seite, sprich der Kopf mit den Borsten oben ist.
Beim "balancierenden Roboter hat" man mehr mit der Massenträgheit als mit dem Drehmoment/Hebelwirkung zu kämpfen.
Es geht daher beim Aufbau daher darum, dass der Roboter möglichst langsam kippt, damit die Regelung mehr Zeit hat dem entgegenzuwirken.
Dafür ist es günstiger, wenn das Gewicht weiter von der Achse weg ist.
Hier gibt es noch einen Thread über balancierende Roboter. In dem findest du da eine Menge Infos zu dem Thema.
NumberFive
02.12.2005, 08:26
Geniales Teil gefällt mir sehr gut.
Wenn ich doch mal wieder zeit für meinen Robi hätte.
Gruß
Hi,
klasse Arbeit was du da gemacht hast, RESPEKT!
Ich hab mich bis her noch nicht mit two wheel bots beschäftigt,
jedoch würde mich eins interessieren...
wie bringt man den guten Bot nun dazu vorwärtz b.z.w rückwärtz zu fahren und dabei noch die Balance zu halten?
Bye Ulli
wie bringt man den guten Bot nun dazu vorwärtz b.z.w rückwärtz zu fahren und dabei noch die Balance zu halten?Wenn man es genau nimmt, ist der Bot beim Vor- bzw. Rückwärtsfahren nicht mehr genau in der Senkrechten!
Beim Vorwärtsfahren muss man kurz nach hinten fahren, damit sich der Roboter nach vorne beugt. Danach kann man erst vorwärts fahren, ansonsten würde der Bot nämlich nach hinten überkippen!
Hi,
ja das hab ich schon mal bei nBot gesehen das er ein stück zurück fährt und danach vorwärtz.
Aber wie hält man beim gerade fahren die Balance? Also welchen Motor beschleunigt man welchen bremst man ohne dabei ne Kurve zu fahren?
bye Ulli
@sommer
der bot hat nur einen motor...
Hi,
der hier schon jedoch habe ich welche mit zwei motoren gesehen und die fahren wie mit vier rädern :-)
Die frage ist wie funktioniert das?!
Bye Ulli
Hallo locked,
ich habe mir das Video und den Code jetzt genauer angesehen. Deine Vermutung, dass der Sharp zu langsam ist, könnte stimmen. Eine Simulation mit geschätzten Daten (da ich die Werte deines Bots nicht genau kenne) zeigen, dass die 40ms Messrate des Sharpsensors schon sehr kritisch sind. Für eine genauere Analyse bräuchte ich aber die genauen Daten deines Bots, wie die Zeitkonstante der Beschleunigung, die Höchstgeschwindigkeit und die Schwingdauer des Bots als Pendel. Eine andere Möglichkeit herauszufinden ob der Sharp zu langsam ist, wäre die Schwingdauer des Bots versuchsweise zu verlangsamen. D.h. den Schwerpunkt weiter nach oben zu verlegen. Dummerweise geht der Abstand des Schwerpunkts nur mit der Wurzel in die Schwingdauer ein, so dass für doppelte Schwingdauer der Abstand vervierfacht werden muss. Aber ein Versuch wäre es ja wert. Wenn es dann funktioniert, liegt es wirklich an der Messrate des Sharp.
Des weiteren hier noch einige Tipps:
1. Den D-Anteil im Code mit 511 anstatt 255 berücksichtigen, da dein max. PWM-Wert 511 ist. Nach der Anpassung muss vielleicht Kd geändert werden.
2. Die Reibung als Offset in der Ansteuerung berücksichtigen: Dazu den PWM-Wert ermitteln, bei dem dein Bot gerade noch nicht rollt (wird vermutlich zw. 100...200 liegen) und den Wert zur Stellgröße des Reglers hinzu addieren. Dadurch wird die Nichtlinearität der Regelstrecke verursacht durch die Reibung etwas kompensiert. Diese Maßnahme könnte vielleicht die Stabilität etwas verbessern.
3. Eine Ursache für die Instabilität ist auch noch, dass dein Regler nur den Winkel ausregelt und nicht noch zusätzlich die Geschwindigkeit oder Position. Nach dem Einschalten und dem ersten Ausregelvorgang wird sich eine zufällige Geschwindigkeit einstellen bei der der Bot senkrecht steht. Diese Geschwindigkeit muss dann beibehalten werden, um den Bot auszubalancieren. Nur per Zufall wird die Geschwindigkeit nach dem ersten Regelvorgang sehr gering sein und der Bot längere Zeit stehen bleiben. Dieses Problem kann nur durch zusätzliches Berücksichtigen der Geschwindigkeit oder Position behoben werden. Falls keine Odometrie vorhanden ist, kann durch eine mathematische Nachbildung des Antriebs und Schätzung der Geschwindigkeit das Problem umgangen werden. Inwieweit das auch in der Realität funktioniert, weiss ich nicht, zumindest in der Simulation hat es gewirkt.
Ähnliches gilt auch für einen möglichen Offset des Sensors, der kann auch durch die Berücksichtigung der Geschwindigkeit oder Position ausgeregelt werden.
4. Die Wiederholrate des Reglers mit 500us macht wenig Sinn wenn die Messrate des Sharp 40ms ist. Aber falls der Sharp kein Signal hat ab wann die neue Messung gültig ist, dann lass es so, sonst gibt es noch eine zusätzliche Totzeit.
Hier noch der Teil des Code mit der Einarbeitung der ersten beiden Tipps. Einen Beispielcode für den 3.Tipp kann ich Dir geben, wenn ich die Daten für deinen Antrieb habe.
yd = (e - ealt)*kd; // D-Anteil berechnen und mit
yd += drest; // nicht berücksichtigtem Rest addieren
if (yd > 511) drest = yd - 511; // merke Rest
else if (yd < -511) drest = yd + 511;
else drest = 0;
yp = e*kp; // P-Anteil berechnen
y = yp + yi + yd; // Gesamtkorrektur
ealt = e; // x merken
if(y>=0)
{
lon;
roff;
}
else
{
//y=-y;
loff;
ron;
}
y = abs(y) + Offset ; //Kompensation der Reibung
if(y>511)y=511;
OCR1A=y;
Ich hoffe das hilft Dir etwas weiter. Wünsch Dir viel Erfolg.
Gruß Waste
Hallo alle zusammen, und herzlichen dank für eure Komplimente O:) .
Nun ja ich überlege, ob ich nicht einen 2.ten Sharp Sensor einbauen soll. Da ich dann quasi „farbunabhängig“ währe, und mir nur ein Differenzsignal aus beiden Sensoren bilden müsste. (wenn 0 dann ist der Bot in der Wage)
Weiter währe noch die AD Wandlung zu bemängeln, habe jedoch zu Zeit keine Lösung für dieses Problem :-k .
Ich habe übrigens aktuelle das C File zum Downloaden bereitgestellt
(da ich mit die Berechnung von P, I, D Anteil zum Teil vom Asuro als Linienfolger abeschaut habe, haben einige Parameter nicht gestimmt: zB. die Abtastrate, die Begrenzungen… :-$ )
Regelparameter: kp=15; ki=30; kd=600;
@Mechi: Ich würde dich gerne helfen, du kannst ja per PN mir schreiben.
PS.:
Ich hoffe es kann nun jeder das Video anschauen. Leider ist es so kompliziert, da ich keinen besseren FTP gefunden habe.
Sonst bitte per PN schreiben, ich schicke das Video gerne via Email.
Mit freundlichen Grüßen Roland
Hallo Roland,
wieviel Grad als Winkel entspricht denn 1 Digit. Wenn das deutlich weniger als 1 Grad ist, dann macht das nichts aus.
Aber ich habe schon gelesen, dass der Sharp ab und zu Ausreisser in der Messung hat. Auf dem DVM zeigt das vielleicht nur 1 bis 2 Digits an, aber in Wirklichkeit sind das vielleicht große Ausreisser. Das wäre eine Erklärung für die plötzlichen Zuckungen deines Bots. Solltest mal mit einem Oszi überprüfen.
Waste
Hallo waste, herzlichen danke für diese wirklich sehr hilfreichen Tipps O:) .
Auf den ersten tipp bin ich sogar selber draufgekommen, wie im einem letzten Post beschrieben, der leider etwas zu spät gesendet wurde. (man soll ich den Codeteil doch besser durchdenken, bevor man ihn übernimmt :oops: )
Den zweiten Tipp werde ich gleich ausprobieren und berichten ob eine Verbesserung merkbar ist.
Womit simulierst du eigentlich? Ich vermute mit Matlab.
Nun ja welche Daten über den Antrieb würdest du benötigen?
Ich wüste eigentlich nur die Übersetzung: 8:50. Daten über den Motor habe ich leider keine, da ich ihn irgendwo ausgebaut hab. Da der Motor mit der Spannung der Akkus (7,2V) sowieso nicht zurecht kommt, (zuwenig) werde ich demnächst einen bei Conrad kaufen, wo ich hoffentlich ein Datenblatt bekommen werde.
Danke
Mit freundlichen Grüßen Roland
Hallo waste,
also 1 Grad entspricht ~~5 Digits, aber wie gesagt, wenn man den Bot wo anlehnt, schwanken die werte (max, min werte) bis zu 5 Digits. Wobei bei der messung einen Konstanten Referenzspannung, der Wert um ca. 1 Digit schwankt.
mfg Roland
Hallo Roland,
ich simuliere mit Scilab/Scicos, ist ähnlich wie Matlab/Simulink, aber Freeware.
Bei den Daten zum Antrieb wäre das Einfachste die Aufnahme der Beschleunigung (Geschwindigkeit über Zeit). Vielleicht mittels Videokamera und Auswertung per Einzelbild, falls keine andere Methode über Odometrie usw. zur Verfügung steht.
Also wenn die Schwankungen der Messwerte nur max. 1 Grad bedeuten, dann glaube ich, kann das die Regelung noch gut verkraften. Zumindest sollte es eine robuste Regelung.
Waste
Hallo,
ich habe nun den Offset getestet und finde es hat sich sehr geringfügig verbessert. Jedoch glaube ich, das die PWM werte im endefekt immer ziemlich groß sind (+ oder - 511) und sich der Offset dadurch nicht so gravierend auswirkt.
Mit freundlichen Grüßen Roland
Hallo Waste!
Wo kann man das denn downloaden, wenn das Freeware ist?
Klingt auch für mich sehr interessant ...
michaelb
02.12.2005, 21:50
Hi Florian,
Google hilft:
http://www.scicos.org/
ich denk mal dass Waste dort sich das Programm gezogen hat!
Gruß Michi
Scilab/Scicos gibt es hier: http://www.scilab.org/
Es ist ein mächtiges Tool. Leider ist die Hilfe nicht so gut für Anwendungen, man sollte sich deshalb schon sehr gut in der höheren Mathematik auskennen.
Waste
michaelb
02.12.2005, 22:03
Ups war doch ne andere Page! Aber sind Scilab/Scicos nicht Produkt und Hersteller?
Gruß Michi
Google hilft:
http://www.scicos.org/Jup, stimmt ... ;o)
War mir nur nicht sicher, ob das so ein bekanntes Tool ist, ich habe noch nie davon gehört ... ich weiß, war nur zu faul! ;o)
man sollte sich deshalb schon sehr gut in der höheren Mathematik auskennen.Oje ... ;o)
Die scicos page geht auch.
Scicos is included in the free, open source, Scilab software package. You can download compiled or source code versions.
Supported platforms: Windows XP, 2000, 98, Linux, Unix, Mac OS X.
Scilab entspricht Matlab und Scicos entspricht Simulink.
Scilab ist also das Mathematik-Programm und Scicos der Simulator.
Waste
michaelb
02.12.2005, 22:54
Hi Waste,
Achso ist das.
Danke!
Gruß Michi
Hi locked,
warum benutzt du nicht einen ADXL Beschleunigungssensor der wäre vom untergrund unabhängig!
Hast du die Stromversorgung des Sharp mal direkt am Sensor mir einen 47µ Kondensator versehen und den Ausgang mit 10n ?
Danach sieht das Signal wesentlich sauberer aus als wie nur direkt angeschlossen. Zudem würde ich eine als zuführung zum Sensor ein Mikrofonkabel verwenden wo der Schirm auf Masse liegt, da das links rechts schalten ziemlich hohe Spannungsspitzen hervorrufen kann und sich das bei nidrigen PWM sehr auf die Stromversorgung auswirken kann!
Kannst du mal Messen mit deinen Oszi:--->
1. Oszi auf AC 5V/Div stellen
2. Messpitze an AD Eingang des Mikrokontroller
3. sharp festen abstand geben damit sich das nicht auf die Messung auswirkt.
4. Motor regelung laufen links / rechts lassen (Simulator programmieren)
5. V/DIV runter schalten bis das Rauschen sichtbar ist
Dann siehst du was dein Sonsorsignal alles unerwünschtes drauf hat.
Bye Ulli
Hallo Ulli,
Also wegen dem ADXL: Das hab ich bereits zur genze ausprobiert, jedoch ohne jeden hauch von erfolg, da der ADXL die Ausgleichbewegung ja auch als Beschleunigung misst. Klar würde es in Kombination mit einem Gyro funktionieren, aber die Digitale Filterung ist mir irgendwie zu komplex und der Preis des Gyro ebenfalls 8-[ https://www.roboternetz.de/phpBB2/viewtopic.php?t=6791&postdays=0&postorder=asc&start=198 (weiter unten).
Das mit der Stromversorgung gefällt mir gut, danke.
Also den 47u direkt auf die Platine des Sharp Sensors anbringen? Und den 10n ebenfalls? oder den 10n direkt am Prozessor Eingang?
Ob ein Mirkofonkabel ebenfalls eine Verbesserung bringt glaub ich eher nicht, da die Platine auf einem Lochraster aufgelötet ist und die Leitungen sowieso quer auf der Platine verlaufen.
Mit freundlichen Grüßen Roland
Hi Roland,
den 47µ direkt auf die Platine des Sharps und die 10n am Eingang des Mikrocontrollers müsste den besten Erfolg bringen.
Am besten du siehst dir die Spannung dabei mit den Oszi mal an, kann sein das du etwas mit den Werten spielen musst!
Eine Parallelkombination aus kleinen C´s mit unterschiedlichen Werten kann auch zur besseren Filterung beitragen 100p || 1n || 10n
Berichte mal über deine Ergebnisse.
Bye Ulli
@locked
Ob ein Mirkofonkabel ebenfalls eine Verbesserung bringt glaub ich eher nicht, da die Platine auf einem Lochraster aufgelötet ist und die Leitungen sowieso quer auf der Platine verlaufen.
Gerade deswegen könnte ein abgeschirmtes Kabel (Mikrofonkabel) für das Signal eine Verbesserung bringen.
Zwischen Ausgang des Sensor und Eingangs-Pin des µC brauchts du ja keine Bauteile, deswegen sollte es eigentlich möglich sein die beiden Anschlüsse mit einem abgeschirmten Kabel zu verbinden.
Falls du das Signal noch durch Kndensatoren glätten willst, werden die parallel und möglichst direkt an den Eingang des µC geschaltet. Das hindert also auch nicht dran Sensor und µC direkt über abgeschirmtes Kabel zu verbinden.
Dünne abgeschirmte Leitung findet man öfter mal in alten Computern zwischen Soundkarte und CD-Laufwerk.
Wenn du ein Oszi hast, würde ich aber erst mal messen ob Störungen da sind und wie die Aussehen.
Hallo,
ich habe nun die Kondensatoren dazugelötet, er steht IHMO etwas stabiler, jedoch sich solche "Ausreißer" immer noch vorhanden. Mit dem Oszi habe ich nichts davon bemerkt (liegt wahrscheinlich an meinem Oszi, welches ich an dieser stelle nicht weiter beschreiben möchte :-& )
Aber es ist immer so ein Spiel mit dem Sollwert, je nach Untergrund anders, ich werde auf alle fälle einen 2ten Sensor bestellen und dann die Differenz bilden.
Mit freundlichen Grüßen Roland
ich habe nun die Kondensatoren dazugelötet, er steht IHMO etwas stabiler, jedoch sich solche "Ausreißer" immer noch vorhanden.
Wenn man einen Besen auf der Hand balanciert sind diese kleineren Ausrutscher ja auch vorhanden.
Bist du denn sicher, dass die überhaupt am Sensor liegen und sich nicht eventuell durch die Regelung oder Progrmmierung oder andere Störfaktoren ergeben?
Hallo,
Also der Bot fliegt eigentlich nicht mehr um, nur eben zuckt er ab und zu schon recht heftig, schafft es aber noch gegen zu regeln. In der Regelung (siehe C File) sehe ich kein Problem, und wie gesagt wenn man die Sensorspannung AD Wandelt und über die Serielle ausgibt, ist ab und zu ein Ausreißer mit bis zu +10 Digits dabei.
Mit freundlichen Grüßen Roland
Vielleicht hilft eine Softwarelösung, Ausreisser einfach per Software ignorieren.
Waste
Nunja, aber wie soll ich das realisieren?
Ich muss ja jeden Istwert sofort verwerten, da der Sensor von Haus aus langsam ist. Und große Änderungen des Istwertes wird es immer geben.
Mit freundlichen Grüßen
Nunja, aber wie soll ich das realisieren?
Ich muss ja jeden Istwert sofort verwerten, da der Sensor von Haus aus langsam ist. Und große Änderungen des Istwertes wird es immer geben.
Gerade weil der Sensor ziemlich langsam ist, ist es wichtig, dass du die Messwerte bestmöglichst aufbereitest.
Wenn der Roboter einen falschen Wert bekommt, dauert es ja entsprechend lange, bis der nächste richtige Wert kommt.
Wenn er den Wert um ein paar Rechenzyklen verspätet bekommt, macht das vermutlich weniger aus, als wenn er zwischendurch falsche Werte bekommt.
Wieviel Grad der Roboter sich tatsächlich zwischen 2 Messwerten neigen kann lässt sich (wenn auch mühsam) berechnen oder messen.
Wenn die Differenz zwischen zwei Messwerten grösser ist, kann also nur ein Messfehler vorliegen.
Ein paar Berechnungen oder Vergleiche mit vorherigen Messwerten sind im Verhältnis zum Messintervall des Sensors schnell gemacht.
10 Digits müssten nach deiner Aussage weiter oben ungefähr 2 Grad entsprechen.
In deinem VideoClip sieht es so aus, als würden die kurzzeitigen Ausreißer mehr als 2 Grad betragen.
Bin eben mehr oder weniger zufällig über die folgende URL gestolpert:http://wiki.atrox.at/index.php/GP2D120
Da wird als Vorteil der Sharp-Sensoren genannt, dass sie relativ farbunabhängig messen und als Nachteil, dass es mitunter einige Ausreisser in den Messergebnissen gibt.
Eventuell ist es dann doch hilfreicher die Ausreisser rauszurechnen, als über einen 2. Sensor weitere einzubringen.
Andererseits ist es bei mehreren Sensoren natürlich auch wieder leichter die Ausrutscher zu erkennen.
Aber eigentlich sind die kurzzeitien Ausreisser ja auch ganz nützlich. Dadurch sieht man wenigstens um was es bei dem balancierenden Roboter geht und wie geschickt dein Roboter die Balance hält. Das macht doch optisch richtig was her.
Stell dir vor die Ausreisser wären nicht da. Dann stellst du jemandem deinen Roboter vor die Nase, der steht ganz ruhig auf dem Tisch und die "jemand" fragt: "Na und, was soll das jetzt"? ;-)
Hallo locked,
welche Referenz verwendest Du für AD-Wandlung ? Intern oder extern ?
Ich habe einen Versuchsaufbau mit einem Atmega8 mit dem man Servos über Potis steuern kann. Es gab ziemlich heftige Srörungen und der ganze Aufbau hat angefangen zu zittern. Dicke Elkos an der Versorgungsleitung und Dämpfungselkos an den ADC Eingängen haben nichts gebracht. Erst als ich die Referenz von intern auf extern umgestellt habe, hat sich das Ganze beruhigt. Zu Sicherheit habe ich noch eine Mittelung von 10 Werten drangehängt.
Jetzt stehen die Werte absolut stabil, die Störungen sind vollständig elimniert.
Gruss,
stochri
Hallo locked,
eine Softwarefilterung der Ausreißer ist nicht ganz so einfach, wie es vielleicht aus meinem Beitrag klingt, aber wenn alles andere schon versucht wurde, dann bleibt nur noch diese Möglichkeit.
Zur Filterung der Ausreißer darfst Du nur die Änderungsgeschwindigkeit, also die Änderung der Änderung des Winkels, auswerten. Bei voller Beschleunigung kann es durchaus vorkommen, dass sich der Winkel innerhalb von 40ms um z.B. +5 Grad ändert. Aber es ist unwahrscheinlich, dass sich in den darauf folgenden 40ms der Winkel dann entgegengesetzt um -5 Grad ändert. Die Änderungsgeschwindigkeit wird vermutlich nur in 1Grad Schritten auftreten können, z.B. +5 auf +4 auf +3 usw. Wie das dynamische Verhalten deines Bots ist, müsstest Du ausmessen und danach die Grenzwerte für die Filterung bestimmen. Ganz ignorieren oder weglassen würde ich die Ausreißer nicht, aber auf den theoretischen Wert begrenzen.
Es gibt so Filter, die das dynamische Verhalten berücksichten, z.B. das Kalman-Filter. Aber das ist etwas kompliziert, da ist man auch gleich beim Zustandsregler.
Gruß Waste
Hallo,
@stochri: Ja das stimmt, das habe ich bereits gemerkt. Die interne Ref. ist wahrscheinlich nur für grobe Messungen gedacht, schade eigentlich. Ich verwende die Externe Ref. Jedoch nur mittels einfachen Spannungsteiler, eine ZDiode währe sicher besser.
@Waste: Das würde wahrscheinlich helfen, ich muss mir das Thema Software Filterung einmal näher anschauen. Wobei man, wie du gesagt hast, die maximal Werte der Änderung erst einmal kennen muss um ein dementsprechendes Filter zu Programmieren.
Mit freundlichen Grüßen Roland
Hallo locked,
das Herausfinden der Extremwerte ist gar nicht so schlimm. Du lässt den Bot einen künstlichen Schlenker machen, den der Bot gerade noch stehen kann und speicherst die Werte ab. Danach liest Du die Werte über UART aus. Der künstliche Schlenker könnte ungefähr so aussehen. Nach dem Ausbalancieren für etwa 400ms voll nach links beschleunigen und dann etwa 500ms voll nach rechts. Die Zeit müsste noch angepasst werden, so dass er den Schlenker nach links gerade übersteht. Nach dem rechts beschleunigen darf er umfallen. Wenn Du den Schlenker und einige Takte vorher ausgelesen hast, die Werte dann auf einem Papier oder in Excel aufzeichnen und von Hand eine schön geschwungene Kurve ausmitteln und daraus die Extremwerte finden.
Gruß Waste
Die interne Ref. ist wahrscheinlich nur für grobe Messungen gedacht, schade eigentlich. Ich verwende die Externe Ref. Jedoch nur mittels einfachen Spannungsteiler, eine ZDiode währe sicher besser.
Ich bin mir nicht ganz sicher, ob eine Z-Diode besser wäre. Am besten ist es wahrscheinlich, wenn der Referenzpin direkt an die Versorgung des Sharp-Sensors gekoppelt ist. Dann hat man nämlich die optimale Gleichtaktunterdrückung, soll heißen, falls auf der Versorgung eine Störung liegt, wird der Sharp-Ausgang höchstwahrscheinlich mitgezogen und wenn jetzt die Referenzspannung des AD-Wandlers mitwandert, fällt die Störung beim Wandlungsergebnis heraus.
Das könnte mitunter der Grund sein, warum bei Verwendung der internen Referenz das Ergebnis so schlecht ist. In diesem Fall ist die Referenzspannung des AD-Wandlers ja unabhängig von der Versorgung des Sensors.
Was die Filterung anbelangt:
Wenn Deine Regelschleife mit 500us läuft, der Sensor aber nur eine Reaktionszeit von 40ms hat, könntest Du ja ein paar Werte mitteln oder einen 1 aus 2 Filter basteln.
Dieses Verfahren würde helfen, falls die Störungen nicht vom eigentlichen Sensorelement erzeugt werden. Und das halte ich für durchaus realistisch.
Ich habe vor einiger Zeit mal einige Versuche mit dem Sharp-Sensor angestellt. Es hat sich gezeigt, dass das Sensorergebnis davon abhähgt, aus welcher Richtung ein Objekt an den Sensor angenährt wird ( horizontal oder vertikal, sieh chris.lugr.de unten ). Dieses Verhalten könnte einige dazu veranlasst haben, zu glauben, dass der Sensor störanfällig sei.
Eventuell könnte es helfen, wenn Du den Sensor um 90° versetzt montierst.
Gruss,
stochri
Ich bin mir nicht ganz sicher, ob eine Z-Diode besser wäre. Am besten ist es wahrscheinlich, wenn der Referenzpin direkt an die Versorgung des Sharp-Sensors gekoppelt ist. Dann hat man nämlich die optimale Gleichtaktunterdrückung, soll heißen, falls auf der Versorgung eine Störung liegt, wird der Sharp-Ausgang höchstwahrscheinlich mitgezogen und wenn jetzt die Referenzspannung des AD-Wandlers mitwandert, fällt die Störung beim Wandlungsergebnis heraus.
Ich glaube, das würde so nur hinkommen, wenn sich der Messwert des Sharps auch proportional zur Versorgungsspannung verhält.
Wenn die Versorgungsspannung um zb. 10% einbricht, müsste auch der Messwert um genau 10% einbrechen, sonst dürfte es nicht viel nutzen die Referenzspannung mit der Versorungsspannung des Sharp zu koppeln.
Da die maximale Ausgangsspannung des Sharps nur bis ca. 3V und nicht bis zur Versorgungsspannung geht und der Sensor keine lineare Kennlinie hat, glaube ich nicht, dass Versorgungsspannung und Ausgangsspannung proportional sind und die Kopplung mit der Referenzspannung Spannungsschwankungen automatisch kompensiert.
Hallo,
Ich werde diese Kurve probieren aufzunehmen. Damit weis ich sozusagen um wie viel sich die Werte maximal ändern dürfen, und wenn sie sich noch mehr ändern kann es sich praktisch nur einen fehlwert handeln oder?
Jedoch wenn sich die Werte (zwei aufeinander folgende) nicht so sehr ändern aber es trotzdem eine Fehlmessung ist weis ich wider nicht, dass es sich um eine solche handelt?
Weiters werde ich, wie mir Manf schon gesagt hat, ein Diagramm (Spannung, Neigungswinkel) aufnehmen, um zu sehen wie "linear" dieses Verhältnis ist. Zurzeit verwende ich die Sensorwerte "roh". Also ich gehe davon aus das im Bereich 6-7cm die spannungs- Änderung linear ist (ist sie auch lt. Datenblatt). Jedoch misst in einer Schieflage der Sensor in einem andern Winkel zum Boden, was bestimmt der linarität entgegenwirkt.
Mit freundlichen Grüßen Roland
Jedoch wenn sich die Werte (zwei aufeinander folgende) nicht so sehr ändern aber es trotzdem eine Fehlmessung ist weis ich wider nicht, dass es sich um eine solche handelt?
Theoretisch lässt sich der Messwert auch dann noch auf Plausibilität überprüfen.
Wenn der Roboter z.B. nach vorne kippt, du nicht gegensteuerst und der Messwert ergibt trotzdem eine kleinere Neigung als der vorherige, kann da irgendwas was nicht stimmen.
Bei den verhältnismässig langsamen Sharp-Sensoren, kannst du aber vermutlich nicht leisten mehrere Messungen zu machen, ohne gleichzeitig gegenzusteuern.
Wenn du die Radbewegungen z.B. über Incrementalgeber gezielt steuern, bzw. messen könntest und die Massenträgheit deines Fahrgestells kennen würdest, müsstest du den nächsten Messwert eigentlich sogar vorausberechnen können.
Das dürfte aber mathematisch und programmiertechnisch reichlich kompliziert sein. Ob es viel nutzt weiss ich auch nicht, denn wenn man alles vorherberechnen könnte, bräuchte man ja keine Sensoren ;-)
Ich glaube es hilft schon, wenn du einfach erst mal nur die Messwerte die viel zu klein oder viel zu gross sind "behandelst". Da macht der Robby ja jedesmal einen Satz den er dann durch entsprechend heftiges gegensteuern wieder auffangen muss.
Dabei fällt mir allerdings noch was ein. Was ist bei Unebenheiten im Boden oder wenn jemand mal vor den Robby stösst?
Dann könnten Messwerte die normalerweise zu gross oder zu klein wären richtig sein.
Ich glaube das würde ich mir für später aufheben und erst mal auf der glatten Tischplatte weitermachen.
@locked
Was für Getriebe verwendest du eigentlich für deinen Roboter?
Ist das selbstgebaut oder kann man das igrendwo fertig bekommen?
Ich habe vor längerer Zeit auch mal versucht ein kleines Fahrgestell mit starrer Achse ans Balancieren zu bekommen.
Ich habe dafür ein billiges Kombi-Getriebe von Conrad verwendet.
Das ist komplett mit Motor und das Getriebe kann man mit verschiedenen Übersetzungen zusammensetzen.
Die Variationen reichen aber nur von zu schwach bis zu langsam, so schnelle Bewegungen wie auf deinem Video sind da bei weitem nicht drin.
Dewegen habe ich es damals recht schnell aufgegeben.
Das Fahrgestell mit Controller usw. steht seit Monaten rum und staubt zu, mit einem stärkeren Motor/Getriebe könnte ich es aber irgendwann nochmal probieren.
https://www.roboternetz.de/phpBB2/files/image_00001_s.jpg
Ich glaube, das würde so nur hinkommen, wenn sich der Messwert des Sharps auch proportional zur Versorgungsspannung verhält.
Hallo recycle,
Du hattest recht, ich habe mal nachgemessen:
UV=4.85V ==> Ua=0.945V
UV=5.45V==> Ua=0.945V
( UV=Versorgung, Ua=Ausgangsspannung bei ca. 15cm )
Der GP2D120 scheint seine Ausgangsspannung als auf eine stabile interne Referenz zu beziehen.
Gruss,
stochri
Hallo recycle,
Also das Getriebe habe ich selbst zusammengestellt. Es besteht im Wesentlichen aus einer Aluwelle (6mm) (Messing habe ich nicht bekommen) auf welcher einen Zahnrad mit 50 Zähnen angebracht ist, auf dem Motor eines mit 8 Zähnen (modul 0,5). Diese Übersetzung sorgt für sehr schnelle Bewegungen. Leider ist der Motor für höhere Spannungen gedacht, wodurch ich diesen nicht mit den 7,2V Akku verwenden kann.
Mit freundlichen Grüßen Roland
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.