-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: Odometrie Programm Probleme

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13

    Odometrie Programm Probleme

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo!!

    Endlich hab ich mal wieder Zeit gefunden um mich mit dem asuro zu beschäftigen.

    Ich hab mich mal an die Odometrie gewagt und eigentlich meiner Meinung nach ein nicht so schlechtes Programm geschriebenm welches nur leider nicht funktioniert.

    Code:
    #include "asuro.h"
    
    int main (void)
    {
    	unsigned int data[2];
    	unsigned int L_alt_l[1];	//Letzte Wert des linken Fototransistors
    	unsigned int L_alt_r[1];	//Letzte Wert des rechten Fototransistors
    	float n_l;
    	float n_r;
    	int a;						//Hilfsvariable
    	int b;						//Hilfsvariable
    	unsigned char c;			//Wert für die Geschwindigkeit des linken Motors
    	unsigned char d;			//Wert für die Geschwindigkeit des rechten Motors
    	int dh_l;
    	
    	a = 0;
    	b = 0;
    	c = 140;					// Wert für linken Motor bestimmen		
    	d = 140;					// Wert für rechten Motor bestimmen
    	
    	Init();
    	
    	OdometrieData(data);
    	MotorDir(FWD, FWD);
    	
    	while(1)
    	{
                    MotorSpeed(c, d);
    		L_alt_l[0] = data[0];
    		L_alt_r[0] = data[1];
    		OdometrieData(data);
    		
    		dh_l = data[0] - L_alt_l[0];
    				
    		if( dh_l > 200)
    		{
    			a++;
    			n_l=a/8; 			//Umdrehungen in der Zeit t
    		}
    		
    		if( data[1] - L_alt_r[0] > 200 || data[1] - L_alt_r[0] < -200)
    		{
    			b++;
    			n_r=b/8;			//Umdrehungen in der Zeit t
    		}
    		
    		if( n_l < n_r)
    		{
    			d--;				//Geschwindigkeit des rechten Motors verkleinern
    			
    		}
    		
    		if( n_l > n_r)
    		{
    			c--;				//Geschwindigkeit des rechten Motors verkleinern
    		}
    	}
    }
    könnt ihr da vielleicht wo nen Fehler entdecken, oder ist das ganze generell falsch was ich da mache? Bitte nicht wunder das ich im unteren Teil für die Berechnung der Differenz zwei verschieden Methoden angewandt habe, will damit nur zeige das es mit keiner der zwei funktioniert.

    mfg Chrise

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    23
    Beiträge
    98
    Dein Fehler ist MotorSpeed(c, d); muss in die while-Schleife, da diese nich verlassen wird. Sonst fallen mir keine Fehler auf.

    mfg liggi
    Lieber am Asuro rumschrauben als alles andere.
    Meine Homepage

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    Ohhh..... stimmt. Das hab ich ja völlig übersehn.
    Allerdings funktioniert es noch immer nicht!?!?!?!

    Ich habe oben den Programmcode so verändert wie das Programm jetzt aussieht.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    23
    Beiträge
    98
    was macht der Asuro überhaupt??? fährter einfach nur rum oder macht er gar nichts.

    mfg liggi

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    31.01.2007
    Ort
    kerken
    Alter
    24
    Beiträge
    69
    hi
    dein fehler dürfte sein,dass du links(data[0]) nur abfragst, ob das vorher kleiner war. also werden nur die übergänge von s-->w gezählt und nicht andersherum.

    außerdem hättest du bei L_alt_l/r(was für umständliche namen xD) nicht [1] hinterschreiben müssen und ich nehme mal an, du möchtest mit der zeile
    n_l = a/8
    feststellen, wie oft sich das rad gedreht hat, so zählst du aber, wie oft sich das zahnrad davor gedreht hat.
    also müsstest du
    n_l = a/40
    schreibensollte dein programm aber td nicht daran hindern, sich richtig audszuführen, auch wenn du statt n_l und n_r zu vergleichen doch auch einfach a und b vertgleichen könntest.
    ich würde dir ausserdem empfehlen, die geschwindigkeit wieder auf 140 zu setzen, wenn links und rechts gleich sind.



    MfG


    Jan

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    hm.... aber daran kann es doch nicht liegen, dass das programm nicht funktioniert.

    Also mein asuro macht neigentlich net viel. Die Räder drehen sich ganz normal und wenn man mit einem finger ein Rad abbremst, dreht sich das andere mit konstanter drehzahl weiter.

    achja.... um den Fehler beim linken Übergangszähler wegzubekommen, baruch ja einfach nur
    if( dh_l > 200 || dh_l < -200)
    schreiben?!?!

    mfg
    Chrise

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    31.01.2007
    Ort
    kerken
    Alter
    24
    Beiträge
    69
    hi
    also ich würde dir mal empfehlen, dieses programm auszuprobieren:
    Code:
    #include "stdlib.h"
    #include "asuro.h"
    
    void SerWert(unsigned int iWert) {
        unsigned char cWert[6] = "     ";
    
        itoa(iWert, cWert, 10);
        SerWrite(cWert, 5);
        SerWrite(", ", 2);
    }
    
    /** Hauptprogramm */
    int main(void)
    {
        unsigned int Rmin = 1024;
        unsigned int Rmax = 0;
        unsigned int Lmin = 1024;
        unsigned int Lmax = 0;
        /** Geschwindigkeit */
        int speed = 90;
        /** Odometrie links/rechts */
        unsigned int data[2];
    
        Init();
        GREEN_LED_ON;
        
        MotorDir(FWD,FWD);
        MotorSpeed(speed, speed);
        
        while(1) {
            OdometrieData(data); // 0. links, 1. rechts
    
            // max links
            if (data[0] > Lmax)
                Lmax += (data[0] - Lmax) / 2;
            // min links
            if (data[0] < Lmin)
                Lmin -= (Lmin - data[0]) / 2;
            
            // max rechts
            if (data[1] > Rmax)
                Rmax += (data[1] - Rmax) / 2;
            // min rechts
            if (data[1] < Rmin)
                Rmin -= (Rmin - data[1]) / 2;
    
            SerWert(Lmax);
            SerWert(Lmin);
            SerWert(Rmax);
            SerWert(Rmin);
            SerWrite("\n\r", 2);
    
        }
        
        return 0;
    }
    damit sendet der asuro die max und min odo-werte an den pc, denn es könnte sein, dass der s/w unterschied weniger als 200 ist.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.10.2007
    Beiträge
    13
    also ich bekomm, wenn ich mir die Werte zum Computer schicken lasse, immer nur die gleichen:
    17, 5, 845, 461

    mfg

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    31.01.2007
    Ort
    kerken
    Alter
    24
    Beiträge
    69
    hi
    also wenn ich mich recht erinnere sind die ersten beiden werte für inks und die 2. beiden für rechts
    d.h., dass dein programm nur rechts funktionieren sollte. links scheint die IR-Led kaputt zu sein.


    MfG

    Jan

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    bist du sicher dass du darauf geachtet hast dass die beiden teile je nach seite verauscht wurden? auf einer seite ist rosa vorn, auf der anderen seite weiss.
    kleinschreibung ist cool!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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