- fchao-Sinus-Wechselrichter AliExpress         
Seite 26 von 28 ErsteErste ... 162425262728 LetzteLetzte
Ergebnis 251 bis 260 von 278

Thema: Sensor für balancierenden 2-Rad Roboter

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

    Praxistest und DIY Projekte
    Hallo UlliC,

    hab gleich einen Test gemacht. Fahren und drehen geht schon. Aber da ist ein Problem mit dem Abstandssensor, der reagiert auf unterschiedliche Unterlagen. Also wenn sich der Untergrund ändert, dann ist es aus mit dem Fahren. Das war mir aber schon bewusst. Ich wollte nur einmal selbst einen Regler fürs Balancieren bauen, damit mein "gescheit daherreden" auch einen Background hat.

    Gruß Waste

  2. #252
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.03.2005
    Ort
    Essenrode bei Braunschweig
    Beiträge
    182
    Hallo Waste,

    toll das es schon so gut funktioniert.

    Das "Untergrundproblem" hat man leider auch mit den PSDs und vermutlich auch mit nahezu jedem anderen Abstandssensor.

    Es wird etwas besser, wenn man zwei Sensoren (vorne/hinten) verwendet.

    Deutlich besser wird es aber erst mit Sensoren, die nicht den Abstand messen, sondern den Neigungswinkel (und dessen Änderung).

    Leider sind diese Sensoren (Beschleunigungssensor und Drehratensensor) noch etwas teuer.

    Aber möglicherweise kann man bei AD Muster ergattern ?
    Gruß
    Ulli

    Carpe Diem

  3. #253
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.12.2004
    Alter
    39
    Beiträge
    287
    Hallo Waste,

    herzlichen Glückwunsch auch von mir!

    Welchen Sensor verwendest du jetzt?
    Hast schon einen PID Regler probiert?

    Mit freundlichen Grüßen Roland
    The future is closer then you think!

  4. #254
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Zitat Zitat von locked
    Welchen Sensor verwendest du jetzt?
    Das ist der normale Liniensensor vom Asuro, nur aufgepäppelt mit einer helleren LED, da bei der größeren Entfernung sonst die Spannung zu gering war. Die Sensoren sind Fototransistoren SFH300. Für einen balancierenden Bot schlecht geeignet, da die Reflektionseigenschaften des Untergrunds voll eingehen. Ich habe sie nur deshalb genommen, weil sie bereits vorhanden sind und ich möglichst wenig ändern wollte. Der einzige Vorteil ist die Schnelligkeit, die Taktrate bei mir ist 2ms.
    Hast schon einen PID Regler probiert?
    In der Simulation habe ich auch einen PID-Regler probiert, der hatte aber keinen Vorteil zu einem PD-Regler.
    Für die Winkelregelung wird also bei mir ein PD-Regler verwendet. Zusätzlich gibt es noch einen P-Regler (Geschwindigkeit) und einen I-Regler zum Ausgleich eines möglichen Offsets des Abstandsensor (Winkel). Ohne die zusätzlichen Regler würde der Asuro weglaufen. Mit der Zusatzregelung kann ich den Asuro auch auf einer Platte balancieren, die ich an einer Seite anhebe. Der Asuro läuft dann beim Anheben nur ein Stück die Rampe runter und stabilisiert sich wieder. Wird die Platte wieder waagerecht gelegt, dann fährt der Asuro wieder an den Ursprungsort zurück.

    Ich denke mal, du wirst das gleiche Problem haben wenn nur ein PID-Regler für den Winkel vorhanden ist. Da wird dein Bot ohne die Nabelschnur nur stehen bleiben, wenn du ihn beim Start sehr genau ausrichtest.

    Gruß Waste

  5. #255
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.12.2004
    Alter
    39
    Beiträge
    287
    Hallo Waste,

    Also bei mir ist es auch so, dass der I Anteil fast keine Änderung bringt.

    Wegen dem Sensor, wie ist es wenn sich das Umgebungslicht ändert? Der Sollwert entspricht ja dem Digitalisierten Wert des Fototransistors oder?
    Wenn sich jetzt das Umgebungslicht ändert müsste das doch den Sollwert ändern.

    Also der eine Regler verwendet als Regelgröße den Wert des Abstandsensors (Fototransistor für Winkelerkennung) und als Stellgröße die Motorspannung (PWM inkl. Richtung)

    Jedoch welche Größen verwendet der zweite Regler, den man benötigt um der Bot am gleichen Platz zu lassen?

    Wenn du die Platte an einer Seite anhebst, steht der Bot doch nicht mehr Senkrecht zu Erdanziehungskraft? Der Sollwert bezieht sich doch auf die Senkrechte Position des Bots auf den Untergrund, und wenn dieser Schief ist kann er doch nicht mehr Balancieren oder?

    Mit freundlichen Grüßen Roland
    The future is closer then you think!

  6. #256
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Zitat Zitat von locked
    Wegen dem Sensor, wie ist es wenn sich das Umgebungslicht ändert? Der Sollwert entspricht ja dem Digitalisierten Wert des Fototransistors oder?
    Wenn sich jetzt das Umgebungslicht ändert müsste das doch den Sollwert ändern.
    Ich kompensier das Umgebungslicht, so weit das möglich ist, indem ich einmal bei ausgeschalteter LED nur das Umgebungslicht messe und dann mit eingeschalteter LED Reflektion und Umgebungslicht messe. Davon ziehe ich den Wert der ersten Messung ab und erhalte praktisch nur den Reflektionswert. Das ist nichts anderes als bei den IR-Detektoren die bei 36kHz arbeiten. Aber irgendwo hat die Methode auch ihre Grenzen, deshalb musste ich auch eine stärkere LED einbauen.

    Zitat Zitat von locked
    Also der eine Regler verwendet als Regelgröße den Wert des Abstandsensors (Fototransistor für Winkelerkennung) und als Stellgröße die Motorspannung (PWM inkl. Richtung)
    richtig

    Zitat Zitat von locked
    Jedoch welche Größen verwendet der zweite Regler, den man benötigt um der Bot am gleichen Platz zu lassen?
    Das ist die Geschwindigkeit. Da ich keinen Geschwindigkeitssensor habe, rechne ich mir die Geschwindigkeit aus der Ansteuerspannung aus, es wird sozusagen ein Geschwindigkeitssensor simuliert. Bei Stand wird auf Geschwindigkeit 0 geregelt, zum Fahren kann man eine Geschwindigkeit als Führungswert vorgeben.

    Zitat Zitat von locked
    Wenn du die Platte an einer Seite anhebst, steht der Bot doch nicht mehr Senkrecht zu Erdanziehungskraft? Der Sollwert bezieht sich doch auf die Senkrechte Position des Bots auf den Untergrund, und wenn dieser Schief ist kann er doch nicht mehr Balancieren oder?
    Ja, am Anfang denkt die Regelung auch er steht schief, deshalb fährt er etwas die Rampe runter. Aber er will gleichzeitig die Geschwindigkeit auf 0 halten, also dreht er solange am Offset des Winkels, bis er wieder steht. Das mit der Schräge war zwar nicht geplant, hat sich einfach so ergeben. Ich wollte eigentlich nur den Offsetabgleich für unterschiedliche Böden, daraus ergab sich automatisch auch der für die Schräge. Mit meiner virtuellen Geschwindigkeitsregelung funktioniert es nicht ganz genau, weil er zum Halten an der Schräge eine Geschwindigkeit vortäuscht und nach einer Weile gibt er nach. Mit einem richtigen Geschwindigkeitssensor sollte das aber genau funktionieren.

    Gruß Waste

  7. #257
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    02.12.2004
    Alter
    39
    Beiträge
    287
    Hallo waste,

    ist wirklich eine gute Idee einen Fototransistor als Sensor zu verwenden. Wann misst du das Umgebungslicht? Bei jedem Regelzyklus? Oder einmal beim einschalten.

    Okay du verwendest die Geschwindigkeit als Regelgröße und was ist in diesem Fall die Stellgröße? Wirkt die Stellgröße des Geschwindigkeitsreglers zusammen mit der Winkelinformation auf den Ersten Regler (Winkel) als Regelgröße?
    Wie errechnest du dir die Geschwindigkeit? Du sagtest über die Motorspannung, aber die hast du ja im Grunde schon digital (also Motorspannung =^ PWM - also der Stellgröße des Ersten Reglers). Oder misst du die Motorspannung am Motor? (was ja widersprüchlich ist bei einer PWM, entweder ein oder aus)

    Danke in Vorhinein

    Mit freundlichen Grüßen
    Roland
    The future is closer then you think!

  8. #258
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Was macht eigentlich ausgerechnet diesen Thread so interessant für die dusseligen Viagra-Spammer?
    Sieht ziemlich nach einem Spam-Script aus. Ich könnte mir vorstellen, dass es hilft dem Thread irgendwie eine andere URL zu verpassen.


    Ich habe dem Spam entfernt, auf den sich diese Bemerkung bezieht, nicht dass sich sonst jemand angesprochen fühlt.
    Das ist einer der vielgelesenen Threads der auch für Gäste offen ist. Bis jetzt werden die Spams die alle 2-3 Tage auftreten entfernt.
    Manfred

  9. #259
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo locked,

    das Umgebungslicht wird bei jedem Zyklus mit gemessen.

    Zitat Zitat von locked
    Okay du verwendest die Geschwindigkeit als Regelgröße und was ist in diesem Fall die Stellgröße? Wirkt die Stellgröße des Geschwindigkeitsreglers zusammen mit der Winkelinformation auf den Ersten Regler (Winkel) als Regelgröße?
    Ich habe nur eine Stellgröße und das ist die Steuerspannung für den Motor, also die PWM. Der Ausgang des Balancierreglers (PD) und des Geschwindigkeitsreglers werden zusammenaddiert und bilden die Stellgröße PWM.

    Wie errechnest du dir die Geschwindigkeit?
    Der Antrieb wird als PT1-Glied (Verzögerungsglied 1.Ordnung) angenommen und rechnerisch nachgebildet. Ich habe im Code eine Variable u, die der Spannung am Motor entspricht. Mit der folgenden Formel wird daraus die Geschwindigkeit v berechnet:
    v = 0.987*v + 0.00189*u;
    Das ist ein Algorithmus, wie er auch bei digitalen Filtern für ein RC-Glied verwendet wird. Die berechnete Geschwindigkeit ist natürlich nur so genau wie die zugrunde gelegten Konstanten mit den wirklichen Werten übereinstimmen. Bei geänderten Umgebungsbedingungen (Reibung etc.) gibt es Fehler.

    Ich werde morgen meinen Code als Anschauungsbeispiel hier rein stellen. Ich muss ihn nur etwas aufräumen, damit er leserlich wird. Deshalb dauert es noch bis morgen.

    Gruß Waste

  10. #260
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hier der Code:
    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);
    	MotorSpeed(255,255);					// beschleunigt kurz rückwärts
    	Msleep(80);								// um den Asuro aufzurichten
    
       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;
    }
    Gruß Waste

Seite 26 von 28 ErsteErste ... 162425262728 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test