Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation zwischen Roboter und Website



FlorianKr
16.05.2017, 15:15
Hallo Forum,

an der FH arbeiten wir schon etwas länger an einem Roboter der gewisse Boniturarbeiten in landwirtschaftlichen Versuchsparzellen autonom erledigen soll.
Hierzu konnte mir das Forum schon bei anderen Problemen sehr gut weiter helfen. Hierfür noch einmal großen Dank.

Aktuell sitze ich an dem Problem, dass gewisse Messwerte laufend auf einer Internetseite angezeigt werden sollen, sowie auch verschiedene Vorgänge über eine Internetseite gesteuert werden sollen.

Auf dem Roboter läuft Ubuntu 16.04 und wir arbeiten mit ROS, Programmiersprache C++. Ein LAMP-Server wurde komplett installiert.

Nun stellt sich mir die Frage wie ich die Kommunikation zwischen der Internetseite und dem Roboter am besten umsetzen kann.

Die folgenden Konzepte habe ich bis jetzt im Internet gefunden:

1. Datenabfrage und - übergabe mittels PHP
Vorteil wäre die einfache Programmierung, allerdings sehe ich es als großen Nachteil, dass die Seite durchgehend neu geladen werden muss.

2. CGI, hat soweit ich das richtig verstanden habe die gleichen Vor- und Nachteile wie Option 1.

3. Ajax und MySQL
Eine JavaScript-Anwendung im Browser holt sich durchgehen die Daten aus einer MySQL-Datenbank.
Dies hätte den Vorteil, dass die Seite nicht durchgehend neu geladen werden muss,
allerdings stelle ich mir den Rechenaufwand durch die Datenbank als sehr hoch vor.

Des weiteren habe ich noch etwas über Sockets gelesen. Allerdings hatte ich hierbei das Gefühl, dass hierbei das ganze von der Programmierung sehr Aufwändig wird.

Hat von euch jemand Erfahrung mit diesem Bereich und könnte mir vielleicht ein paar Infos oder Tipps geben, wie ich am besten an das Problem herangehen kann?

Vielen Dank im voraus
Florian

Ceos
17.05.2017, 07:06
Der datenbank ansatz ist schonmal garnicht verkehrt! du kannst aus dem laufenden messprogramm die daten in die datenbank updaten und dann per php und einer etwas geschickt geschriebenen webseite die im hintergrund einen frame mit den daten immer weider neu lädt und per JS dann aus dem frame menschenlesbar auf der eigentlichen seite updatet ohne dass man ständig die ganze seite reloaden muss.

Beschreib doch mal eben die Daten die du darstellen weillst, denn eine Datenbank macht nur Sinn wenn du die aten protokollieren möchtest. Wenn du Daten live haben willst, bietet sich auch ein simpler socket dafür an, der einfach eine Zeichenkette antwortet wenn er gefragt wird. Die Zeichenkette ist dann eine ursimple HTML seite mit den Daten udn auf der eigentlichen Webseite sitzt dann wieder ein JS der das gnaze menschenlesbar umsetzt


String response = "<html>" + newline;
response += "<p title='data1'>" + newline;
response += data1 + newline;
response += "</p>" + newline
response += "</html>";


Diese mini Webseite lädst du dann in einem Frame und holst die informationen per JS.

TMoS
17.05.2017, 09:29
Hallo Forum,

1. Datenabfrage und - übergabe mittels PHP
Vorteil wäre die einfache Programmierung, allerdings sehe ich es als großen Nachteil, dass die Seite durchgehend neu geladen werden muss.

3. Ajax und MySQL
Eine JavaScript-Anwendung im Browser holt sich durchgehen die Daten aus einer MySQL-Datenbank.
Dies hätte den Vorteil, dass die Seite nicht durchgehend neu geladen werden muss,
allerdings stelle ich mir den Rechenaufwand durch die Datenbank als sehr hoch vor.


Das mit PHP und MySQL ist ganz gut.
Sieht dir mal Websockets (secure websockets) an. Da hast du eine bidirektionale Socketverbindung, Clientseitig in JS, brauchst die Seite nicht mehr neu zuladen.. Wäre der eleganteste und schönste weg. Du kannst so auch Serverseitig neue Daten an die Clients senden, ohne das die Seiten einen Request absenden. Innerhalb des Websockets würde ich Daten im JSON Format übertragen, aber das ist geschmackssache.
In der zwischenzeit gibt es auch für PHP ganz schöne Websocket implementierungen. (mit solchen fertigen libs ist es auch nicht mehr so aufwändig.)

https://entwickler.de/online/websocket-implementierung-mit-php-132012.html
http://socketo.me/


(https://www.html5rocks.com/de/tutorials/websockets/basics/)

Ceos
17.05.2017, 09:40
die websockets vergess ich immer *facepalm*
klar die beste lösung

FlorianKr
17.05.2017, 13:27
Hallo,

vielen Dank für die schnellen Antworten.

Bei den Daten handelt es sich um aktuelle Messdaten und verschiedene Regelparameter der autonomen Lenkung.

Aktuell zeichnen wir unsere Messdaten in csv-Dateien auf, weswegen ich die Datenbank nicht unbedingt benötigen würde.

Das mit den sockets/websockets hört sich gut an. Wenn ich das richtig verstanden habe, müsste dies doch auch eine sehr ressourcenschonende Variante sein.

Ich werde mich da mal genauer einlesen in das Thema.

Vielen Dank
Florian

Ceos
17.05.2017, 13:47
du müsstest dir halt noch ein simples protokoll einfallen lassen dass du dann auf robo und JS seite jeweils dann wieder zu lesbaren daten zusammensetzen kannst. Dafür würde ich mich einer passenden Library bedienen, vll. hat wer aus Forum eine brauchbare :D ... ich hab so n kram bisher iegentlich immer in Java gemacht und da gibts streamreader und writer die mir meine datentypen serialisieren udn wieder zusammenbauen

Wunderschöne Erläuterung zu Websockets in meinen Augen
https://os.alfajango.com/websockets-slides

und ein netter hinweis wie man Daten automatisch serialisieren kann
https://os.alfajango.com/websockets-slides/#/19/1

TMoS
17.05.2017, 13:47
ja. der link oben ist kaputt:
http://socketo.me/

Defiant
05.06.2017, 10:26
Wenn du sowieso schon ROS verwendest, wieso fürs Web nicht die Robot Web Tools (http://robotwebtools.org). Verwenden Rosbridge (http://wiki.ros.org/rosbridge_suite) als Brücke zu ROS.