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: Frank Menzel
Datum: Mo, 21.05.2007 20:27:08
In-reply-to:
<5EBE6A5E-FA0D-4F71-A283-67AB69B9C6D3@xxxxxxxxxxxxxxx>
Hallo,
in bot_turn ist ein Fehler drin, der sich folgendermaßen äußert:
Standardmäßig ist ja bot_solve_maze eingeschaltet und läuft sofort los.
Im Standardlab dreht der bot sich ja dadurch zuerst. Ich habe dies
sofort abgebrochen via Notaus-Funktion, den bot dann manuell irgendwohin
gefahren und mein Verhalten (map_go_destination) gestartet, welches sich
zuerst immer zum Endzielpunkt (sprich Bot-Ausgangsposition) ausrichtet
via bot_turn. Doch komischerweise hört oftmals die Drehung schon vorher
auf, obwohl der Zielpunkt noch gar nicht angepeilt wird.
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). Eigentlich müsste die Statusvar
ebenfalls init. Werden mit turnState=NORMAL_TURN;
Gruß, Frank Menzel