|
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: Mi, 27.08.2008 21:06:12
In-reply-to:
<000801c9086c$4bf9ebd0$0200a8c0@mexpnew>
References:
<000801c9086c$4bf9ebd0$0200a8c0@mexpnew>
Hallo Frank,
Am 27.08.2008 um 19:42 schrieb Frank Menzel:
Hallo Timo,
Lotteriespiel ist es eigentlich nicht: Der Bot kann ja auch sowieso
nicht einen Punkt sofort hinter einem Hindernis anfahren, da muss auch
immer noch genügend Abstand dazwischen sein. Und im Sim klappt dies
auch
recht gut.
ja, aber das meinte ich nicht.
Mal angenommen kurz bevor die Wartezeit für das Observer-Verhalten
abgelaufen ist, beginnt gerade ein Map-Update, weil der Bot seit dem
letzten Map-Update die nötige Strecke zurückgelegt hat. Also fängt der
Map-Update-Thread jetzt mit seiner Arbeit an, die sagen wir mal 300 ms
dauert. Nach 10 ms wird er unterbrochen, weil die anderen Bot-
Verhalten usw. wieder drankommen sollen, hier stellt jetzt das
Observer-Verhalten fest, dass seine Wartezeit um ist und wird aktiv,
greift also auf die Map zu. Da die gerade aktualisiert wird, ist sie
gesperrt, d.h. alle Bot-Verhalten werden für 290 ms blockiert, bis das
Map-Update (s.o.) fertig ist. Fährt der Bot in dieser Zeit auf einen
Abgrund zu, reagiert das Notfallverhalten nicht (ist ja blockiert) und
der Bot stürzt vermutlich ab.
Dadurch, dass das Verhalten seltener ausgeführt wird (z.B. alle 700
ms), ist es aber noch lange nicht synchronisiert mit den anderen Map-
Aktivitäten. Darum der Vorschlag in der andere Mail.
Was Du hier meinst, ist mir nicht recht klar:
" Was mir beim Testen im Sim aufgefallen ist: Wenn der Bot bis zur
Wand
rechts (oder links) vorgedrungen ist (die aber noch nicht als
Hindernis in der Map steht), crasht er irgendwann seitlich in die Wand
und hängt dort fest. Das ist eigentlich bei allen Welten im Sim so.
Dadurch kommt es leider nie zu dem Fall, dass das Verhalten den Bot
zur anderen Seite der schon abgefahrenen Fläche schickt, was aber ja
eigentlich einer der interessantesten Fälle ist."
Der Bot muss Hindernisse in der Map aktualisieren, sonst geht's nicht.
Mit Hindernis-Aktualisierung und dem Standardparcours klappt dies bei
mir sehr gut. Er fährt erst hoch bis zur Lampe, nach rechts und wieder
runter. Nach ein paar Bahnen kommt er an der Mittelwand an und fährt
dann zur Bahn links neben der ersten (die hochgefahren wurde zur
Lampe)...
Ja und jetzt lass es mal weiterlaufen, dann bleibt der Bot in der Ecke
oben links (von der unteren Welt-Hälfte) stehen und tut nichts mehr.
Oder beim Parcours "testbots_home.xml", da passieren ganz komische
Sachen, erst fährt er Bot recht oft über dieselbe Bahn und
anschließend bleibt er einfach stehen.
Probiere mal den Parcours "angle-word-lamps.xml" und warte, bis der
Bot an der rechten Außenwand angekommen ist, dann wird vielleicht
klar, was ich meine.
Ich habe mal einen Screenshot des Crashs und die dazugehörige Map an
die Mail angehängt (falls die Liste Grafiken zulässt? Mal schauen...).
Also der echte Bot macht bei mir recht komische Sachen, die ich noch
nicht so genau einordnen kann. Ich denke aber, dass das Ganze so auch
nicht richtig funktionieren kann aus dem im ersten Absatz
angesprochenem Grund. Ob das Verhalten jetzt aber (nur) daran liegt,
weiß ich noch nicht.
Gruß Timo
|
|