- Labornetzteil AliExpress         
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

    Praxistest und DIY Projekte
    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.147
    Blog-Einträge
    3
    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.147
    Blog-Einträge
    3
    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
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad