|
 |
 |
 |
|
|
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, 18.06.2008 13:42:44
In-reply-to:
<000001c8d09e$f363bff0$0200a8c0@mexpnew>
References:
<000001c8d09e$f363bff0$0200a8c0@mexpnew>
Hallo,
Am 17.06.2008 um 19:23 schrieb Frank Menzel:
Hallo,
habe mich mal etwas mit der bot-2-bot-Kommunikation beschäftigt.
Rausgekommen ist, dass nun der Stack eines Bots zu den anderen
Remote-Bots übertragen werden kann und anschließend auf ihnen das
Stack-Fahrverhalten gestartet wird.
das ist ja mal eine interessante Idee. :-)
...
gefahren werden). Bei aktivierter Bot-2-Bot Kommunikation kann nun via
Taste 9 der Stack auf die Remote-Bots übertragen werden und
anschließend
fahren diese den Stack ab.
Aber warum wird der Stack gleich per Broadcast an alle Bots im System
geschickt? Wäre es nicht besser, man wählt einen Bot aus, an den die
Daten geschickt werden?
Wird ein 2. Bot auf dieselbe
Ausgangsposition wie der 1. Bot gesetzt, so fährt dieser exakt
denselben
Weg ab, den der 1. Bot genommen hat. Leider habe ich nicht 2 reale
Bots
mit Funk um dies zu testen :-(
Man kann auch von Sim-Bots an einen realen Bot (z.B. per USB
angeschlossen) Nachrichten schicken.
Im sim ist dies schon recht
beeindruckend, wenn 2 Bots direkt nebeneinander platziert werden, der
eine dem anderen zum Schluss seinen Weg übermittelt und dann beginnt,
die Strecke abzufahren. Leider hat jeder Bot für sich seine eigene
Vorstellung von den Positionen innerhalb seiner eigenen Welt, da es
keine globale Positionen gibt. Also wird es nicht derselbe Weg sein,
wenn die Bots nicht auf demselben Ausgangspunkt starten. Bei
nebeneinander-Start ist es die Bahn daneben aber eben im Sim nicht
anders machbar
Warum? Du kannst Bot 2 doch im Sim an die Ausgangsposition von Bot 1
stellen.
Bei der Implementierung ist mir aufgefallen, dass wieder ein Array
gefüllt werden muss mit den Routinen, die ein Bot empfangen kann. Kann
man hier nicht möglicherweise bereits auf die Remote-Calls
zurückgreifen
?
Nein die Remote-Call-Liste enthält die Botenfunktionen für Verhalten,
die man starten kann. In der Liste der Auswertungsfunktionen für die
Bot-2-Bot-Kommunikation stehen die Funktionen, die die übermittelten
Daten entgegennehmen. Das hat nichts mit den Verhalten gemeinsam.
Wir könnten ganz allgemein mal überlegen, ob es Sinn macht, dass ein
Bot per Remote-Call ein Verhalten auf einem anderen Bot starten kann
(das entspricht hier dem go-Befehl).
Meinungen dazu?
Bei dem Patch sind aber noch ein paar andere Dinge unklar:
1. Beim Empfang einer Stack-Position oder eines Startbefehls geht ein
Bot seine lokale Liste mit allen bekannten Bots durch und führt für
jeden Bot in der Liste z.B. bot_push_pos() aus, d.h. bei 5 Bots in der
Liste, wird die empfangene Stack-Position 5 mal auf den eigenen Stack
gepusht, warum das?? Ebenso wird das bot_drive_stack-Verhalten 5 mal
gestartet, wenn ein go-Befehl kommt. Ich glaube hier liegt irgendwie
ein Denkfehler vor. Mag sein, dass das an der noch nicht vorhandenen
Dokumentation liegt, dazu bin ich noch nicht gekommen, sorry.
Eigentlich hat der Stack-Datenempfang ja mit der lokalen Bot-Liste gar
nichts zu tun.
2. Das Verfahren wird auf realen Bots vermutlich nicht funktionieren,
weil jede Stack-Position als ein Kommando übertragen wird. Es kommen
beim Bot also N Kommandos auf einen Schlag an, wenn der Stack N
Einträge enthält. Es passen aber maximal 4 Kommandos in den
Empfangspuffer des Bots, der Rest geht (ohne irgendwelche Hinweise)
verloren.
Der Bot-Code ist bisher nicht dafür ausgelegt, große Datenmengen zu
empfangen. Das Thema habe ich in einem anderen Zusammenhang schon auf
der ToDo-Liste. Am besten wäre eigentlich, wenn man die Daten als
Payload überträgt, aber nicht sofort, wie es zurzeit z.B. bei den
Remote-Calls ist, sondern dass der Bot beim Empfang eines Kommandos
die Payload beim Sim abholt. Der Sim müsste die Daten dafür natürlich
so lange puffern (IMHO ist das aber kein Nachteil). Dann könnten wir
eine Funktionen zum Payload-Abholen machen, die dann von verschiedenen
Codeteilen benutzt werden kann, z.B. für den Positions-Stack oder
Dateien und Programme, die man zum Bot übertragen möchte. Ich glaube,
das wäre die einzig stabile Lösung, um mehr als ein paar Bytes zu
einem realen Bot übertragen zu können. Der Nachteil ist allerdings,
dass wir schon wieder am Bot-2-Sim-Protokoll schrauben müssten.
Meinungen hierzu?
Gruß Timo
|
|
|