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:
Im Prinzip ist das schon recht toll: Sehr einfach zu programmieren und funktioniert im Browser auf dem Laptop als auch Smartphone einwandfreiCode:#!/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()
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







Zitieren

Lesezeichen