Kontrolle eines autonomen Fahrzeug über eine Internetverbindung
(EN google-translate)
(PL google-translate)
Übersicht
Um ein Gerät über das Internet kontrollieren zu können, gibt es eine Vielzahl an Techniken. Typischerweise ist das Fahrzeug ein Server und die andere Seite der Client. Denn ein Server hat in der Regel vollen Zugriff auf die Hardware, auf dem er läuft. Bei den verschiedenen Möglichkeiten einen Client zu bilden, gibt es oft Beschränkungen, was den Hardwarezugriff betrifft.
Das Schichtenmodell von TCP (Transmission Control Protocol)
|
In jeder Schicht werden Protokolle definiert, wie Daten zu übertragen sind. Protokolle der Schicht 4, der Anwendungsschicht sind beispielsweise HTTP (Hypertext Transfer Protocol), FTP (File Transfer Protocol) oder SMTP (Simple Mail Transfer Protocol).
Das Versenden der Daten über das Internet erfolgt mittels aufeinander aufbauender Protokolle über die Schichten hinweg. Zu sendende Daten werden von der Anwendungsschicht an die Transportschicht übergeben. Gemäß dem TCP (Transmission Control Protocol) werden hier die zu sendenden Daten in Pakete aufgeteilt, mit einem Datenkopf versehen und an Schicht 2, der Vermittlungsschicht übergeben.
In der Schicht 2, der Vermittlungsschicht, ist das Protokoll IP (Internet Protocol) enthalten. In dieser Schicht wird den Datenpaketen ein IP-Header hinzugefügt, über den dann der Rechner identifiziert werden kann, an den die Daten geschickt werden sollen. Dann werden die Pakete weiter an die Schicht 1, der Verbindungsschicht übergeben.
Auf Schicht 1, der Verbindungsschicht, sitzt die Netzwerkkarte. Sie packt einen Rahmendaten um die Pakete.
Auf der Empfängerseite findet dieser Vorgang im umgekehrter Reihenfolge satt. D.h. die Daten kommen auf Schicht 1 an und wandern nach entsprechendem Entpacken immer eine Schicht höher.
UDP
Auf der Transportschicht Ebene (Schicht 3) kann alternativ das TCP (Transmission Control Protocol) oder das UDP (User Datagram Protocol) verwendet werden.
Der Vorteil von TCP ist, dass über Fehlersummen fehlerhafte Übertragungen von Paketen erkannt und diese erneut angfragt werden können. Außerdem ist gewährleistet, dass die Pakete in der richtigen Reihenfolge empfangen werden, in der sie gesendet wurden. TCP ist ein Verbindungsorientiertes Protokoll.
UDP besitzt keine Kontrolle über auftretende Fehler und die Paketreihenfolge. Das Protokoll ist entsprechend einfacher und damit auch schneller. UDP ist ein verbindungsloses Protokoll.
IP, DNS und Portnummer
Zur Identifikation eines Netz-Rechners benötigt dieser eine IP-Adresse. Dies ist eine aus vier 8-Bit-Zahlen zusammengesetzte Kennung. Es gibt IP-Adressen der Klassen A, B und C.
|
Der Netzwerkadressbereich wird in einer Netzmaske mit Einsen maskiert. Klasse C-Beispiel: 170.19.0.33, Netzwerkmaske: 255.255.0.0
Ein DNS-Server (Domain Name Server) setzt die IP-Adressen in lesbare Namen und umgekehrt. Jeder Rechner kann sich selber als "localhost" oder als IP-Adresse 127.0.0.1 "sehen".
Unter der selben IP-Adresse können mehrere Server ihren Dienst versehen. Sie können aber auf unterschiedlichen Datenkanälen, den so genannten Ports arbeiten. Portnummern können die ganzen Zahlen zwischen 0 und 65535 annehmen. Die Portnummern 0 bis 1023 sind weltweit eindeutig definiert. Beispiele:
Port | Service | Beschreibung |
---|---|---|
7 | echo | Wiederholt eine Eingabe als Antwort |
13 | daytime | liefert die Systemzeit eines Servers |
21 | FTP | Übertragung von Dateien |
80 | HTTP | Auslieferung von Internetseiten |
Tabelle 0-1: Feste Portzuordnungen verschiedener Web-Services
Formulare
Die wohl bekannteste Möglichkeiten, Daten mit einem Server auszutauschen, besteht in der Verwendung von Formularen. Diese werden in einer Webseite eingebettet und erlauben es die eingetragenen Formulardaten an einen Server zu schicken. Dieser liefert daraufhin eine neue Version der ursprünglichen Webseite aus, z.B. ergänzt mit Daten aus einer Datenbank oder nach einem Login mit nun freigeschalteten Daten. Formulardaten werden über das HTTP-Protokoll geschickt. Beispiel: Login-Formular auf dieser Webseite.
Java
Die Java-API bietet Internetverbindungen auf verschiedenen Abstraktionsebenen. D.h. es gibt in den einzelnen Library-Klassen Methoden, die elementare Dinge umsetzen, wie eine Netzwerkverbindung aufbauen, aber auch solche, die auf einem sehr hohen Abstraktionslevel stehen und die darunter liegenden Vorgänge verbergen, wie eine Methode eines auf einem anderen Rechnerliegenden Objektes zu benutzen (RMI - Remote Method Invocation). Beispiele:
|
Im folgenden sollen die diversen Techniken anhand kleiner Experimente erlernt werden.
Experiment Nr.1 - Formulardaten verarbeiten
Ein einfacher Weg, an einen Server zu kommen, ist die Möglichkeit einen XAMPP-Server zu installieren. Dies stellt eine funktionierende out-of-the-box-Lösung dar in der bereits ein Apache-Server, eine MySQL-Datenbank, sowie die Webprogrammiersprachen PHP und Perl funktionierend miteinander interagierend vorhanden sind.
Zu Experimentierzwecken kann man sich XAMPP aus dem Internet herunterladen und installieren und anschließend eine php-Internetseite in das Verzeichnis htdocs legen. Alle Seiten, die dort liegen, können nach Start des Servers übe Angabe der IP-Adresse und nachfolgend des Pfades ab htdocs von einem Client-seitigen Web-Browser abgerufen werden, sofern dies von dem Server erlaubt wird. Beispiel:
Wir legen in htdocs ein Dokument test.html mit folgendem Inhalt:
<html> <head> </head> <body> <h1>Dies ist die Internetseite test.html</h1> <br/> <p>Senden Sie einen kurzen Text an test2.php:</p> <br/> <form action="http://localhost/test2.php" method="POST"> Text senden: <input type="text" name="meintext" value=""/> Text abschicken: <input type="submit" value="go"/> </form> </body> </html>
Code 0-1: Datei test.html in htdocs des XAMPP-Servers.
Wie am Code zu interpretieren ist, werden die gesendeten Daten Server seitig von einer PHP-Datei verarbeitet, die den Namen test2.php trägt (weitere Erläuterungen s. Vorlesung). Diese könnte so aussehen:
Bild 0-1: Datei test2.php in htdocs des XAMPP-Servers.
Experiment Nr.2 - Inhalt einer Internetseite mit Java abrufen
Applets sind prädestiniert dazu Client-Aufgaben zu übernehmen, da sie selbst wiederum in Internetseiten eingebunden werden können. Ihre Verwendung unterliegt aber einigen Beschränkungen:
|
Das folgende Applet liest den Quelltext der Seite http://localhost/test.html als String aus und stellt den Inhalt in einem Textfenster (TextArea) dar. Nach Aufbau der Verbindung wird ein Datenstrom geöffnet und der Inhalt der Seite heruntergeladen.
package element.Htmlseite; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.TextArea; import java.awt.ScrollPane; import hilfsklassen.Unicode; import java.io.*; import java.net.*; public class Htmlseite extends Applet { public String uebergabe = ""; public void start() { try { URL url = new URL("http://localhost/test.html"); URLConnection verbindung = url.openConnection(); verbindung.setUseCaches(false); DataInputStream datenstrom = new DataInputStream(verbindung.getInputStream()); String zeile; while( (zeile=datenstrom.readLine()) != null ) uebergabe+=zeile+" "; } catch(Exception e) { uebergabe = e.toString(); } ScrollPane scrollpane = new ScrollPane(); scrollpane.setBounds(0,0,800,400); TextArea textarea = new TextArea(); textarea.setText(uebergabe); scrollpane.add(textarea); setLayout(null); add(scrollpane); } }
Code 0-2: Applet Htmlseite.java
Damit das Applet in die vorliegende HTML-Seite eingebettet werden kann, muß in diese ein Applet-Tag in folgender Weise eingetragen werden:
<applet codebase="http://localhost/techne/java/" code="element.Htmlseite.Htmlseite.class" width="800" height="550"> </applet>
Code 0-3: Applet-Tag auf der vorliegenden HTML-Seite
Hierzu ist folgendes zu beachten:
|
Eingebettetes Applet vom Typ Htmlseite.class @Htmlseite Webseite laden.
Experiment Nr.3 - Umsetzung eines Servlets zur Versendung von Bildern
Eines von einer Reihe an Anforderungen bei dem PC-basierten autonomen Vehikel ist es, die Bilder einer USB-Kamera des Fahrzeugs über W-Lan an einen Client zu schicken. Die Art der versendeten Daten kann über den so genannten MIME-Typ (Multipurpose Internet Mail Extension) bestimmt werden. Allerdings bietet die Klasse unmittelbar eine Methode an, die ein Bild über eine URL lädt:
package element.Bildladen; import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.TextArea; import java.awt.ScrollPane; import hilfsklassen.Unicode; import java.awt.Image; import java.net.URL; public class Bildladen extends Applet { public Image bild = null; public String uebergabe = ""; public byte[] bildbytes = null; public void start() { try { bild = getImage(new URL("http://localhost/neuron.png")); repaint(); } catch(Exception e) { } } public void paint(Graphics g) { if(bild!=null) g.drawImage(bild, 0, 0, this); } }
Code 0-4: Applet Bildladen.java