Diplomarbeitspräsentation Christian Aichinger

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

ALP II: Objektorientierte Programmierung Sommersemester 2006
Objektorientierte Programmierung
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Eine kleine Einführung
DI Christian Donner cd (at) donners.com
Kapselung , toString , equals , Java API
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
Datenbankzugriff im WWW (Kommerzielle Systeme)
FH-Hof Einbindung von JavaScript Anweisungen
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Konstruktoren.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Introducing the .NET Framework
Einführung in Visual C++
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Einführung in Java1 Einführung in JAVA.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Zwischenpräsentation
Einführung in die Programmiersprache Java
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Robotik für Lehr- und Entwicklungszwecke. Entwicklung eines universellen Lehrsystems zur Verwendung und Weiterentwicklung im Schulbetrieb Robotik OS-unabhängig.
Universelles Lehrsystem für den Schulbetrieb Robotik Betriebssystemunabhängig Programmiersprachenunabhängig Erweiterbar Einfach zu bedienen Gut dokumentiert.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java und Eclipse.
A PPLICATION P ROGRAM I NTERFACES. Erklärung Verwendung Typklassen G LIEDERUNG.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Objektorientiertes Konstruieren
Die Klasse String und ihre Methoden
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
EPROG Tutorium #4 Philipp Effenberger
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
2. April 2015Solveigh Matthies BioRem als FESA3-Klasse BioRem-Ansteuerung mit einer FESA3- Klasse Sinn&Zweck Funktionialit ä t Implementierung.
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
A Workshop About this chapter General description Units Time Schedule
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Objektorientierte (OO) Programmierung
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Die Struktur einer Java-Klasse
Tutorstunde 10.
 Präsentation transkript:

Diplomarbeitspräsentation Christian Aichinger

Ziele Entwicklung eines universellen Robotiksystems zur Verwendung und Weiterentwicklung im Schulbetrieb OS-unabhängig Programmiersprachenunabhängig flexibles, erweiterbares System einfach zu bedienen (hardwaretechnisch) Ausreichende Dokumentation Beispielanwendungen (Samples)

Ziele Samples für alle Systeme Programmiersprachen C C# Java Betriebssysteme Windows Linux Samples für alle Systeme Kombinierte Samples (Sensoren + Aktoren)

Konzept Module Verbindung Zwischenplatine DriveSystem I2C-Bausteine, Sensoren/Aktoren Verbindung USB-I2C-Converter Zwischenplatine Aktorensteuerung (Motoren u.a.) DriveSystem Eigene Energieversorgung, auswechselbar

ROLEZ - Hardware Bestehend aus: MCK – Make Controller Kit Entwicklungsboard, hauptsächlich für die Aktorik I2C – Converter (Sensorik) Für die I2C-Kommunikation, Sensoren

Hilfsmittel C und C# Programmierung: mcbuilder, Visual Studio 2008 Java Programmierung: Eclipse Peripheriegeräte: Servos, Abstandssensoren, I2C-Bausteine (Temperatur, Abstand)

Basis

Warum ein Robotiksystem? Momentan ist Robotik noch ein schwieriges Gebiet für Schüler Einstieg schwer Ergebnisse lassen oft auf sich warten Darum: Neues, universelles System, von Schüler für Schüler

Warum drei Sprachen? Verwendung soll in mehreren Formen möglich sein. C als LowLevel-Sprache C# und Java als Hochsprachen, auch für grafische Anwendungen Somit ist auch eine fächerübergreifende Verwendung möglich

Java Objektorientiert Syntax ähnlich wie C/C++ Umfangreiche Klassenbibliothek (JDK)‏ Zum Ausführen wird eine JVM benötigt

C# verwendet bekannte Konzepte aus C++, Visual Basic und Java Objektorientiert (Mischform) Ermöglicht eine schnelle Anwendungsentwicklung Vorrausetzung ist das .NET Framework

Warum Linux und Windows? Die Universalistät des Systems soll gewahrt werden Beide Systeme werden im Unterricht verwendet Die Entwicklung soll in möglichst vielen Unterrichtsfächern möglich sein

Warum Samples? Der Einstieg in die Robotik ist oft schwer Samples helfen beim einarbeiten in das System Anwendungen werden praktisch aufgezeigt Funktionalität der vorhandenen Hardware wird demonstriert Programmteile wiederverwendbar

Warum I2C? Weit verbreitetes Bussystem für Sensoren Dementsprechend viele Clients Ein Bus mit mehreren Clients möglich USB-Geräte (USB-I2C-Converter) komfortabel verwendbar Beste Eignung für ROLEZ im Vergleich mit anderen Bussystemen in diesem Bereich

Der I2C-Bus Entwickelt von Phillips Bidirektional Master – Slave-System Ein Master – Mehrere Slaves (Sensoren) Zwei Leitungen SCL (serial clock line) SDA (serial data line) Viele Implementierungen zur Anwendung in der Praxis übernehmen einen Großteil der obig beschriebenen Abläufe vollautomatisch. Die Kommunikation mit dem Bus beschränkt sich dann auf die Adressierung der Geräte und das Senden bzw. Empfangen der Daten über die verwendete Schnittstelle (COM-Port, USB, …).

Was ist der MCK? Entwicklungsboard Kleine Größe – großer Komponentenumfang Viele Schnittstellen Aktoren/Sensoren Programmiersprachen Hohe Leistung Atmel AT91SAM7X256 Mikrocontroller (Bis zu 55MHZ/48MIPS) Hoher Preis (Versand aus den USA) Eigenbau: Zeitkomponente kritisch

MCK-Aufbau Controller Board: Das Controller Board befindet sich um den Atmel AT91SAM7X256, einen 32-Bit ARM7 Mikroprozessor und enthält alle notwendigen Komponenten (wie den Uhren-Kristall, Spannungs-Regulator, Filter-Kondensatoren usw.) um ihn zu verwenden. Die meisten Prozessorsignale werden auf Pins im 0.1“ Abstand ausgegeben. Das Make Application Board ist eine robuste Schnittstelle zwischen der „realen“ Welt und dem Make Controller Board. Es stellt viele I/O-Schnittstellen und Anschlussmöglichkeiten zur Verfügung.

MCK - Schnittstellen

OSC Transport-Protokoll zum Ansprechen des MCK über Programmiersprachen Ursprünglich für die Kommunikation mit Multimedia Geräten entwickelt Quelloffen, Transport unabhängig, Nachrichten basierend Übertragung per TCP oder UDP Implementiert in viele Programmiersprachen Viele Beispielanwendungen P1: Allgemein („per Hand“) und Programmiertechnisch (Über HL-Sprachen wie Java oder C#) P2: Beispiele: Computer, Sound-Synthesizer und weitere

/servo/0/position 200 OSC-Pakete Die Kommunikation mit OSC-Geräten erfolgt über OSC-Pakete OSC-Paket OSC-Nachricht OSC-Adresse /servo/0/position 200 OSC-Container OSC-Container OSC-Methode OSC-Argument

Warum i2c-tiny-usb? Einfache Handhabung – universelle Basis libusb Library zum USB-Handling In C, entwickelt für Linux, Windows Port existiert Direkte Übersetzung in I2C-Signale Kein simulierter COM-Port Geringer Preis, jedoch Eigenbau Direkter Kontakt mit Hersteller

Grundziele für die Programmierung Kapselung und Vereinfachung von bestehenden komplexen Bibliotheken Erstellung von Einsteiger-freundlichen Bibliotheken Implementierung der Basis-Funktionalitäten Garantiert Einfachheit, jedoch ev. eingeschränkte Funktionalität Erweiterte Funktionalitäten beibehalten Für erfahrende User Plattformunabhängigkeit in Java und C Ähnlichkeit in der Verwendung (Hochsprachen) Basis: Funktionalitäten - I2C: Wert von einem Sensor lesen usw. - MCK: Einen Servo ansprechen, einen Output-Port aktivieren/deaktivieren usw.

Programmierung – Ablauf (Allgemein) Start mit einer schülerunfreundlichen I2C oder MCK Bibliothek Anlegen einer neuen Bibliothek Kapselung der Klassen Implantierung einfach zu verwendender Basis- Funktionalitäten Beibehaltung der komplexen Funktionen Die so erstellten Bibliotheken (C#, Java, teilweise C) werden für Samples und Applikationen verwendet Eine Hierarchie von Bibliotheken ist auch möglich Bsp.: C-Header -> C++ Lib -> C# Lib

Warum Kapselung? Realisierung nicht mehr von LL weg Verringerung der Fehlerquellen solide, leistungsfähige Software-Basis Leichtere Erstellung von plattformunabhängigen Bibliotheken

Ergebnis der Implementierung MCK C C# Java Bibliothek Nein Ja Samples I2C C C# Java Bibliothek Ja Samples

Verwendete Bibliotheken MCK C#: Bibliothek von Making Things Java: Bibliotheken NetUtil bzw. JavaOSC Alle drei Bibliotheken basieren auf Open Sound Control I2C Beispielanwendung von Till Harbaum libusb-Bibliothek LibusbJava – Java-Port von libusb

MCK – Programmierung - Übersicht C# - Bibliothek (HL) Baut auf der Basis C# Bibliothek von MakingThings auf. (Nur Windows) Java - Bibliothek (HL) Baut auf der JavaOSC Bibliothek auf. (Plattformunabhängig) Basis-Bibliotheken basieren auf OSC Realisierung eines Ticket-Systems In C werden Samples erstellt (LL) Direkte Ausführung auf dem Mikrocontroller Cross Compiler Kompilierung auf Windows und Linux

Was macht das Ticket-System? (MCK) Vereinfachte Hardwareansteuerung für die Schüler Es werden Kommandos (für die Hardware) mittels Tickets abgesetzt Kommando-Typen Setter-Kommando: Setzt den Wert einer Hardware-Adresse Getter-Kommando: Fragt den Wert einer Hardware-Adresse ab Schritte nach dem Anlegen eines Tickets Kommandotyp setzen Hardware-Adresse definieren (Zwei Modi) Eventuellen Parameter setzen (Setter-Kommando) Ausführen (Zwei Modi) Kommandos: Verändern der Position eines Servos Aktivieren eines Output Ports …

Möglichkeiten zur Definierung der Hardware-Adresse (MCK) t…Aktives Ticket-Objekt Per Struktur Code: t.setGetterKommando(MCK.Servo0.Position); Für Anfänger Struktur enthält nur die wichtigsten Module Per String Code: t.setGetterKommando(“/Servo/0/Position“); Für Fortgeschrittene und Profis Alle Module ansprechbar In Schleifen verwendbar

Ticket Ausführungsmodi (MCK) executeBlocking() Hauptthread wird angehalten Fortsetzung beim Erhalten eines Wertes GETTER-Kommandos executeNonBlocking() Hauptthread wird nicht angehalten Manuelle Statusabfragen mittels hasFinished() GETTER- und SETTER-Kommandos Ergebnis der Ausführung wird mittels getValue() abgefragt

Realisierung von executeNonBlocking() Boolean ret = false; Integer res; … public void handleMessage(OscMessage msg) { ret = true; ArrayList<Object> args = msg.getArguments(); res = Integer.parseInt(args.get(0).toString()); } public Boolean hasFinished() return ret; public int getValue() return res; Boolean ret = false; int res; … private void callBackHandler(OscMessage oscM) { ret= true; res = (int)oscM.Values[0]; } public Boolean hasFinished() return ret; public int getValue() return res; Java C#

Realisierung von executeBlocking() final Object sync = new Object(); … public void handleMessage(OscMessage msg) { synchronized(sync) sync.notifyAll(); } sync.wait(); public class waiterThread { Boolean stop = false; public void dowork() while (!stop) ; } public void stoppen() stop = true; … private void callBackHandler(OscMessage oscM) if (s.wt != null) s.wt.stoppen(); s.wt = new waiterThread(); t = new Thread(s.wt.dowork); t.Start(); t.Join(); Java C#

Warum ein Ticket-System? (MCK) Zu Kontrolle des Datenflusses Immer nur ein Ticket aktiv Einfache und effiziente Unterstützung von SETTER- und GETTER-Kommandos Unterstützung mehrerer Benutzergruppen Leichterer Umstieg zwischen den HL- Sprachen Verwendung bleibt gleich Ähnliche Exceptions Vereinheitlichung der Kommunikation über LAN- und USB-Port Singleton Prinzip (Datenflusskontrolle)

MCK – Example-Struktur Betroffenes Objekt Schritt Funktion mt MakingThings-Objekt anlegen Port im Konstruktor wählen Port.USB oder Port.LAN Verbindung öffnen open() Verbindung testen isReady() Ticket generieren generateTicket() t Kommando und Kommandotyp setzen Setter/Getter möglich Kommando ausführen 1. executeBlocking() -> Ausführen und Hauptthread blockieren [GETTER] 2. executeNonBlocking() -> Ausführen und Hauptthread nicht blockieren [GETTER, SETTER] Bei Getter Kommandos das Ergebnis auslesen getValue() Speicher den das Ticket-Objekt belegt freigeben Dispose() Verbindung schließen close() Speicher den das MakingThings-Objekt belegt freigeben

MCK – Vergleich der HL-Sprachen MakingThings mt = new MakingThings(Port.LAN); mt.open(); Ticket t = mt.generateTicket(); t.setGetterKommando(MCK.Servo0 .Position) t.executeBlocking(); System.out.println(t.getValue()); t.dispose(); mt.close(); mt.dispose(); MakingThings mt = new MakingThings(Port.LAN); mt.open(); Ticket t = mt.generateTicket(); t.setGetterKommando(MCK.Servo0 .Position) t.executeBlocking(); Console.WriteLine(t.getValue()); t.Dispose(); mt.close(); mt.Dispose(); MCK.Servo0.Position = Aktuelle Position des an dem Servo-Anschluss 0 des Make Controller Kits angeschlossenen Servos Java C#

I2C - Programmierung Bauen auf libusb auf  OS-Unabhängig C#-Lib: In DLL zusammengefasste C- Funktionen verwendet Java-Lib: LibusbJava benutzt um C#-Lib nachzubilden

Libusb (I2C) Bibliothek für die i2c-tiny-usb Hardware Komponente Open Source Bietet eine einheitliche Schnittstelle für USB- Entwicklungen Bewusst simpel gehalten OS-Unabhängig Weit verbreitet Entwickelt in C Java-Port: LibusbJava

I2C – Example-Struktur i2c_get_multiple_converters i2c_init_win_multiple i2c_tiny_usb_get_func i2c_lookup_address i2c_write_basic i2c_read_basic i2c_close_win i2c_get_multiple_converters Liefert die Adressen der an- geschlossenen Converter Wenn nur ein Converter i2c_init_win()

Einordnung des ROLEZ-Systems Betriebssystem Laufzeitumgebung (.NET, Java) Übernommene Bibliotheken ROLEZ-Bibliotheken Benutzerprogramm Runtime in .net ist eigentlich CRL

Fakten Warenwert des Endaufbaus: ca. € 150 Arbeitszeit: je ca. 230 Stunden 2 Systeme 3 Sprachen 15 Samples