Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Diplomarbeitspräsentation Christian Aichinger

Ähnliche Präsentationen


Präsentation zum Thema: "Diplomarbeitspräsentation Christian Aichinger"—  Präsentation transkript:

1 Diplomarbeitspräsentation Christian Aichinger

2 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)

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

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

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

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

7 Basis

8 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

9 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

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

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

12 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

13 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

14 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

15 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, …).

16 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

17 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.

18 MCK - Schnittstellen

19 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

20 /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

21 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

22 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.

23 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

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

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

26 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

27 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

28 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

29 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

30 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

31 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#

32 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#

33 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)

34 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

35 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#

36 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

37 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

38 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()

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

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


Herunterladen ppt "Diplomarbeitspräsentation Christian Aichinger"

Ähnliche Präsentationen


Google-Anzeigen