c't

c't-Projekte - Mailinglisten


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

[ct-bot] Skriptsprache zur Bot-Programmierung

Absender: Timo Sandmann
Datum: Do, 10.11.2011 21:55:47


Hallo,

es gibt jetzt ein neues Bot-Verhalten (bot_abl_behaviour), das ja vielleicht jemanden interessiert: Es führt Skript-Programme aus, die auf der SD-Karte oder (wenn sie klein genug sind) im EEPROM gespeichert sein können. Die Skripte starten dabei im Wesentlichen andere Bot-Verhalten über den RemoteCall-Mechanismus. Außerdem gibt es Kontrollstrukturen (if und for), Sprünge und einen Stack. Auf dem Stack wird auch das Ergebnis des gestarteten Verhaltens gespeichert, so dass das Skript darauf reagieren kann. 

Insgesamt handelt es sich jedoch nicht um eine vollständige Programmiersprache, es gibt z.B. keine Mathematischen Befehle oder Variablen. Wer das braucht, sollte stattdessen das uBasic-Verhalten verwenden, das da deutlich mehr kann (und das hiermit nicht ersetzt werden soll).
Die Idee zu diesem Skript-Verhalten entstand schon vor ein paar Jahren, damals war der Programmspeicher auf dem Bot noch deutlich beschränkter als heute mit einem ATmega1284P. Daher ist das Verhalten so entworfen, dass es möglichst klein ist (belegt ca. 2.7 KB Flash inkl. der Empfangsroutinen für Programme vom Sim) und die Syntax so, dass sie einfach zu parsen ist. Damals gab es allerdings noch keine Möglichkeit, auf der SD-Karte Dateien anzulegen, darum hatte ich das Verhalten nicht fertiggestellt - inzwischen geht das bekanntlich und deshalb habe ich es jetzt mal an den aktuellen Bot-Code angepasst und in SVN gestellt. 
Wer Interesse daran hat, kann es als (deutlich abgespekte!) Alternative zu uBasic (es wird derselbe Programm-Editor im Sim verwendet) einsetzen, ansonsten stört es nicht weiter, weil es nur ein Verhalten ist, das standardmäßig deaktiviert ist. 

Dokumentation gibt es noch keine, aber ein Beispiel-Programm und der Sim-Editor kann auf Knopfdruck auch ein Mini-Beispiel erzeugen. Am Anfang der Verhaltensdatei ist außerdem eine Definition der Syntax angegeben. Wer Fragen dazu hat, benutzt am besten einfach die Mailingliste.

Ein (älteres) Video, wo der Bot ein "Labyrinth" per Skript löst (also im Prinzip ein vereinfachter Nachbau von solve_maze() in der Skriptsprache), habe ich mal mit in die Galerie des Wikis aufgenommen. Das solve_maze-Skript ist allerdings nicht sehr robust gegen Störungen und auch nur als Beispiel zu sehen, was man so damit anstellen kann. 


Noch zwei Hinweise: 
1. Das Sim-Fenster bietet auch die Möglichkeit, ein geladenes oder eingegebenes Programm syntaktisch zu überprüfen, der erste Fehler wird dann rot hervorgehoben. Zusätzlich zur Syntax wird dabei übrigens auch überprüft, ob ein (per RemoteCall) zu startendes Verhalten auf dem Bot überhaupt vorhanden ist.

2. Die ursprüngliche Idee zu diesem Skript-Interpreter sah auch noch vor, ein kleines (PC-) Programm zu entwickeln, mit dem sich auf grafische Art und Weise ein Bot-Verhalten zusammenstellen (klicken) lässt. Und das Ergebnis hätte dann als solch ein Skript-Programm exportiert werden sollen, so dass man also ein Programm, das Unterverhalten aufruft und entsprechende Bedingungen auswertet, per Mausklick erzeugen kann. Dann bräuchte man weder mit C noch einer Skriptsprache zu arbeiten, um den Bot zu programmieren. Ich bin leider nie dazu gekommen, das anzugehen. Falls jemand Interesse haben sollte, so etwas umzusetzen, würden wir das natürlich gern mit ins Projekt integrieren. 


Gruß,
Timo