- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: rotation fehler

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.12.2007
    Beiträge
    280

    rotation fehler

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    mein RP6 ist ziemlich neu. Ich versuch zur Zeit Hindernisse zu erkennen und auszuweichen. Ich hab mir die Beispiele (vor allem MOVE_05) genau angeschaut und hab nach demselben Prinzip ein Alogirthmus zum ausweichen geschrieben. Der roboter sollte dabei, falls Bumper/ACS ein Hindernis melden, ein Stück zurückfahren,sich um einen bestimmten Winkel drehen, ein stück vorfahren und sich dann um denselben Winkel entgegengesetzt drehen. Er sollte dann gerade aus weiter, nur parallel verstetzt am Hindernis vorbeifahren. Des sollte ja nicht so schwer sein.
    Code:
    moveAtSpeed(0,0);		  //Bremsen
    move(BWD_SPEED_FASTER, BWD, DIST_MM(RANGE), BLOCKING);  //zurückfahren
    rotate(BWD_SPEED_SLOWER, RIGHT, 30, BLOCKING);			 //Drehen
    move(BWD_SPEED_FASTER, FWD, DIST_MM(RANGE*2), BLOCKING);//Vorwärts (am Hindernis vorbei) fahren
    rotate(BWD_SPEED_SLOWER, LEFT, 30, BLOCKING);	//zurückdrehen
    //dann geradeaus weiter
    Das erste mal dreht er sich richtig, doch beim zweiten Mal, hält er in der gewünschten Position kurz inne, und dreht sich dann ungewollt weiter (um welchen Winkel hab ich noch nicht herausgefunden). Nachdem ROTATE sonst immer funktioniert, denk ich mal, dass es kein Hardwarefehler ist. Aber wo hab ich einen Fehler gemacht?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Hallo Martin,

    (um welchen Winkel hab ich noch nicht herausgefunden).
    Sind es weniger als 10°?
    Die RP6Lib versucht den Roboter kurz bevor die gewünschte Distanz (bzw. Winkel) erreicht wurde abzubremsen. Es könnte sein, dass in diesem Fall das abbremsen etwas zu stark oder schnell passiert und dann die Geschwindigkeitsregelung die Motorleistung zu stark reduziert und die Bewegung so unterbrochen wird.
    Das ist auch ein wenig von der Geschwindigkeit, Gewicht, Untergrund etc. abhängig - es wäre noch interresant welche Werte Du für BWD_SPEED_FASTER und BWD_SPEED_SLOWER bisher getestet hast.
    Teste es auch mal mit anderen Werten!

    Du könntest mal probeweise in der Datei "RP6RobotBaseLib" die Zeilen 616
    if(mleft_des_speed < 22) mleft_des_speed = 22;
    und 630
    if(mright_des_speed < 22) mright_des_speed = 22;

    in
    if(mleft_des_speed < 30) mleft_des_speed = 30;
    und
    if(mright_des_speed < 30) mright_des_speed = 30;

    ändern (Werte bis 40 kannst Du auch ausprobieren).
    Die Zeilennummern gelten für die aktuellste Version der RP6Lib. Diese beiden Zeilen befinden sich in der Funktion "task_motionControl".

    Abspeichern und Make clean und make all nicht vergessen!

    MfG,
    SlyD

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    25.12.2007
    Beiträge
    16
    Ich klaube ich habe den Fehler,
    du sagst den Robby am Ende bestimmt, dass er weiterfahren soll, nämlich mit den Befehl: moveAtSpeed (100,100)
    Leider ist noch eingestellt, durch den Vorigen Dreh-befehl, dass die linke Kette rückwärts und die rechte Vorwärts läuft. Das heist das er sich weiterdreht. Um beide Motoren vorwärtsfahren zu lassen musst du noch den Befehl
    Code:
    changeDirection (FWD);
    hinzufügen.
    Also muss es am Ende so aussehen:
    Code:
    moveAtSpeed(0,0);        //Bremsen 
    move(BWD_SPEED_FASTER, BWD, DIST_MM(RANGE), BLOCKING);  //zurückfahren 
    rotate(BWD_SPEED_SLOWER, RIGHT, 30, BLOCKING);          //Drehen 
    move(BWD_SPEED_FASTER, FWD, DIST_MM(RANGE*2), BLOCKING);//Vorwärts (am Hindernis vorbei) fahren 
    rotate(BWD_SPEED_SLOWER, LEFT, 30, BLOCKING);   //zurückdrehen 
    //dann geradeaus weiter 
    changeDirection (FWD);     //beide Ketten auf vorwärts
    moveAtSpeed (100,100);     //weiterfahren
    Ich hoffe das ich dir helfen konnte,
    Stratege993

    p.s. Die Rechtschreibfehler einfach ignorieren, habe grade kaum Zeit

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    39
    Beiträge
    1.516
    Oh - klar - wenn der Winkel deutlich größer als 10° sein sollte, ist das was Stratege993 sagt wohl der Grund

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.12.2007
    Beiträge
    280
    Hey danke. Das war wirklich der Fehler. Ich hab jetzt "changeDirection" berücksichtigt und es funktioniert ohne probleme.

    Vielen dank!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    .....changeDirection (FWD);....


    warum wir hier die einfachste logik übersehen.
    intensiver lesen, sich mehr mit dem programm auseinandersetzen.

    es soll alles schnell gehen....dies...das...usw.
    daran erkennt man das die programme nicht durchdacht werden und sich mit dem problem nicht auseinandersetzt wird. ich habe das gefülhl, das der rp6 mit einem ferngelenkten rc-auto verwechselt wird, vom vernünfigen proggen will keiner was wissen. schade eigentlich.

    mfg
    copy/paste

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.12.2007
    Beiträge
    280
    Ich programmiere seit Jahren. Erst in TurboPascal dann in Delphi und seitdem in C++. Dabei war mein Lieblingsgebiet IndyClients. Ich habe mich sehr lange mit dem Fischertechnik Interface beschäftigt und bin deshalb der Robotik nicht sooo fern. Copy und Paste ist bei mir nicht das Programm, sondern eher nervige Forenuser auf die Ignorierliste setzen.

    Es mag ja eine Anfängerfrage sein, aber das hier ist ja immerhin auch kein Forum nur für Profis.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    ....Fischertechnik Interface beschäftigt .....

    ist mit dem atmega und deren programmverhalten nicht zu vergleichen.

    mit dem interface von fischertechnik konnte man nur über die parallele schnittstelle arbeiten und eine handvoll logo-ähnlichen befehlen das ausführen beibringen.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    hey habe da ne ähnlich frage!
    undzwar soll der roboter 2m vorwärts fahren sich um 90° deren 10cm fahren, sich um 90° derehen und dann wieder 2m forwärts auf mich zu... zu zeit färt er immer eine schleife die zwar auch ganz nett ist, aber nicht gewollt
    Code:
    #include "RP6RobotBaseLib.h" 	
    
    
    
    #define MOVE_SPEED 110
    
    #define TURN_SPEED 65
    
    
    
    int main(void)
    
    {
    
    	initRobotBase(); 
    
    
    
    	mSleep(2500);
    
    	
    
    	powerON();
    
    
    
    	uint8_t move_count = 0;
    
    	uint8_t turn_direction = LEFT; 
    
    	
    
    	while(true) 
    
    	{		
    
    		
    
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    
    		
    
    		rotate(TURN_SPEED, turn_direction, 101, BLOCKING);
    
    		
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		
    		rotate(TURN_SPEED, turn_direction, 101, BLOCKING);
    
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    		
    
    		if(move_count =1 )
    
    		{
    
    			mSleep(1000);
    
    		
    
    			rotate(TURN_SPEED, turn_direction, 103, BLOCKING);
    
    			
    
    			if(turn_direction == LEFT)
    
    				turn_direction = RIGHT;
    
    			else
    
    				turn_direction = LEFT;
    
    				
    				move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    				
    				rotate(TURN_SPEED, turn_direction, 101, BLOCKING);
    
    			
    
    			if(turn_direction == LEFT)
    
    				turn_direction = RIGHT;
    
    			else
    
    				turn_direction = LEFT;
    
    			
    			move_count = 0;
    
    		}
    
    		else
    
    			move_count++; 
    
    	}
    
    	return 0;
    
    }
    zudem scheinen meine encoder noch nicht ganz perfekt zu sein, deshalb habe ich 101 als winkel angegeben, da er auf dielen fährt sollte er nicht zu sehr wegrutschen...
    MfG carlitoco

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2007
    Beiträge
    386
    ...zu... zu zeit färt er immer eine schleife die zwar auch ganz nett ist, aber nicht gewollt....

    ganz einfach. auf der hochachse rotieren lassen( eine kette vorwärts und eine kette rückwärts)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus