Hallo zusammen,

mich beschäftigt im Moment ein Thema, zu dem es mit Sicherheit schon viele Lösungen gibt, aber es scheint mir fallen nicht die richtigen Suchbegriffe ein.. Und zwar möchte ich meinen Roboter in Echtzeit übers Netzwerk steuern, idealerweise über den Browser. Alternative wäre ein Python-Script auf dem Client. (Auf dem Server/Robo läuft im übrigen ein OpenWRT auf einem TL-MR3020-Router)

Im Moment mache ich das über Buttons auf einer HTML-Seite (aus einem Python-CGI-Script), die per POST an das Python-CGI-Script mitteilen wenn sie gedrückt wurden:
Code:
#!/usr/bin/env python

import cgi
from RobotLibrary import I2C as I2C
from RobotLibrary import robot_motorctrl as motor
from RobotLibrary import robot_servoctrl as servo

print """ Content-type: text/html

    <html>

    <head><title>Robot</title></head>

        <body>
            <h3> Hello, this is Robot </h3>
            
            <style>
                .hide { position:absolute; top:-1px; left:-1px; width:1px; height:1px; }
            </style>
            <iframe name="hiddenFrame" class="hide"></iframe>

            <form action="pytest.py" method="POST" target="hiddenFrame">
                Movement:<br/>
                <input type="submit" value="↖ " name="Submit_FL" style="height:80px; width:80px" />
                <input type="submit" value="↑ " name="Submit_F"  style="height:80px; width:80px" />
                <input type="submit" value="↗ " name="Submit_FR" style="height:80px; width:80px" />
                <br/>                                                    
                <input type="submit" value="← " name="Submit_L"    style="height:80px; width:80px" />
                <input type="submit" value="Stop"     name="Submit_Stop" style="height:80px; width:80px" />
                <input type="submit" value="→ " name="Submit_R"    style="height:80px; width:80px" />
                <br/>                                                 
                <input type="submit" value="↙ " name="Submit_BL" style="height:80px; width:80px" />
                <input type="submit" value="↓ " name="Submit_B"  style="height:80px; width:80px" />
                <input type="submit" value="↘ " name="Submit_BR" style="height:80px; width:80px" />
                
                <br/>
                <br/>
                Mode:</br>
                <input type="submit" value="Speed" name="Submit_mode_speed"  />
                <input type="submit" value="Torque" name="Submit_mode_torque"  />
            </form>
        </body>

    </html>
    """

form = cgi.FieldStorage()

i2c.OPEN('/dev/i2c-0')

if   "Submit_F" in form:
    motor.SET_MOTORS(20,20)
elif "Submit_FL" in form:
    motor.SET_MOTORS(10,20)
elif "Submit_FR" in form:
    motor.SET_MOTORS(20,10)
elif "Submit_L" in form:
    motor.SET_MOTORS(0,15)
elif "Submit_Stop" in form:
    motor.STOP()
elif "Submit_R" in form:
    motor.SET_MOTORS(15,0)
elif "Submit_B" in form:
    motor.SET_MOTORS(-10,-10)
elif "Submit_BL" in form:
    motor.SET_MOTORS(-18,-10)
elif "Submit_BR" in form:
    motor.SET_MOTORS(-10,-18)

elif "Submit_mode_speed" in form:
    motor.MOVEMODE(motor.MoveMode_Speed)
elif "Submit_mode_torque" in form:
    motor.MOVEMODE(motor.MoveMode_Torque)

i2c.CLOSE()
Im Prinzip ist das schon recht toll: Sehr einfach zu programmieren und funktioniert im Browser auf dem Laptop als auch Smartphone einwandfrei
Klicke auf die Grafik für eine größere Ansicht

Name:	Robot_Webinterface.jpg
Hits:	34
Größe:	30,8 KB
ID:	27906

Das ganze hat aber ein paar Haken:
- Es ist sehr langsam. Vom Button-Druck bis zur Reaktion des Robos vergehen ca. 2sec
- Ein Verbindungsabbruch lässt den Roboter nicht stoppen. Zwar könnte man mithilfe einer Seite mit automatischem Refresh in einem IFrame ein CGI-Script pollen, aber man kann erst nach 3-4 Sekunden sagen, dass die Verbindung tatsächlich abgebrochen ist. Das ist nur ein grober Hack und dauert viel zu lange

Jetzt die Frage:
Kennt jemand einen ähnlich einfachen Ansatz um einen Roboter in Echtzeit steuern zu können? Am allerbesten wäre etwas fertiges das auch eine Steuerung über die Tastatur oder Joystick auf dem Bildschirm (Für Maus oder Touch) ermöglicht. Hintergrund ist, dass ich mich in der Webprogrammierung nicht gerade gut auskenne und bis auf HTML/CSS/ein wenig PHP nicht viel gemacht habe..

Viele Grüße
schumi