pygame Tastaturevent funktioniert nicht

  • Tach alle zusammen,

    ich versuche derzeit meinen Roboter per Tastatur (via SSH/VNC) mithilfe von pygame zu steuern. Doch leider funktioniert das nicht so ganz wie ich es mir erhofft habe. Hier ist mein Code:



    Ich denke der Code ist halbwegs selbsterklärend. Ich weiß, dass ich, damit er wieder aufhört zu fahren, noch ein wenig am Code arbeiten muss aber das soll erst einmal zweitrangig sein. Im Moment fährt er noch nicht einmal los und das würde ich gerne ändern :D Ich nutze den Ryanteck Motor Controller, falls das wichtig ist. :) Und nicht wundern, forwards(), goRight() usw. habe ich in data.py schon geschrieben. Sieht immer in etwa so aus

    Code
    def forwards():
         GPIO.output(m1a, 1)
         GPIO.output(m1b, 0)
         GPIO.output(m2a, 1)
         GPIO.output(m2b, 0)


    Es funktioniert auch alles mit den Motoren super, nur das "live" steuern halt noch nicht.

    Ich hoffe mir kann jemand weiterhelfen und erklären, warum das bisher nicht funktioniert.
    MfG Jaymaster

  • Hallo.

    Hab mit Python nix am Hut, aber ich vermute folgendes.

    Zitat

    Ich versuche derzeit meinen Roboter per Tastatur (via SSH/VNC) mithilfe von pygame zu steuern.


    Dein Proggi scheint ja mit der "normalen Tasta" zu funktionieren.

    Evtl. nimmt dieses pygame Dingen's keine Befehle von SSH/VNC entgegen ?

    Könntest Du rausbekommen, indem Du mal die Tasta-Abfrage ohne pygame machst.
    Oder mit RDP

    EDIT: hier ein Beispiel, evtl. hilft das.
    gruß root

    Einmal editiert, zuletzt von root (19. November 2014 um 20:11)

  • Ich für meinen Teil hab da auch immer meine liebe Mühe mit der Implementation von pygame.event.get()... Bei mir hat sich da irgendwie eine Universallösung ergeben, die bisher jedesmal funktionierte: Erst die Events abfragen, die Ergebnisse in Variablen speichern und ERST DANN basierend auf den Variablen dies oder jenes tun. Beispielimplementation:

    Allerdings weiß ich nicht, wie das Ding reagiert, wenn zwischendurch "time.sleep"-Befehle zwischengeschaltet werden...

    EDIT: Typo im Quelltext korrigiert...

    Einmal editiert, zuletzt von Astorek86 (19. November 2014 um 19:58)


  • Ich für meinen Teil hab da auch immer meine liebe Mühe mit der Implementation von pygame.event.get()... Bei mir hat sich da irgendwie eine Universallösung ergeben, die bisher jedesmal funktionierte: Erst die Events abfragen, die Ergebnisse in Variablen speichern und ERST DANN basierend auf den Variablen dies oder jenes tun.

    Ok, ich habe deine Idee jetzt mal in eine neue Datei übernommen :thumbs1:
    Aber leider funktioniert es immernoch nicht :(
    Hier nochmal der jetzige Code:

    Nun hat er sich zwar einmal bewegt, als ich nach links gedrückt habe, aber er ist rückwärts gefahren und ich habe diesen Fehler bekommen:

    Code
    Invalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 key^[[D^[[AInvalid MIT-MAGIC-COOKIE-1 keyxcb_connection_has_error() returned true


    Hat man das hier schonmal gesehen?


    Hallo.

    Hab mit Python nix am Hut, aber ich vermute folgendes.


    Dein Proggi scheint ja mit der "normalen Tasta" zu funktionieren.

    Evtl. nimmt dieses pygame Dingen's keine Befehle von SSH/VNC entgegen ?

    Tut mir leid, ich habe mich falsch ausgedrückt, ich habe es bisher nur so versucht :)
    Ich habe es bisher nur per VNC und SSH versucht, da ich das unbedingt so hinbekommen möchte und auf keinen Fall die ganze Zeit mit einer Tastatur dem Roboter hinterherlaufen möchte :D

    Schonmal danke an Euch beide für die Mühe!

  • Nun hat er sich zwar einmal bewegt, als ich nach links gedrückt habe, aber er ist rückwärts gefahren

    Kurze Frage diesbezüglich: Werden die "print"-Befehle richtig ausgeführt? Also dass bei entsprechendem Tastendruck auch die "XY is true"-Meldungen angezeigt werden? Hören die Meldungen auch auf, wenn du keine Taste mehr drückst?

    Falls alles so der Fall ist: Dann liegts ganz sicher nicht daran, dass die Verbindung über SSH oder VNC stattfindet. Dann könnte man eine Fehlerquelle schonmal ausschließen. Alternativ probierst du direkt mit angeschlossener Tastatur am RPi, das Python-Programm auszuführen; dann musst du dem Roboter wenigstens kurz fürs Testen hinterherlaufen^^. (Am Besten eingekesselt, damit er beim Testen nicht versehentlich die Kabel wegreißt...)

    Wenn die "print"-Ausgaben funktionieren aber der Roboter trotzdem nicht korrekt fährt, liegt das Problem woanders. Diesbezüglich habe ich aber nicht die geringste fundierte Ahnung und kann maximal Mutmaßungen anstellen^^...

  • Ich denke mal, der Weg ist grundsätzlich nicht der Beste. Der Roboter soll ja bestimmt irgendwann mal ferngesteuert werden, da würde ich auf eine Server-Client-Architektur setzten. Das einfachste wäre eine Webseite als Client, die die Tastaturbefehle per Javascript aufnimmt und als Request (Anfrage an den Server) weitergibt. Der Server hört sich hochtrabend an, kann aber auch ein Pythonscript sein, das einfach nur die Requests entgegennimmt und in Steuerbefehle umwandelt. Vorteil ist, dasss man dieses Prinzip immer weiter ausbauen kann und letztenlich sogar mit einem Smartphone steuern könnte.


  • Ich denke mal, der Weg ist grundsätzlich nicht der Beste. Der Roboter soll ja bestimmt irgendwann mal ferngesteuert werden, da würde ich auf eine Server-Client-Architektur setzten. Das einfachste wäre eine Webseite als Client, die die Tastaturbefehle per Javascript aufnimmt und als Request (Anfrage an den Server) weitergibt. Der Server hört sich hochtrabend an, kann aber auch ein Pythonscript sein, das einfach nur die Requests entgegennimmt und in Steuerbefehle umwandelt. Vorteil ist, dasss man dieses Prinzip immer weiter ausbauen kann und letztenlich sogar mit einem Smartphone steuern könnte.


    Jo, warum nicht einfach, wenn's auch kompliziert geht. :lol:
    Wenn ich ihn richtig verstanden habe, geht's ja wenn er nit der Tasta hinterherrennt...
    Wenn's dann mit SSH/VNC nicht mehr fuktioniert, fuktioniert zwar sein Proggi, aber das faule Ei liegt dann woanders, s.o.
    Wie gesagt, meiner Ansicht nach ist da RDP robuster,hatte bisher keine Probs damit.
    Da würde ich suchen ...oder das Proggi umschreiben (ohne pygame)... Training :)
    ...Ursachenforschung is was feines ;)
    raspiprojekt; Deine Idee ist gut, aber die würde ich später angehen.
    Also nix für ungut. :thumbs1:

    gruß root

    Einmal editiert, zuletzt von root (20. November 2014 um 01:28)


  • Kurze Frage diesbezüglich: Werden die "print"-Befehle richtig ausgeführt? Also dass bei entsprechendem Tastendruck auch die "XY is true"-Meldungen angezeigt werden? Hören die Meldungen auch auf, wenn du keine Taste mehr drückst?


    Ne, leider funktioniert das print noch nicht einmal... Also er kriegt irgendwie kein bzw ein falsches Signal wenn er so komische Fehlermeldungen ausspuckt :s


    Ich denke mal, der Weg ist grundsätzlich nicht der Beste. Der Roboter soll ja bestimmt irgendwann mal ferngesteuert werden, da würde ich auf eine Server-Client-Architektur setzten. Das einfachste wäre eine Webseite als Client, die die Tastaturbefehle per Javascript aufnimmt und als Request (Anfrage an den Server) weitergibt.


    Die Idee hört sich auf jeden Fall gut an! Ich kenne mich ein wenig mit Javascript und node.js aus, kann das vielleicht helfen? Und kennst du gute Tutorials dazu, wie man das hinkriegt?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!