ETSIIT Technische Herausforderung | Vom College-Studenten zum Unternehmer
Vor einem Jahr haben wir unsere Arbeit für die IV ETSIIT Technical Challenge (Video) aufgenommen. Wer sind wir? Nun, wir sind vier Studenten, die Elektrotechnik und Informatik an der Universität Granada in Spanien studieren.
Unser Team, Prometheus, hat die von RTI gesponserte Tech Challenge gewonnen. Für diese Herausforderung mussten Teams von vier oder fünf Studenten ein Produkt erstellen, um eine von einem externen Unternehmen vorgeschlagene Herausforderung zu lösen. Das Thema der diesjährigen Challenge war "Multi-Agent Video Distributed System".
Wir haben uns dieser Herausforderung gestellt, um praktische Erfahrungen zu sammeln. Ein Jahr nach der Tech Challenge sind wir alle noch Studenten, aber wir haben jetzt eine Geschäftsmöglichkeit recherchiert, das wettbewerbsfähige Produkt Locaviewer entworfen, eine Strategie entwickelt, um es auf dem Markt zu verkaufen, und einen funktionierenden Prototyp erstellt, zusätzlich zu den erforderlichen Kursarbeiten für unsere Abschlüsse.
Locaviewer
Die meisten Eltern mit Kindern im Kindergarten sorgen sich um die Gesundheit und den Fortschritt ihrer Kinder. Unser Produkt, Locaviewer, versucht Eltern zu ermöglichen, ihr Kind in Echtzeit zu verfolgen und zu sehen. Als Teil unseres Marketingplans haben wir ein Werbevideo erstellt. Unser Code wurde unter der MIT-Lizenz auf GitHub veröffentlicht.
Teamorganisation und Zeitplan
Das Projekt dauerte ungefähr 250 Stunden. Jede Woche trafen wir uns für mindestens 4 Stunden, mit Ausnahme des letzten Monats, in dem wir 20 Stunden pro Woche für das Projekt aufgewendet haben. Um effizienter zu sein, haben wir uns in zwei Teams aufgeteilt. Zwei Personen arbeiteten am Indoor-Bluetooth-Ortungsalgorithmus. Die anderen beiden konzentrierten sich auf eine Anwendung zum Aufnehmen, Kodieren/Dekodieren eines Videostreams und zum Teilen mit RTI Connext DDS.
Standortalgorithmus
Der erste und wichtigste Schritt unserer Lösung war die Standortbestimmung der Kinder im Kindergarten. Jedes Kind musste ein Armband mit einem Bluetooth-Gerät -Sensor- tragen, das kontinuierlich die Signalstärke meldete, empfangen ein Bluetooth-Gerät -Dongle-, das in den Zimmerwänden platziert wurde. Dieser Wert der empfangenen Signalstärke (RSSI) wird normalerweise in Dezibel (dB) gemessen. Wir haben die Beziehung zwischen RSSI und Entfernung bestimmt.


Die RSSI-Werte wurden an einen Minicomputer (Raspberry Pi oder MK802 III) übertragen, um einen Triangulationsalgorithmus auszuführen und den Standort des Kindes zu identifizieren. Da wir die Kameraposition kannten, wussten wir nach der Bestimmung der Position des Kindes, welche Kameras das Kind aufzeichneten und wählten die beste Kamera aus.

Videoaufnahmeanwendung
Um Videos aufzunehmen, zu kodieren, zu dekodieren und zu visualisieren, haben wir GStreamer für Java verwendet. Wir haben andere Bibliotheken wie vlcj ausprobiert, aber sie unterstützten weder Raspberry Pi noch erfüllen sie die Echtzeitbeschränkungen unseres Systems. Nach einigen Recherchen haben wir GStreamer entdeckt, der mit Raspberry Pi funktioniert und den codierten Videopuffer problemlos in Echtzeit abrufen kann (mit AppSink und AppSource Elemente). Dadurch konnten wir es kapseln und an ein DDS-Thema senden. Wir haben mehrere Monate daran gearbeitet, sogar einen temporären Workaround mit HTTP-Streaming mit vlcj implementiert, bis wir uns auf unseren endgültigen Ansatz geeinigt haben.
Wir haben den Video-Encoder VP8 (WebM) verwendet. Da der Wrapper für Java nur mit GStreamer Version 0.10 funktioniert, konnten wir ihn nicht optimieren und mussten die Videodimensionen reduzieren. In unseren Tests wurde Raspberry Pi verwendet, aber wir planen, in der endgültigen Implementierung ein MK802 III-Gerät zu verwenden, da es den gleichen Preis, aber mehr Rechenleistung hat. Die endgültige Codierungskonfiguration war:

Wir haben den folgenden Java-Code verwendet, um VP8-Encoder-Elemente zu erstellen.
Element codec =ElementFactory.make("vp8enc", null);codec.set("threads", 5);codec.set("max-keyframe-distance", 20);codec.set("speed", 5);Element capsDst =ElementFactory.make("capsfilter", null);capsDst.setCaps(Caps.fromString("video/x-vp8 profile=(string)2"));
Clientseitig haben wir folgende Konfiguration verwendet:

Wir haben den folgenden Java-Code verwendet, um VP8-Decoderelemente zu erstellen.
String caps ="video/x-vp8, width=(int)320, height=(int)240, framerate=15/1";Element capsSrc =ElementFactory.make(" capsfilter", null);capsSrc.setCaps(Caps.fromString(caps));Element queue =ElementFactory.make("queue2", null)Element codec =ElementFactory.make("vp8dec", null);Element convert =ElementFactory. make("ffmpegcolorspace", null);
Wir haben auch die JPEG-Kodierung ausprobiert, aber dies war für die Echtzeitverwendung aufgrund der größeren Größe und der größeren Anzahl von Paketen nicht möglich.
DDS-Architektur
Der Publish-Subscribe-Ansatz war der Schlüssel zu unserer Lösung. Es ermöglichte uns, Daten zwischen vielen Clients auszutauschen, ohne uns um Netzwerk-Sockets oder -Verbindungen kümmern zu müssen. Wir mussten nur angeben, welche Art von Daten gesendet und empfangen werden sollen. Wir haben eine Wrapper-Bibliothek, DDStheus, erstellt, um die DDS-Nutzung in unserem System zu abstrahieren.

Unsere endgültige Lösung bestand aus sechs Programmen mit drei gemeinsamen Themen. Wir haben verschiedene Programmiersprachen verwendet:
- Python funktioniert auf niedriger Stufe (HCI) mit Bluetooth-Geräten
- MATLAB/Octave zum Erstellen des Triangulationsskripts
- Java arbeitet mit RTI Connext DDS und grafischen Benutzeroberflächen
Wir mussten alle RSSI-Werte in einem Raum kennen. Wir haben ein Skript erstellt, um die Bluetooth-Dongles zu konfigurieren und die RSSI-Informationen zu erhalten. Diese Werte wurden über eine einfache Socket-Verbindung auf demselben Computer an ein Java-Programm gesendet. Die Java-Anwendung hat die Daten in den Sensordaten . veröffentlicht Thema. Es sendete die Kinder-ID (der Bluetooth-MAC-Sensor), die Bluetooth-Dongle-ID und -Position, den aktuellen Raum (als Schlüssel nach Raum filtern), RSSI-Wert und Ablaufzeit.

Nachdem die Kameras das Video aufgenommen und codiert haben, sendet das Java-Programm Gava das Video über die Videodaten Thema. Es hat die Kamera-ID als Schlüsselwert gesendet, um den Stream mit ContentFilteredTopic . zu filtern mit Kameraposition, Raum, codiertem Frame und Codec-Info.
Außerdem fügt die Anwendung die Kamera-ID, den Raum und die Kameraposition in den USER_DATA-QoS-Wert jedes Video-Publishers ein. Der Triangulations-Minicomputer könnte dann alle Kamerainformationen in einem Raum abrufen, indem er einfach Verlage entdeckt. Es könnte auch neue und defekte Kameras in Echtzeit erkennen und das Standortskript aktualisieren, um den Kameraauswahlalgorithmus zu verbessern.

Im letzten Schritt haben wir die
Internet der Dinge-Technologie
- Häufig gestellte Fragen aus unseren Remote Access-Webinaren
- Community College bietet fortgeschrittene Studenten der Verbundwerkstoffherstellung mehr Flexibilität
- Ein Kunde aus dem Libanon lernt, wie man eine CNC-Maschine bedient
- Unsere Kunden aus Jordanien besuchten unsere Fabrik
- Kunde aus Kanada hat unsere Fabrik besucht
- Unser Ingenieur ging nach Dubai, um technischen Support im Ausland zu leisten
- Kunde aus Katar besuchte unsere Fabrik im April 2017
- Unser Kunde aus Bengalen prüft unsere neu gebauten Holzbearbeitungsmaschinen
- Kunden aus Indien kamen in unsere Fabrik, um die Maschine zu inspizieren
- Besucher aus Korea für CNC-Fräsmaschine