-
        
+ Antworten
Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 65

Thema: Mein Asuro kann balancieren!

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734

    Mein Asuro kann balancieren!

    Hallo Asurofreunde!

    Ich habe meinen Asuro zum Balancieren gebracht [stolzdieBrustschwelle]. Angeregt durch diesen Thread, bin ich auf diese Idee gekommen. Es war nicht ganz einfach, da der Asuro eigentlich nicht dafür gebaut ist, aber ein simpler Versuch mit der IR-Hinderniserkennung hat mich positiv überrascht, so dass ich es dann richtig versuchte.

    Zur Messung des Winkels wird der Liniensensor verwendet. Im Gegensatz zum Linienfolger wird beim Balancieren nicht die Differenz zw. linkem und rechtem Sensor ausgewertet, sondern der Sensor fungiert hier als Abstandssensor und ich addiere beide Sensorwerte, um auch einen höheren Wert zu erhalten. Da in der aufrechten Position die Sensoren einen viel größeren Abstand zum Boden haben, ist das Signal des Sensors relativ klein. Um ein besseres Signal zu erhalten, habe ich deshalb die Front-LED durch eine hellere LED ersetzt. Zusätzlich habe ich den Akku höher gelegt damit die Nase nicht zu hoch kommt und die Sensoren zu weit vom Boden weg sind. Das Höhersetzen des Akkus hat auch noch den Vorteil, dass der Schwerpunkt weiter oben ist, was das Balancieren erleichtert. Außerdem musste ich noch die Versorgung des Liniensensors zusätzlich mit 220µF (parallel zu C5) abblocken, damit sich die Störungen der Motorsteuerung nicht mehr so schlimm auswirken. Mit diesen Änderungen hat es dann geklappt, mein Asuro konnte balancieren.

    Die Regelung ist ziemlich kompliziert geworden. Ein PD-Regler stabilisiert den Neigungswinkel. Zusätzlich wird noch mit einem P-Regler die Geschwindigkeit und mit einem I-Regler der Offset des Abstandssensor geregelt, denn der Abstandssensor reagiert auch auf Farbe, Reflektionsfaktor und Umgebungslicht, was die Sache nicht ganz so einfach machte. Eine weitere Erklärung ist auch hier und folgenden Beiträgen zu sehen.

    Der Code und ein gezipptes Paket incl. Headerdateien und Hex-File ist angehängt.

    Ein Kurzvideo ist hier zu sehen: http://www.roboternetz.de/phpBB2/dlo...le&file_id=274

    Ein längeres Video ist im GMX MediaCenter hinterlegt, da sieht man noch, wie sich der Asuro sogar selbständig aufrichtet: http://service.gmx.net/mc/z0kENGSIZu...qlEAxROifcu5Mf
    Hinweis: Der Link für den Gastzugang zum GMX MediaCenter ist bis zum 19.1.2006 gültig. Ihr müsst dort auf "GMX MediaCenter starten" klicken, dann öffnet sich ein Fenster. Im Fenster könnt ihr dann das Video "BalanceAkt.mov" runter laden oder direkt starten. Zum Download müssen PopUps erlaubt sein.

    Viel Erfolg beim selber probieren.
    Waste
    Code:
    /*******************************************************************************
    * Description: Asuro balanciert
    *
    * Der Asuro balanciert auf den Hinterrädern.
    * Der Liniensensor wird zur Winkelmessung verwendet.
    * Damit der Asuro balancieren kann, wurden folgende Umbauten vorgenommen:
    * Der Akkupack wurde höher gelegt, damit beim Balancieren die Liniensensoren
    * nicht zu weit vom Untergrund entfernt sind.
    * Die Spannungsversorgung für den Liniensensor musste zusätzlich abgeblockt werden,
    * ein 220µF Elko wurde parallel zu C5 gelötet.
    * Für eine höhere Empfindlichkeit wurde eine hellere LED (D11) eingebaut.
    *
    * Autor: Waste    1.12.05
    *****************************************************************************/
    #include "asuro.h"
    #include <stdlib.h>
    
    int main(void)
    {
       int phi, phialt, y, yd, speed, ukorr, drest;
       int x, x1, x2, x3, x4, don, doff, v0;
       float v, u, w;
       unsigned char dir;
       unsigned int lineData[2];
    
       Init();
       phialt = 0;
       u=0; v=0, v0=0;
       x2=x3=x4=0;
       drest=0;
       w=40;
       	MotorDir(RWD,RWD);						// beschleunigt kurz rückwärts
    	MotorSpeed(255,255);					// um den Asuro aufrichten
    	Msleep(80);								// zu können
       while(1)
       {
    	FrontLED(OFF);
    	LineData(lineData);						// Messung mit LED OFF
    	doff = (lineData[0] + lineData[1]);	// zur Kompensation des Umgebungslicht
    	FrontLED(ON);
    	LineData(lineData);						// Messung mit LED ON
    	don = (lineData[0] + lineData[1]);	
    	x1 = don - doff;						// Istwert
    	x = (x1+x2+x3+x4)/2;					// Filterung
    	phi = w - 14800/(x+100);				// Linearisierung und Vergleich
    	x4=x3; x3=x2; x2=x1;
    	yd = 500*(phi-phialt);					// D-Anteil berechnen und mit
    	yd += drest;							// nicht berücksichtigtem Rest addieren
    	if (yd > 350) drest = yd - 350;		// merke Rest
    	else if (yd < -350) drest = yd + 350;
    	else drest = 0;
    	y = 40*phi + yd;						// Ausgang PD-Regler (Winkel)
    	v = 0.987*v + 0.00189*u;				// simuliert Antrieb (Geschwindigkeit)
    	ukorr = 20*v + v0;						// P-Regler Geschwindigkeit
    	if (ukorr > 300) ukorr = 300;			// Begrenzung P-Regler
    	if (ukorr < -300) ukorr = -300;
    	u = y + ukorr;							// Berechnung Stellgröße
    	if (u < 0) {dir = RWD;}
    	else {dir = FWD;}
    	speed = abs(u)/2 + 80;					// 80 kompensiert Reibung
    	if (speed > 255) speed = 255;
    	MotorDir(dir,dir);
    	MotorSpeed(speed,speed);				// Ausgabe PWM
    	w = w + v*0.001;						// Integralregler für Winkeloffset
    	if (w > 80) w = 80;					// Begrenzung
    	if (w < 20) w = 20;
    	phialt = phi;
    	if (u > 350) u = 350;					// Begrenzung entsprechend PWM
    	if (u < -350) u = -350;
       }
       return 0;
    }
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.11.2005
    Beiträge
    321
    Meiner kann Tango tanzen...und die Wärmflasche auffüllen.

    "Zum Download müssen PopUps erlaubt sein."

    Bis du bl..., da handelt man sich eine Erkältung ein.

    Castle

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo Castle,

    Tango tanzen ist auch nicht schlecht. Aber dazu gehört doch eine Partnerin, eine Asura? Gibt es da ein Bild, von der Asura? Würde ich gerne sehen.

    Gruß Waste

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Hi,

    mein voller RESPEKT super gemacht!
    Da ich selber weiß wie schwer gute Regler zu programmieren sind
    weiß ich das da einiges an Gehirnschmalz drinn steckt!

    Weiter so...

    Frohe Weihnachten und einen guten Rutsch!

    Bye Ulli

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Hi,

    schau dir den mal an so könnt man Asuro auch modifizieren

    http://www.parallax.com/html_pages/r...s/app_bway.asp


    Bye Ulli

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo Ulli

    Interessant, ist sogar die gleiche Art des Sensors.

    Wünsche ebenfalls frohe Weihnachten und einen guten Rutsch ins neue Jahr.

    Waste

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.057
    Hallo waste,
    jetzt funktionier bei mir die Balance auch. Das Problem war nicht die lib. Nachdem ich mir Dein Video noch mal genauer angeschaut habe, ist mir der große Akkupack aufgefallen. Der ist natürlich um einiges schwerer als der für die AAA Zellen. Daraufhin habe ich die großen AA Zellen montiert. Dann ging's einigermaßen. Dann habe ich noch ein wenig an der LED rumgebogen, zum Glück habe ich die mit etwas Abstand eingelötet ( wobei ich leider gleich die Durchkontaktierung weggebruzelt habe ).
    Aber Jetzt kann er auch länger balancieren.

    Demnächst werde ich mir mal Scilab usw. installieren. Dann würde ich gerne mal Dein Simulationsfile ausprobieren, wenn Du Lust hast, das zu posten.

    Hier habe ich noch das Video von meinem Asuro hinterlegt:
    http://www.mitglied.lycos.de/amoltch...roBalance2.mpg

    Gruss,
    stochri

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo stochri und alle die sich noch in die Tiefen der Regelungstechnik vorwagen wollen.
    Ich habe die Simulationsdatei „Pendel4.cos“ angehängt. Zur Simulation muss Scilab/Scicos auf dem Rechner installiert sein, es steht hier zum Download zur Verfügung. Nach der Installation reicht ein Doppelklick auf die entpackte Datei „pendel4.cos“ um Scicos zu starten und das Blockschaltbild anzuzeigen.

    Vermutlich ist es für einen Außenstehenden nicht ganz so einfach, sich in die Simulation einzuarbeiten, noch dazu wenn das Programm für einen neu ist. Deshalb hier eine kleine Beschreibung für die ersten Gehversuche. Das Blockschaltbild zeigt auf der rechten Seite die Regelstrecke mit dem Antrieb und dem invertierten Pendel. Im Antriebsblock gibt es Leitungen, die mit x’’, x’ und x bezeichnet sind. Das sind die Signale:
    x’’: Beschleunigung
    x’: Geschwindigkeit
    x: Position
    Entsprechend gibt es im Pendelblock die Signale:
    phi’’: Winkelbeschleunigung
    phi’: Winkelgeschwindigkeit
    phi: Winkel
    Eine Auswahl der Signale (Position, Geschwindigkeit, Winkel) geht auf die Anzeige (Mscope). Die Uhr darüber ist der Taktgeber für das Scope.

    In dem Ersatzschaltbild der Regelstrecke wurde einiges vereinfacht, damit es nicht zu kompliziert wird. So wurde auf die Nachbildung der Reibung sowohl im Antrieb als auch im Pendel verzichtet. Die Reibung des Antriebs ist nur insoweit berücksichtigt, indem die Ansteuerspannung auf 3,5 Volt, anstatt 5V begrenzt wird. Die 1,5V Differenz entspricht dem Wert zur Überwindung der Reibung. Im Code wird dafür zur Kompensation auf die PWM ein Offset entsprechend den 1,5V addiert. Der Antrieb selbst wird als PT1-Glied mit dem Übertragungsmaß k und der Zeitkonstante T simuliert. Eine weitere Vereinfachung ist die Wirkung des Antriebs auf das Pendel. In Wirklichkeit geht das mit dem Cosinus ein. Da der Asuro aber nur bis ca. 13 Grad Neigung ausgleichen kann und der Cosinus von kleinen Werten annähernd 1 ist, habe ich darauf verzichtet.

    Die Variablen k, T, g und l können über den Menüpunkt ‚Edit – Context’ geändert werden. Die Bedeutung ist:
    k = Übertragungsmaß des Antriebs
    T = Zeitkonstante des Antriebs
    g = Erdbeschleunigung
    l = Länge des Pendels von Schwerpunkt zu Drehachse

    Auf dem linken Teil des Blockschaltbilds sind die Regler. Links unten eine PID-Struktur, wobei der I-Anteil zu 0 gesetzt ist, also einen PD-Regler ausübt. Dieser Regler stabilisiert den Winkel. Die Parameter KP, KI und KD können durch einen Mausklick auf den entsprechenden Verstärkerblock geändert werden. Links oben ist ein weiterer Regler, der die Geschwindigkeit regelt und einen möglichen Offset des Abstandssensors ausgleicht. Dieser Teil des Reglers ist für sich alleine nicht funktionsfähig, er regelt nur in Kombination mit dem anderen Regler richtig.

    Eine Simulation wird über das Menü ‚Simulate – Run’ gestartet. Danach erscheinen 2 Fenster mit den Ergebnissen. Das Fenster ‚ScilabGraphic1’ zeigt die Kurven Position (schwarz), Geschwindigkeit (grün) und Winkel (rot). Die Skalierung ist in den Grundeinheiten, also Position in m, Geschwindigkeit in m/s und Winkel in rad. Man sieht, dass der Winkel bei 0.2 rad startet und dann ausgeregelt wird. Den Anfangszustand des Winkel kann man im Blockschaltbild durch einen Mausklick auf den letzten Integratorblock (unter phi0) im Pendelteil einstellen. Es öffnet sich ein Fenster, dort unter ‚Initial Condition’ einen neuen Wert eingeben. Das Einschwingen des Winkels zeigt nach 2sec einen Ausschlag, dieser wird durch eine simulierte Störung verursacht. Für die ersten Gehversuche in der Simulation, würde ich vorschlagen die Störung vorerst wegzulassen. Die Störung kann mit dem Block unter Stoerung ausgeschaltet werden, dort den ‚Final value’ auf 0 setzen. Das 2. Grafikfenster ‚ ScilabGraphic2’ zeigt 2 Stellgrößen. Einmal die vom Winkelregler und eine weitere, die das endgültige Ansteuersignal für den Motor zeigt.

    Der Block S/H (Sample and Hold) simuliert die Abtastverzögerung. Um diese zu ändern, einfach auf die Uhr darüber klicken und eine neue Taktrate unter ‚Period’ eingeben. Damit kann die Auswirkung einer längeren Abtastzeit untersucht werden.

    Ich denke das reicht erst mal, um damit spielen zu können. Mein Vorschlag: KPv, KIOffset und die Störung auf 0 setzen und nur mit dem PID-Regler versuchen das Pendel für längere Zeit zu stabilisieren. Dabei beobachten, was die Position und die Geschwindigkeit macht.

    Viel Spaß dabei.
    Waste
    Angehängte Dateien Angehängte Dateien

  9. #9
    Boah, seid ihr gut im programmieren =D>
    Ich schaffe es ja gerade mal, dass sich die Räder bewegen.
    Könnt ihr eure Programme nicht mal posten, damit ich auch meine Freude dran hab? [-o<

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.057
    Hallo Simsinator
    Du kannst Dir die überarbeiteten ASURO-Libs

    http://sourceforge.net/project/showf...roup_id=155217

    runterladen. Dort sind auch ein paar neuere Beispielprogramme drin. Ansonsten hilft suchen hier im Forum, es gibt nämlich schon einige Posts.

    Gruss,
    stochri

+ Antworten
Seite 1 von 7 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •