c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Determinismus im Sim [war: Aenderungen im Pfadplanungsverhalten->area-Verhalten]

Absender: Timo Sandmann
Datum: Mi, 03.06.2009 17:19:57
In-reply-to: <B6710E63-8CAE-4156-AA99-F888FE91CB34@xxxxxxxxxxxxxxx>
References: <000601c9e154$c42129e0$0200a8c0@mexpnew> <B6710E63-8CAE-4156-AA99-F888FE91CB34@xxxxxxxxxxxxxxx>


Hallo,

kurz zur Information: Mit dem aktualisierten Bot-Code sollte sich der Bot jetzt in jedem Simulationslauf identisch verhalten, wenn die EEPROM-Emulation (EEPROM_EMU_AVAILABLE) AUSgeschaltet ist. Sobald man die EEPROM-Emulation aktiviert, hängen die Fahrverhalten immer von den Werten ab, die in der EEPROM-Datei stehen und verhalten sich somit nicht jedes Mal gleich.

Falls jemand in diesem Fall trotzdem noch Unterschiede feststellt, bitte melden.

Grüße,
Timo


Am 01.06.2009 um 15:44 schrieb Timo Sandmann:
Hi Frank,

Am 30.05.2009 um 20:30 schrieb Frank Menzel:
Hi Timo,
sind nicht immer dieselben Strecken, die er in gleicher Reihenfolge
genauso abfährt wie im Lauf zuvor. Aber ist das nicht normal? Ich dachte schon. Erklärt habe ich's mir dadurch, dass er manchmal nah an eine Wand
fährt und der Punkt daneben eben manchmal noch als anfahrbar gilt und
manchmal nicht, je nachdem wie er die Hindernisse gesehen und in die Map eingetragen hat. Und bei bot_turn richtet er sich zum Ausrichten auf den
Zielpunkt ja wohl gewollt auch nie ganz genau mit diesem Winkel aus
(habe ich jedenfalls noch so aus einer Mail von Dir aus vergangener Zeit
in Erinnerung). Und ist ein Punkt der anzufahrenden Strecke nicht
anfahrbar aber der andere, dann fährt er eben zuerst die Strecke von der
anderen Seite an.

da hast du aus Sicht des Verhaltens völlig Recht und genau so wird es auch auf dem echten Bot ablaufen. Aus Sicht des Simulators ist es aber ein wenig anders. Der Sim bekommt in jedem Zeitschritt die Eingangsdaten vom Bot (z.B. wie schnell die beiden Motoren drehen) und berechnet daraus alle Sensordaten, die er an den Bot schickt. Diese Sensordaten sind nicht 100%ig exakt, aber die Berechnung ist immer dieselbe, also ist auch der (systembedingte) Fehler immer gleich. Jeder Bot mit derselben Vergangenheit bekommt also auch dieselben Sensordaten vom Sim, egal wann dieser Durchlauf stattfindet. Wenn das Verhalten auf dem Bot jetzt keine zufälligen Teile enthält, wird es aus den Sensordaten auch immer dieselben Fahrbefehle ermitteln. Und daher müsste auch drive_area() im Sim immer dieselben Bahnen abfahren. Da das aber offensichtlich nicht der Fall ist, scheint mir hier im Sim oder Bot- Framework ein Bug zu sein, der eine Abhängigkeit von irgendwelchen externen Umständen erzeugt.

Gruß,
Timo