c't

c't-Projekte - Mailinglisten


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

Re: [ct-bot] delay im ct-Sim

Absender: Timo Sandmann
Datum: So, 10.04.2011 16:39:55
In-reply-to: <BANLkTinyfDv0rvqd=PDsP6k2pYt5XpP7rg@xxxxxxxxxxxxxx>
References: <BANLkTinyfDv0rvqd=PDsP6k2pYt5XpP7rg@xxxxxxxxxxxxxx>


Hallo Sebastian,

Am 09.04.2011 um 17:34 schrieb Sebastian Wozny:
> Ich habe festgestellt, dass sich das Verhalten der delay Funktion im
> Simulator sehr stark von dem Verhalten im Roboter unterscheided.
> Könntest du etwas dazu  sagen wie man die delay Funktion im Simulator
> sinnvoll anwendet? Bei mir Verzögert sie nicht die Simulierte Zeit sondern
> bewirkt lediglich, dass der Simulator als ganzes langsamer ausgefuehrt wird,
> d.h. ein delay(500) bewirkt, dass ein Tick der simulierten Zeit ( 0.01s)
> eine halbe Sekunde dauert. Erwartet hatte ich , dass die Simulierte Zeit
> normal weiterläuft und die Aktion des Roboters um eine halbe Sekunde
> verzoegert wird, wie es auch auf dem realen Roboter funktioniert.

Du hast Recht, dass sich die delay-Funktionen aus delay.h für MCU und PC stark unterscheiden. Für MCU sind sie für die low-level Hardwaretreiber vorhanden und sollten auch nur dort benutzt werden, weil es sonst unerwünschte Seiteneffekte gibt. Warum delay() auch für PC implementiert ist, weiß ich nicht. Sinnvoll ist es dort nicht und wird deshalb auch nirgends benutzt. Vielleicht war es früher einmal für irgendetwas nötig. 
Es ist für PC deshalb nicht sinnvoll, weil es (wie Du schon beschrieben hast) nicht X ms (auf die Bot-Zeit bezogen) verstreichen lässt, sondern im Prinzip die Bot-Uhr für die Zeit eines Sim-Ticks langsamer laufen lässt (so dass die Simulation eines Ticks dann mindestens X ms dauert).

Was Du vermutlich möchtest, die Ausführung von high-level Code um X ms verzögern, wird vom Verhalten bot_delay() bereitgestellt. Zur einfacheren Verwendung dieses Delay-Verhaltens gibt es außerdem das Makro BLOCK_BEHAVIOUR(). Beides ist in include/bot-logic/behaviour_delay.h deklariert.
Mit dem Delay-Verhalten bekommst Du auf dem echten Bot und in der Simulation dasselbe Ergebnis und es wird weder das Bot-Framework noch die Simulation ausgebremst.

Grüße,
Timo