- UNI-T-Messgeraete    Werbung      
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Wie bestimmte Stecke zurücklegen, Encoder ?

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    19.10.2006
    Beiträge
    23
    Anzeige

    Owon Funktionsgenerator Einfuehrung
    Wie mache ich das nu genau mit den Odometrie Sensoren? Kann mir mir einer helfen?

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    hast du vor der go funktioin Encoder_Init() aufgerufen.
    sonszt geht das ganze nicht, weil dann die go funktion glaubt, der asuro würde stillstehen obwohl er fährt

    mfg EDH

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.177
    Du kannst auch einfach folgende go-Funtkion verwenden. Als Input parameter wird die Distanz in "mm" angegeben. Funktioniert je nach Bodenbeschaffenheit relativ genau.

    Gruss,
    stochri

    Code:
    /***************************************************************************
    *
    *	void Go(int distance, int power = 150)                                                                         
    *	
    *	Go distance in mm. Attention: Encoder_Init() has to be called first.
    *
    *	the driven distance depends a little bit from the floor friction
    *	limitations: maximum distance +-32m
    *	possible problems: in full sunlight the encoder sensors may be disturbed
    *
    *   input
    *	distance: postiv->go forward ; negativ-> go backward
    *   power: sets motorpower
    *
    *	example:
    *	
    *	Encoder_Init();
    *	Msleep(5000);
    *	Go(200,150); 	// move 20cm vorward
    *	Msleep(2000); 
    *	Go(-200,150);	// move 20cm backward
    *	Msleep(2000);
    *
    *
    *	last modification:
    * 	Ver.     Date         Author           Comments
    * 	-------  ----------   --------------   ---------------------------------
    * 	sto1     29.07.2005   stochri	       motorfunction
    *	And1	 31.07.2005   Andun            added speed and Odometrie
    * 	sto1     31.10.2006   stochri	       distance in mm
    * 	-------  ----------   --------------   ---------------------------------
    *
    ***************************************************************************/
    void Go(int distance, int power)
    {
    	uint32_t enc_count;
    	int tot_count = 0;
    	int diff = 0;
    	int l_speed = power, r_speed = power;
    	
    	// calculation tics/mm
    	enc_count=abs(distance)*10000L;
    	enc_count/=19363L;
    	
    	Encoder_Set(0,0);		// reset encoder
    
    	MotorSpeed(l_speed,r_speed);
    	if(distance<0) MotorDir(RWD,RWD);
    	else MotorDir(FWD,FWD);
    
    	while(tot_count<enc_count) {
    		tot_count += encoder[LEFT];
    		diff = encoder[LEFT] - encoder[RIGHT];
    		if (diff > 0) { //Left faster than right
    			if ((l_speed > power) || (r_speed > 244)) l_speed -= 10;
    			else r_speed += 10;
    		}
    		if (diff < 0) { //Right faster than left
    			if ((r_speed > power) || (l_speed > 244)) r_speed -= 10;
    			else l_speed += 10;
    		}
    	Encoder_Set(0,0);		// reset encoder
    	MotorSpeed(l_speed,r_speed);
    	Msleep(1);
    	}
    	MotorDir(BREAK,BREAK);
    	Msleep(200);
    }

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    19.10.2006
    Beiträge
    23
    Ja Go Funktion funktioniert nun, ist aber leider fehleranfällig...

    bereits hier macht er fehler:

    #include "asuro.h"

    int main(void)
    {
    Init();
    BackLED(ON,ON);
    Encoder_Init();
    Go(2000,140,130); Msleep(200);
    BackLED(OFF,OFF);
    while(1);

    return 0;
    }

    Fährt durch BackLED unendlich lang , hört nicht mehr auf zu leuchten...




    Ist das die Rechnungsformel ?

    uint32_t enc_count;
    int tot_count = 0;
    ...

    enc_count=abs(distance)*10000L;
    enc_count/=19363L;
    was passiert hier? Kann ich die Übergänge der Odometrie (...wegL++, ...wegR++;...) lesen, dann diese Formel einsetzen?

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.177
    Wenn der ASURO unendlich lange fährt, könnte das an einer Fehlfunktion Deiner Odometriesensoren liegen. Probiere das Programm mal in einm dunklen Raum aus. Oder besser: probiere ein Programm das Du nicht selbst geschrieben hast und sicher funktioniert aus. Je nach ASURO können die Schaltschwellen für die Sensoren anders liegen.

    Die Rechnung oben( ohne abs() ) stellt eine Division durch 1,9363 dar. Die Zahl wird zuerst mit 10000 multiplieziert und dann durch 19363 dividiert damit man keine Fließkommazahlen braucht.

    Gruss,
    stochri

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

    Werbung      LiFePO4 Speicher Test