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, 03.06.2007 17:18:12
In-reply-to:
<000201c79bd5$a09e80b0$fe78a8c0@mexpnew>
References:
<000201c79bd5$a09e80b0$fe78a8c0@mexpnew>
Hallo,
Am 21.05.2007 um 20:26 schrieb Frank Menzel:
...
Dem bin ich nachgegangen und habe festgestellt, dass wenn man via
Notaus
das bot_turn-Verhalten mittendrin abbricht (also noch nicht
ordnungsgemäß Drehung beendet hat), so behalten die static-
Variablen den
letzten Wert. Ein anderes Verhalten ruft nun bot_turn auf und die
Variablen haben weiterhin den alten Wert ohne bei neuem Aufruf neu
initialisiert zu werden und die Drehung ist nicht so wie sie sein
sollte, d.h. hört vorher auf.
Hier muss auf jeden Fall die Deklaration der static-Var old_heading
aus
der behaviour-Routine rausgenommen werden und zusätzlich in der
Botenroutine mit old_heading=-1; initialisiert werden (so wie
eigentlich
auch direkt vor return_from_behaviour).
ich habe gerade mal die vorhandenen Verhalten auf das von Frank
beschriebene Problem hin untersucht, die folgenden Verhalten sind
davon betroffen und sollten geändert werden:
bot_drive_square
bot_follow_line
bot_goto
bot_gotoxy
bot_olympic::bot_explore
bot_olympic::bot_do_slalom
bot_simple
bot_solve_maze
bot_solve_maze::bot_check_wall
bot_solve_maze::bot_measure_angle
bot_turn
Außerdem ist mir bei bot_goto() noch etwas sehr seltsames
aufgefallen, als Initialisierung passiert dort:
/* Encoder zuruecksetzen */
sensEncL=0;
sensEncR=0;
Das ist IMHO aber gar nicht gut, weil dadurch u.a. die
Positionsberechnung nicht mehr stimmen dürfte. Vielleicht sollten wir
bot_goto() komplett löschen und stattdessen nur noch bot_gotoxy()
verwenden?
Viele Grüße,
Timo