|
 |
 |
 |
|
|
c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
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
|
|
|