c't

c't-Projekte - Mailinglisten


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

Re: [ct-bot] bot-2-bot-Kommunikation -> Senden der Stackdaten

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