- Labornetzteil AliExpress         
Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 67

Thema: Regelung fürs Geradeausfahren

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150

    Regelung fürs Geradeausfahren

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Ich bin schon eine Weile dabei, daran zu basteln, dass mein Asuro endlich gerade aus fährt. Nach einigen Misserfolgen (vor allem bei der Geschwindigkeitsmessung) bin ich jetzt zumindest so weit, dass ich so ca. die Geschwindigkeit messen kann.
    Dann wollt ich was schreiben, dass die beiden Geschwindigkeiten immer gleich geregelt werden. Ich kenn mich leider bei Regelungen nicht sonderlich gut aus, deswegen hab ich mal nur ein Programm geschrieben, was mir die Leistungen von einem Rad erhöht und von anderen erniedrigt(Also wenn das linke schneller ist => links weniger Leistung und rechts mehr Leistung) Hab mir dann die Geschwindigkeiten in LabView ausgeben lassen und halt aufzeichnen lassen. Das Ergebnis ist nicht zufriedenstellend. Ich wollt jetzt fragen ob da wer einen besseren Vorschlag zur Regelung hat. Danke schon mal!

    mfg theodrin

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo,

    Mir ist es wenigsten gelungen die Asuro exact geradeaus fahren zu lassen mit eine exacte geschwindigkeit und exacten abstand..

    Aber dass passiert nur dadurch dass beide Rader unabhangig von einander mittels ihren eigene odometer-signal zahlung angesteurt werden.

    Theoretisch wurde dass genugen.

    Wenn ich versuchte die rader softwaremassig an einander zu knupfen fangte der Asuro an zu Schwenken.

    Da muss ich mich mahl noch darin vertiefen.

    Ich mochte mal gerne wissen ob deine Asuro mit das Program dass ich geschrieben habe auch wirklich gerade ausfahrt.

    (Vielleicht fahrt nur meine Asuro gerade...)

    https://www.roboternetz.de/phpBB2/vi...b797e5754fddc2

    Gruss

    Henk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150
    Hallo Henk!

    OK, das werd ich ausprobieren. Dann schauen wir mal. Wenns bei dir geht dann sollte es doch auch bei jeden gehen. So hoffe ich doch(auch in meinem Sinne)
    Also danke schon mal!

    mfg theodrin

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150

    Hab jetzt gscheite Regelungen benutzt

    Hallo!

    Ich hab jetzt einmal einen PI-Regler programmiert und einen PID-Regler. Bin mit dem Ergebnis vom PI-Regler eigentlich überrascht worden. Das hat recht gut funktioniert. Ich hab da so eine kleine Teststrecke von 8 Meter Länge und 1 Meter Breite. Da wollte ich halt das mein Asuro durchkommt ohne an die Seitenwände anzustoßen. Mitn PI-Regler hab ichs eigentlich oft geschaft. Also bei 3 Versuchen hab ichs immer einmal geschaft. Da hab ich mich gleich recht gut gefreut. Dumm war nur dass am Anfang immer ein Rad schneller war als das andere. Das hab ich nicht wegbringen können. Aber dann ist er eigentlich ziemlich schön gelaufen. Nicht immer exakt gerade, leicht geschwenkt, aber er hat den Korridor geschafft. Die Versuche wo er es nicht geschafft hat, ist er meistens bei 5-6 Metern angefahren.
    Mitn PID-Regler ist es eigentlich schlechter gegangen, aber vielleicht muss ich da noch die Werte der Regelung ändern. Da hat er es nur mehr 1 mal bei 4-5Versuchen geschafft. Sonst ist er auch so bei 5 Metern gescheitert. Selten ist er ganz dumm gefahren.
    Ich werd jetzt morgen das Programm vom Henk probieren. Schauen wir mal was sich da tut.
    Ach übrigens: Ich hätte gerne wenn mir jemand bei meiner Geschwindigkeitsbestimmung hilft. Ich vertrau der nämlich nicht ganz. Sie funktioniert nur von einem Leistungsbereich von 130-190 richtig. Ich könnts sie euch mal zeigen. Vielleicht habt ihr bessere, oder könnt mir bei meiner helfen, dass sie "immer" geht.

    mfg theodrin

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150

    Leider hat dein geradeausfahrprogramm nicht funktioniert

    Hallo Henk!

    Dein Geradeausfahrprogramm hat leider nicht funktioniert. Es hat zwar so ausgeschaut als würde er versuchen zu regeln, aber es war immer ein Rad schneller als das andere, aber konstant. Also hat dein Programm bei mir einen konstanten Fehler programmiert. Tut Leid, aber so hab ich meine Teststrecke nicht überwinden können. Da hat meine PI-Regelung noch etwas besser funktioniert. Aber das kann ja daran liegen, dass du vielleicht konstante Werte da reinprogrammiert hast, die nur auf deinen Asuro zutreffen. Vielleicht gehörten die bei mir geändert. Na ich schau mal ob ich mit meinem Regelprogramm weiterkomme.

    mfg theodrin

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo theodrin,

    dass ist ja Schade....

    Mmmm....

    Dass Program ist geeignet fur Asuro mit Odorader mit 6 Schwarz/Weiss flachen.

    Da sich beim fahren die Odowerte durch wechselndes Umgebungslicht andern benutze ich ein festes durch experimentieren gefundene hysteresis von 40 Odowerte. Dass heisst, die hochste und niedrigste Odowerte bei jedem vorbeigehendes Odoflach wird gespeichert. Bewegt sich die momentane gemessene Wert kleiner als aximum-minus-40 oder grosser als minumum-plus-40 dann wird dass wie ein gultiges weiss/schwarz oder schwarz/weiss ubergang interpretiert.

    Aber jetzt kommt's:

    Weil sich die Odorader durch dass hin und her gleiten auf die Axen naher-an und weiter-weg vom infrarot systeem bewegen andert sich die gemessene Odowert so um die 300 !!!
    Da muss ich mein ganzes Prinzip vielleicht uber bord schmeissen.

    Meine Asuro fahrt vermutlich ganz gut weil ich die Infrarot Sender und Empfanger umgebogen habe damit die infrarot Strahlung besser ausgerichtet ist und die gemessene Werte weiter aus einander liegen.

    Aber daruber bin ich mich noch nicht sicher.

    Meine Asuro Odowerte sind: (im Halbschatten):

    • Linkerrad weiss naher/weiter 50/400
      Linkerrad schwarz naher/weiter 750/750

      Rechterrad weiss naher/weiter 35/280
      Rechterrad schwarz naher/weiter 615/645


    Da sieht mann dass gleiten uber die Axe die reflektierung vom weissen Flach erheblich beeinflusst.

    Vielleicht sollte die Hysteresis grosser sein.

    Kannst Du vielleicht mal deine min/max odowerte schicken? (program auf meinen Homepage) und dann die 4 Werte posten so wie ich die ach gemessen habe?

    Wenn dein Program fertig ist mochte ich es auch mal testen.

    Gruss
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken dsc03780.jpg  

  7. #7

    Geradeaus fahren

    Bei mir hat es enorm geholfen die Encoderzeichnungen auf dem Ritzel mit schwarzen bzw. weißen Stiften dick nachzu malen sodaß ein besserer Kontrast entsteht. Damit wr eingeradaus laufen mit der Funktion go() bzw. Kurven mit Turn() kein Problem mehr!
    Ein weitere Verbesserung bringt ein kleines Papierhäuschen über den Odometriesensoren (mit Heißkleber vorsichtig festkleben) .

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150

    Hab ein ganz anderes Prinzip gewählt

    Hallo Henk!

    War grad fort. Mittagessen und für die Schule lernen. Das muss man auch mal machen. Ich hab mir gerade deine Messung durchgelesen und musste an meine Versuche denken.
    Ich hab auch mal so gemessen wie du, zwar nicht so genau, eher einfacher.
    Das hat nie funktioniert wenn sich die Helligkeitswerte geändert haben. Ich hab immer den Asuro auf so etwas gestellt, damit die Räder den Boden nicht berühren und dann hab ich getestet. Auf dem Prüfstand hat es immer toll funktioniert, aber wie ich auf dem Boden gefahren bin, ist Blödsinn rausgekommen.
    Da hab ich gewusst, dass die geänderten Helligkeitswerte schuld sein müssen. Also hab ich vor jeder Geschwindigkeitsmessung Helligkeitswerte gemessen und so wusste halt mein Asuro wann grad weiß und schwarz ist. Das hätte super funktioniert, nur war dann meine Geschwindigkeitsmessung viel zu langsam. Bevor ich einmal die Geschwindigkeit gemessen habe, ist Asuro schon mindestens 35-40cm falsch gefahren. Wenn ich nur 50cm Platz habe ist das ungenügend.

    Dann wollte ich die Geschwindigkeit mit den Flanken messen. Das hat nicht funktioniert.

    Jetzt mess ich die Geschwindigkeit ganz anders. Ich nehm in einem Feld 100 Odowerte auf und speichere sie dort. Dann schau ich mir einen Wert an und die darauf folgenden. Z.B: Wert 1 und Wert 10-Wert 15 vergeicht er dann. So in etwa. Dann schaut er ob sich dabei die Werte über einer bestimmten Grenze geändert hat. Die bleibt ja so ungefähr gleich, egal ob hell oder dunkel. Dann schaut er wie viele SchwarzeißÜbergänge stattgefunden haben.

    Es ist nicht perfekt, dass wusste ich von Anfang an, aber ich war nach drei falschen(eine Methode hab ich noch probiert) eine Trotz-Methpde, von der ich nicht viel erwartet habe. Aber von Leistung 130-190 funktioniert die Geschwindigkeitserfassung und darüber und darunter seltsamerweise nicht.
    Code:
    #define ANZ 100
    #define ABT 2
    
    
    
    while(tsys<650)	
    //Ein mal abtasten ca.200, 2mal ca.500, dreimal ca. 650, usw.
    	{
    	
    		
    	ta=Gettime();                  //Zeitmessung Anfang
    	for(i=0; i<ANZ; i++)        //Beginn Werte in Feld einzulesen
    	{
    		Msleep(2);
    		OdometrieData(dataodo);
    		feldlinks[i]=dataodo[0];
    		feldrechts[i]=dataodo[1];
    	}
    	te=Gettime();
    
    	t=te-ta;
    	
    	
    	
    	for(i=0;i<=(ANZ-ABT); i++)                              //Schwarz-Weiß-Messung
    	{
    		ists=uebertraglinks;
    		uebertraglinks=0;
    		
    		for(a=0;a<=ABT; a++)
    		{
    			abweichung=feldlinks[i]-feldlinks[i+a];
    			if(abweichung > 100 || abweichung < -100)
    			{
    				ists++;
    			}
    			if(ists >= (ABT))
    			{
    				flankelinks++;
    				i=i+ABT;
    				ists=0;
    			}	
    		}
    		if(i==(ANZ-ABT))
    		{
    			uebertraglinks=ists;
    		}
    		ists=0;
    		
    	}
    	
    	for(i=0;i<=(ANZ-ABT); i++)
    	{
    		
    		istsr=uebertragrechts;
    		uebertragrechts=0;
    		
    		for(a=0;a<=ABT; a++)
    		{	
    			abweichungr=feldrechts[i]-feldrechts[i+a];
    			if(abweichungr > 100 || abweichungr < -100)
    			{
    				istsr++;
    			}
    			if(istsr >= (ABT))
    			{
    				flankerechts++;
    				i=i+ABT;
    				istsr=0;
    			}			
    		}
    		if(i==(ANZ-ABT))
    		{
    			uebertragrechts=istsr;
    		}
    		istsr=0;
    	
    	}
    	
    	vl=((flankelinks*60000)/t)/40;
    	vr=((flankerechts*60000)/t)/40;
    	
    	flankelinks=0;
    	flankerechts=0;
    	
    	tse=Gettime();
    	tsys=tse-tsa;
    	}
    Vielleicht kannst du ihn verbessern, oder mir sagen, dass er doch Müll ist, aber er funktioniert teilweise wie gesagt.

    bis später
    mfg theodrin

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.05.2005
    Beiträge
    734
    Hallo!

    Probiert mal folgendes Programm:
    Code:
    /*******************************************************************************
    *
    * Description: Asuro fährt geradeaus
    *
    *****************************************************************************/
    #include "asuro.h"
    #include <stdlib.h>
    
    
    int main(void)
    {
    unsigned char speed, flagl=FALSE, flagr=FALSE;
    unsigned int data[2];
    int wegl, wegr, diff;
    int speedLeft,speedRight;
       Init();
       MotorDir(FWD,FWD);
       StatusLED(GREEN);
       speed = 150;
       speedLeft = speedRight = speed;
       wegl=0; wegr=0;
       while(wegl<333){
          OdometrieData(data);
          if ((data[0] < 550) && (flagl == TRUE)) {flagl = FALSE; wegl++;}
          if ((data[0] > 650) && (flagl == FALSE)) {flagl = TRUE; wegl++;}
          if ((data[1] < 550) && (flagr == TRUE)) {flagr = FALSE; wegr++;}
          if ((data[1] > 650) && (flagr == FALSE)) {flagr = TRUE; wegr++;}
          diff=wegr-wegl;
          if (diff>0) speedRight--;                  // fahre geradeaus
             else if (diff<0) speedLeft--;
             else {speedRight=speed; speedLeft=speed;}
          if (speedRight<0) {speedRight=0;}
          if (speedLeft<0) {speedLeft=0;}
          MotorSpeed(speedLeft,speedRight);
       }
       MotorDir(BREAK,BREAK);
       while(1);
        return 0;
    }
    Damit fährt mein Asuro schön geradeaus.

    Gruss Waste

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo,

    @theodrin
    • Vielleicht kannst du ihn verbessern, oder mir sagen,
      dass er doch Müll ist, aber er funktioniert teilweise wie gesagt.

    ich mochte gerne etwas mehr Kommentar dazu lesen...
    irgendwo scheint mir dein Program etwas zu kompliziert
    Du schreibst: drei Methoden, ich bin jetzt bei 15 oder 16...
    Bei jedem Methode lernt sich wieder etwas neues.


    @waste
    Ich hab dein Program ausprobiert.
    Da fahrt die Asuro erstaunlicherweise gerade.
    Interessant, wenn mann dass eine Rad mehr oder
    weniger blokkiert dreht sich dass andere Rad
    gleich langsamer!
    Finde dass ein einfaches robustes Program.
    Aber wenn der Asuro an das Fenster heran kam
    hort er auf gerade zu fahren.
    Dein Program arbeitet mit festen vergelichswerte
    fur die Odometrie. Da sollte vielleicht noch
    etwas variabeles dazu kommen.

    @jeden
    Ich mochte meinen Prinzip noch mal besser studieren.
    Ich mochte gerne wissen warum meine Odometriemessung
    z.B. bei theodrin nicht geklappt hat.

    Wenn ihr wollt, ladet mal mein neues test Program
    dass hier zugefugt ist und schick mir bitte eure
    Odometrie daten.

    Dass zugefugte Program macht folgendes:

    - Asuro startet mit ein durchschnitt geschwindigkeit
    - nach 1 Sekunde fahren messt er 250 mal beide odometriewerte
    (jeden millisekunde) Die messung daurt 0,25 Sekunde
    - Asuro haltet

    - startet Hyperterminal
    - drucke auf eine beliebige Asuro Taste
    - Asuro sendet die gemessene Daten zum Hyperterminal

    Schick mir mal bitte die Daten.

    Die gemessene Werte sind die 8 hochsten bits vom
    10 bit Werte. So Werte von 0 bis 255 werden erscheinen.

    Mit Microsoft Excel kann mann dann einfach ein Grafik
    daraus machen.

    Oder gucke sonst auf meine website. Dort kan
    mann dass Program bekommen und meine
    Grafiken anschauen.

    http://home.planet.nl/~winko001/index.htm

    (Logging Odometer values to Hyperterminal)

    Ich hab eine Grafik versucht hier zu zu fugen.

    Gruss

    Henk
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 01__measurement__001__left_odometer_values__01__small_.jpg  
    Angehängte Dateien Angehängte Dateien

Seite 1 von 7 123 ... LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad