## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### [ct-bot] Merkwuerdiges verhalten mit Speedcontrol

Absender: Achim Pankalla
Datum: Mi, 08.11.2006 20:11:26

    hallo,

`mir ist ein merkwuerdiges verhalten beim realen ct-bot mit Regler` `(SPEED_CONTROL_AVAILABLE) aufgefallen. ich denke, das das bei jeden bot` `auftreten muesste und waere dankbar, wenns mal jemand ausprobiert.` `es ist bei mir ganz einfach zu reproduzieren. man fährt einfach mit der` `taste 2 der fb ein stueck vor und laesst ihn dann auf der stelle mit zb.` `4 oder 9 drehen. beim ersten drehen, wird der bot dann um ein rad` `herumfahren und nicht mit beiden raedern auf der stelle drehen. ersten` `beim zweiten mal drehen macht er dies.` `anders rum. dreht man erst den bot und faehrt dann vorwaerts, so faehrt` `der bot einen leichten bogen und beim zweiten mal gerade aus.` `ich habe etwas im code gewurstelt und denke es liegt an den variablen,` `die sich die letzten encoder impulse merken. ich habe ein patch` `beigefuegt, mit dem dies "fehl"-verhalten korregiert ist. es stellt für` `mich persoenlich keine optimale loesung da, zeigt aber wirkung. rein` `subjektiv ist das fahrverhalten nun genauer und mein getestetes` `solve_maze verhalten arbeitet nun zuverlaessiger.`

    allen weiterhin viel spass
      achim pankalla

    ### Eclipse Workspace Patch 1.0
    #P ct-Bot
    Index: motor.c
    ===================================================================
    RCS file: /ctbot/ct-Bot/motor.c,v
    retrieving revision 1.12
    diff -u -r1.12 motor.c
    --- motor.c	8 Jun 2006 16:36:39 -0000	1.12
    +++ motor.c	8 Nov 2006 19:01:07 -0000
    @@ -55,7 +55,7 @@
     	 * Querkopplung der Motoren verbessert Gleichlauf, beispielsweise x*(sensEncL - sensEncR)
     	 * in jeden Regler einbauen
     	*/
    -	void speed_control(void){
    +	void speed_control(int8 com/*void*/){
     		int8 Kp=0;
     		int8 Ki=0;

    @@ -73,6 +73,13 @@
     		int16 err=0;    	        // aktuelle Abweichung vom Soll-Wert
     		int16 encoderRate=0;		// IST-Wert [Encoder-ticks/Aufruf]

    +		if(com == 1){ //speed_control variablen loeschen
    +			lastEncoderL=sensEncL;
    +			lastErrL=last2ErrL=0;
    +			lastEncoderR=sensEncR;
    +			lastErrR=last2ErrR=0;
    +			return;
    +			}

     		// Wir arbeiten mit verschiedenen PID-Parametern fuer verschiedene Geschwindigkeitsabschnitte
     		if (encoderTargetRateL <= PID_LOW_RATE){
    @@ -197,13 +204,20 @@
     		// Hier sitzt die eigentliche Regelung
     		#ifdef SPEED_CONTROL_AVAILABLE
     			if (timer_get_ms_since(old_mot_time_s,old_mot_time_ms) > SPEED_CONTROL_INTERVAL) {
    -				speed_control();
    +				speed_control(0);
     				old_mot_time_s= timer_get_s();
     				old_mot_time_ms= timer_get_ms();
     			}
     		#endif
     		return;		// Keine Aenderung? Dann zuerueck
     	}
    +
    +	// Reglervariablen loeschen, wenn bot steht.
    +	// Damit wird nachrucken, bei naechster Bewegung verhindert
    +	#ifdef SPEED_CONTROL_AVAILABLE
    +		if(!speed_l && !speed_r)
    +			speed_control(1);
    +	#endif

     	if (abs(left) > BOT_SPEED_MAX)	// Nicht schneller fahren als moeglich
     		speed_l = BOT_SPEED_MAX;

- Antworten:
  - Re: [ct-bot] Merkwuerdiges verhalten mit Speedcontrol
    - From: Timo Sandmann

- Voriger (Datum): [ct-bot] CVS-Update, Benjamin Benz
- Nächster (Datum): Re: [ct-bot] Merkwuerdiges verhalten mit Speedcontrol, Timo Sandmann
- Voriger (Thread): [ct-bot] Hauptrunden des c't-Sim-Wettbewerbs, Benjamin Benz
- Nächster (Thread): Re: [ct-bot] Merkwuerdiges verhalten mit Speedcontrol, Timo Sandmann
- Indizes:
  - Datum
  - Thread