|
 |
 |
 |
|
|
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: So, 30.03.2008 18:17:15
Hallo,
Am 30.03.2008 um 13:25 schrieb Frank Menzel:
Hallo,
also die Routine habe ich fast kopiert aus behaviour_goto_pos, wo es
da
heisst:
/* Noch in die gewuenschte Blickrichtung drehen */
int16_t to_turn = (int16_t)(dest_head -
(int16_t)heading) % 360;
if (to_turn > 180) to_turn = 360 - to_turn;
else if (to_turn < -180) to_turn += 360;
LOG_DEBUG("to_turn=%d", to_turn);
bot_turn(NULL, to_turn);
Soll eben nur die Winkeldifferenz berechnen... Tiefschürfende Gedanken
habe ich über die einzelnen Zeilen nicht verloren, da die Routine ja
wie
gewollt zur Differenzermittlung zwischen Winkeln funktioniert...
nun ja, der Code dort hat aber eine andere Aufgabe: Es soll berechnet
werden, wie weit sich der Bot drehen muss, um einen Zielwinkel zu
erreichen. Dabei soll er sich so herum drehen, dass die Drehdauer
möglichst kurz ist. Wenn er z.B. nach 40 Grad schaut und der
Zielwinkel 340 Grad ist, soll er sich nicht um 300 Grad, sondern um
-60 Grad drehen.
Das entspricht aber weder der Dokumentation von
calc_diff_from_angles() noch ist es das, was du beim Stackverhalten
möchtest. Dort soll ja geprüft werden, wie weit sich der Bot
tatsächlich gedreht hat (also z.B. um 300 Grad von 340 Grad bis 40
Grad) und nicht der kleinste Drehwinkel zwischen zwei Position
berechnet werden.
Eine allgemeine Funktion, die ermittelt, wie weit sich der Bot gedreht
hat, finde ich schon sehr sinnvoll, die lässt sich bestimmt auch in
anderen Verhalten noch gut anwenden. Nur sollte sie dann auch wirklich
das berechnen, was beschrieben ist ;-)
Vielleicht machen wir die Funktion so, dass sie berücksichtig, in
welche Richtung sich der Bot gerade bewegt und dann den gedrehten
Winkel seit einem alten heading zurückgibt?
Gruß Timo
|
|
|