heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · Open Source · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

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] Stackimplementation und Verhalten bot_drive_stack

Absender: Timo Sandmann
Datum: Sa, 15.12.2007 18:39:43
In-reply-to: <000001c83e8a$1d59ea20$0200a8c0@mexpnew>
References: <000001c83e8a$1d59ea20$0200a8c0@mexpnew>


Hallo,

ein Stack für die Bot-Positionen ist auf jeden Fall eine gute Sache. Aber warum ist der Stack denn als verkettete Liste implementiert? Mit einem einfachen Array liegen push() und pop() doch auch schon in O(1). Außerdem haben malloc() und free() auf dem echten Bot viel zu viel Overhead, zumal das in diesem Fall auch gar keinen Vorteil bringt, oder? Das Speichern / Laden einer Position vom Stack braucht IMHO auch kein eigenes Verhalten zu sein, es müssen ja nur einmal die Werte gespeichert oder zurückgegeben werden und fertig. Wenn man bot_set_stackpos(0,0) aufruft, wird die aktuelle Bot-Position gespeichert, aber was ist, wenn ich die Position (0,0) auf den Stack pushen will? Da fände ich eine zusätzliche inline-Funktion wie push_actual_pos() besser, die einfach bot_set_stackpos(pos_x, pos_y) "aufruft" eleganter.

Alles was "stack" heißt, vielleicht besser in "pos_stack" umbenennen, das ist ja nicht der einzige Stack im System. Außerdem wäre es ganz gut, die übliche Namenkonvention einzuhalten, also eigene Datentypen enden auf _t usw.

Wäre es nicht auch sinnvoll, die Positionen automatisch zu speichern, sobald ein Wechseln von Verhalten A zu Verhalten B auftritt? Wenn man jetzt noch die ID des jeweiligen Verhaltens speichert (und 0 für selbst gesetzte Positionen z.B.), wäre recht leicht nachzuvollziehen, welches Verhalten was veranlasst hat. Das ist vor allem interessant, wenn ein Notfallverhalten aktiv wurde. Oder für ein Rollback von Verhalten. Mal so als Erweiterungsidee...

Gruß Timo


Am 14.12.2007 um 20:47 schrieb Frank Menzel:
Hallo,
anbei mal ein Patch zur Implementation eines Stacks. Es können
Int16-Punktkoordinaten abgespeichert werden mittels push_pos oder von
dort mittels pop_pos wieder entnommen werden.
Ein kleines Verhalten bot_drive_stack fährt die vom Stack entnommenen
Punkte der Reihe nach wieder an mittels dem relativ neuen Verhalten
behaviour_goto_pos (Taste 4 auf dem neuen Screen). Wenn der Bot durch
die Gegend gefahren wird, so können mittels der Taste 3 die
Botpositionen jeweils auf dem Stack gebracht werden. Die Wegstrecke wird
somit rückwärts wieder abgefahren. Das Ganze funktioniert bei mir auch
bestens mit dem echten bot. Da behaviour_goto_pos nur mit der
Motorregelung funktioniert, so muß dies auch eingeschaltet werden.
Das Setzen der Koordinaten als auch das Abfahren der Stackpunkte wurden
als kleine Verhalten geschrieben und sind somit via Remotecall
aufrufbar.
Somit kann der Punkt aus der todo-Liste gestrichen werden.
Bin schon dabei, den Stack für ein anderes Verhalten zu benutzen, aber
dazu in wenigen Wochen...

Gruß, Frank Menzel
<patch_drive_stack.txt>_______________________________________________
ct-bot-entwickler Mailingliste
ct-bot-entwickler@xxxxxxxxxxxxxxxxx
http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler





Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum