Niko (Roboter) per Tastatur steuern ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
xXSaschaXx
User
Beiträge: 3
Registriert: Mittwoch 29. Februar 2012, 20:18

Mittwoch 29. Februar 2012, 20:32

Hallo Phyton-Forum,

derzeit arbeiten wir in der Schule mit dem Roboter Niko
(NIKO, der objektorientierte Roboter)
und da wir alles derzeit per Befehle schreiben (umdrehen():,..) hatte
ich die Idee den Roboter so umzuprogrammiren das man diesen mit
der Tastatur steuern kann.
Da ich nun ein Anfänger in Sachen Phyton bin habe ich mir erhofft
das die Profis hier unter euch mir da ein wenig helfen können.
Also nun meine Frage: Kann ich den Roboter umprogrammieren so dass man diesen
per Tastatur steuern kann ? (Pfeiltasten zum gehen und eine Taste zum aufheben der Werkzeuge welche man im Mapeditor platzieren kann.)

Ich hoffe das ihr mir weiter helfen könnt :)
Mfg Sascha
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Mittwoch 29. Februar 2012, 20:55

Wenn NIKO zusammen mit Tkinter (bzw. einer anderen bekannten GUI) genutzt wird, dürfte dein Vorhaben mithilfe von Keybindings (an welche die entsprechenden Funktionen gebunden werden) lösbar sein. Phyton beherrschen wir hier leider nicht, deswegen musst du selbst nach einer Lösung googeln :(
nezzcarth
User
Beiträge: 718
Registriert: Samstag 16. April 2011, 12:47

Mittwoch 29. Februar 2012, 21:00

Ich kenne nur das "alte" NIKI auf Basis von Pascal, ich nehme an, du meinst diesen. Eingaben kann man in Python normaler Weise mit raw_input/input entgegennehmen, oder so, wie webspider meinte. Allerdings sind diese Umgebungen garnicht für solche Dinge gedacht. Eigentlich steckt da der didaktische Gedanke hinter, in einer stark vereinfachten Umgebungen die Grundlagen zu lernen. 'Mein' Niko kannte zum Beispiel auch keine Variablen. Ich an deiner Stelle würde daher nicht so viel Energie da rein stecken, die Sachen, die der Lehrer euch zeigt, mitmachen und mich auf das 'richtige' programmieren, das danach anfängt freuen ;)


Abgesehen davon gibt es so Programmierspiele, bei denen man virtuelle Kampfroboter gegeneinander antreten lässt. Für Python habe ich sowas noch nicht gesehen, gibt es aber bestimmt auch.
Benutzeravatar
Kebap
User
Beiträge: 421
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Mittwoch 29. Februar 2012, 22:20

Hallo Sascha,

ich glaube, das wirst du so nicht so einfach hinbekommen, aber macht auch nix: Niko sollst du ja gar nicht immer nur selbst steuern, sondern du wirst lernen, wie du ihm ein Programm gibst, und mit Schleifen und Abfragen eine durchaus komplexe Steuerung bauen kannst. Dann musst du nur noch starten, kannst dich zurücklehnen und dem Roboter dabei zuschauen, wie er sich selbst seinen Weg sucht.
xXSaschaXx hat geschrieben:Hallo Phyton-Forum,

derzeit arbeiten wir in der Schule mit dem Roboter Niko
(NIKO, der objektorientierte Roboter)
und da wir alles derzeit per Befehle schreiben (umdrehen():,..) hatte
ich die Idee den Roboter so umzuprogrammiren das man diesen mit
der Tastatur steuern kann.
Da ich nun ein Anfänger in Sachen Phyton bin habe ich mir erhofft
das die Profis hier unter euch mir da ein wenig helfen können.
Also nun meine Frage: Kann ich den Roboter umprogrammieren so dass man diesen
per Tastatur steuern kann ? (Pfeiltasten zum gehen und eine Taste zum aufheben der Werkzeuge welche man im Mapeditor platzieren kann.)

Ich hoffe das ihr mir weiter helfen könnt :)
Mfg Sascha
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
xXSaschaXx
User
Beiträge: 3
Registriert: Mittwoch 29. Februar 2012, 20:18

Donnerstag 1. März 2012, 16:46

Kebap hat geschrieben:Hallo Sascha,

ich glaube, das wirst du so nicht so einfach hinbekommen, aber macht auch nix: Niko sollst du ja gar nicht immer nur selbst steuern, sondern du wirst lernen, wie du ihm ein Programm gibst, und mit Schleifen und Abfragen eine durchaus komplexe Steuerung bauen kannst. Dann musst du nur noch starten, kannst dich zurücklehnen und dem Roboter dabei zuschauen, wie er sich selbst seinen Weg sucht.
xXSaschaXx hat geschrieben:Hallo Phyton-Forum,

derzeit arbeiten wir in der Schule mit dem Roboter Niko
(NIKO, der objektorientierte Roboter)
und da wir alles derzeit per Befehle schreiben (umdrehen():,..) hatte
ich die Idee den Roboter so umzuprogrammiren das man diesen mit
der Tastatur steuern kann.
Da ich nun ein Anfänger in Sachen Phyton bin habe ich mir erhofft
das die Profis hier unter euch mir da ein wenig helfen können.
Also nun meine Frage: Kann ich den Roboter umprogrammieren so dass man diesen
per Tastatur steuern kann ? (Pfeiltasten zum gehen und eine Taste zum aufheben der Werkzeuge welche man im Mapeditor platzieren kann.)

Ich hoffe das ihr mir weiter helfen könnt :)
Mfg Sascha
Das ist klar :D
Haben wir auch bereits alles gmacht. Also wir haben den Roboter halt bestimmte Wege laufen lassen ihn Hindernisse umgehen lassen und so weiter. Da es ja auch irgendwie ein wenig langweilig ist wen er alles selbst macht. Daher kam mir auch die Idee den Roboter mal selbst zu steuern.

Ich habe bereits meinen Lehrer danach gefragt jedoch wusste er es auch nicht genau. Er meinte nur das er vermutet das es geht. Außerdem meinte er auch zu mir das er selbst es gerade versuchst.

Mfg
EyDu
User
Beiträge: 4872
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 1. März 2012, 17:17

Vielleicht genügt das ja als kleine Hilfe:

Code: Alles auswählen

import Queue
import threading
import Tkinter


def robot(queue):
    #initialise robot
    
    while True:
        command = queue.get()
        if command is None:
            return
        else:
            #send command to robot
            print command.keycode


def main():
    queue = Queue.Queue()
    controller = threading.Thread(target=robot, args=(queue,))
    controller.start()
    
    root = Tkinter.Tk()
    root.bind("<Key>", queue.put)
    root.mainloop()
    queue.put(None)


if __name__ == "__main__":
    main()
Die Steuerung musst du dann in der robot-Funktion umsetzen. Welche Taste gedrückt ist, erfährst du mittels ``command.keycode``. Das ist natürlich weit entfernt von perfekt, aber zum Testen sollte es reichen.

Sebastian
Das Leben ist wie ein Tennisball.
xXSaschaXx
User
Beiträge: 3
Registriert: Mittwoch 29. Februar 2012, 20:18

Freitag 2. März 2012, 14:26

Danke dir.
Ich werde es mal damit versuchen :)

Mfg
Antworten