c't

c't-Projekte - Mailinglisten


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

Re: [ct-bot] turned_angle() fehlerhaft ?

Absender: Timo Sandmann
Datum: Do, 19.06.2008 14:24:08
In-reply-to: <48C139945BA47F4DB4DE05DF62CD57AA03B51B4BB1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <48C139945BA47F4DB4DE05DF62CD57AA03B51B4BB1@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>


Hallo,

Am 19.06.2008 um 14:03 schrieb Menzel, Frank IT-OO4:
<snip>
Als Beispiel hier mal einen Wert. Der Bot hat den Merkwinkel von 330 Grad (mit diesem wird immer wieder die Routine aufgerufen) und hat jetzt nach Drehung (im neg. Sinn) die Ausrichtung von 4. Die Routine gibt nun den Differenzwinkel von 326 zurück, was zwar rein mathematisch stimmt aber nicht während der Drehung. Es müssten 34 sein, da der Bot sich ab 330 Grad gedreht hat, die 360 mit Überlauf erreicht wurden und nun weitere 4 Grad, was 34 ergeben.

nein, wenn im negativen Sinn gedreht wird, dreht sich der Bot von 330 Grad nach 320 Grad, nach 310 Grad, .... bis 4 Grad, hat sich also um 326 Grad gedreht. Es gibt keinen Überlauf in diesem Fall.

Dreht sich der Bot hingegen im positiven Sinn von 330 Grad nach 4 Grad (diesmal mit Überlauf), wird folgender Code ausgeführt:

/* Drehung im positiven Sinn */
diff = (int16_t)heading - angle;		// im Beispiel: diff = 4 - 330 = -326
if (diff < 0) {
	/* Ueberlauf */
	diff += 360;					// im Beispiel: diff = -326 + 360 = 34
}
return diff;						// im Beispiel: return 34


Gruß Timo