Virtual Walk through 3D-Worlds with Mobile Phone

Inhalt

1. Projektentstehung und –planung. 2

Entstehung der Projektidee. 2

Ziele, Nutzen. 2

Recherchen und Quellen. 3

Netbeans. 3

Blender-Dokumentation (deutsch). 3

JSR-172: Web API 3

JSR-179: Location API 3

JSR-184: Mobile 3D-Graphics API 3

JSR-256: Mobile Sensor API 3

Python for S60 Module Reference. 4

Developer Forum Nokia. 4

Bücher. 4

Aufgabenverteilung. 5

2. Inhaltliche Beschreibung des Projektes. 5

Idee und Umsetzung. 5

Verwendete Technologien, Probleme und Lösungen. 6

Übersicht. 6

3D-Objekte. 6

Bewegung. 7

Virtual Maze Game. 10

Virtual Home Control 12

 

 

1. Projektentstehung und –planung

Entstehung der Projektidee

Mit einem modernen Handy kann man schon lange mehr, als nur telefonieren oder SMS versenden. Doch auch in der Softwareentwicklung für mobile Geräte hat sich einiges geändert. So kann man mit aktuellen Modellen Grafiken und Animationen darstellen, auf Bewegungen reagieren, GPS-Daten auslesen, im Internet surfen und vieles mehr. Da wir im Unterricht nicht sehr viel über die diversen, eingebauten Sensoren eines modernen Mobiltelefons, wie zum Beispiel dem Beschleunigungssensor oder dem elektronischen Kompass, gelernt  haben, entschlossen wir uns, dass unsere Diplomarbeit unbedingt eine Implementierung einiger dieser Sensoren enthalten sollte.

Ebenso hat uns ein im letzten Jahr durchgeführte Projekt, des Mobile Home Control (Steuerung diverser elektronische Geräte im Haushalt über das Internet) sehr begeistert.

 

Eine grundlegende Idee war, dass die Bewegung durch eine virtuelle Welt nur mit dem Steuerkreuz eine nicht sehr realistische Angelegenheit ist. Somit kamen wir auf die Idee, dass man sich mit der eigenen, physischen Bewegung des Anwenders, der das Mobiltelefon in der Hand hält, durch die dreidimensionale Welt navigiert. Wenn also der Anwender einen Schritt nach vorne geht, soll man sich auch in der Welt einen Schritt nach vorne bewegen; wenn der Anwender sich um 45° dreht, soll man sich auch in der Welt um 45° drehen.

Somit kann man sich beispielsweise in der eigenen Wohnung "bewegen", ohne dass man an diesem Ort ist und die dort vorhandenen Geräte steuert.

 

Ziele und Nutzen

Ziel ist es, dem Anwender zu ermöglichen, sich durch eine gewohnte Umgebung, die dreidimensional nachgebaut und am Handy angezeigt wird, mit seiner eigenen physischen Bewegung (Schritte nach vorne, Drehungen) zu bewegen und elektronische Geräte über das Internet fernzusteuern beziehungsweise zu überwachen.

Da man leicht vergessen kann, ein Gerät, wie beispielsweise ein Herd, auszuschalten und man nicht immer sofort nach Hause fahren kann, um nachzusehen ob sich die Befürchtung bewahrheitet, ist es einfacher, unserer Applikation zu starten und einfach im virtuellen "Zuhause" nachzusehen. Mobiltelefone sind heutzutage bereits weit verbreitet und unser Programm benötigt in der Minimalvariante nur ein Java-fähiges Handy, das mindestens die Pakete JSR-184 und JSR-172 unterstützt. Diese beiden Pakete sind jedoch schon weit verbreitet und werden von fast jedem - auch schon älteren - Java-fähigen Mobiltelefon bereitgestellt.

 

Der mobile Zugriff in das Internet wird entweder durch die WLAN-Funktion des Handys oder durch den Mobilfunkbetreiber über das Mobilfunknetz (GPRS, UMTS, HSDPA) gewährleistet.

Die Anwendungen und Dienste für das Steuern und Überwachen sind kostenlos und können aus dem Internet bezogen werden.

Hierfür ist jedoch ein Server mit dem Betriebssystem Windows Server 2008 erforderlich.

Die Kosten für ein Steuermodul beziehen sich auf etwa 40€.

Recherchen und Quellen

Netbeans

Als Entwicklungsumgebung verwendeten wir Netbeans 6.8 mit dem Mobility Pack.

Dieses Werkzeug kann kostenlos aus dem Internet bezogen werden.

http://www.netbeans.org/

 

Blender-Dokumentation (deutsch)

Die deutsche Blender-Dokumentation setzt sich mit dem Grafikprogramm Blender auseinander und bietet auch für Neulinge eine ideale Plattform zum schrittweisen Erlernen dieses Tools.

http://de.wikibooks.org/wiki/Blender_Dokumentation

 

JSR-172: Web API

Die Spezifikation der JSR-172 enthält eine detaillierte Beschreibung der Programmierschnittstelle zum Ansprechen der Webservices.

Diese wurde zur Steuerung der einzelnen Module über das Internet verwendet.

http://jcp.org/en/jsr/detail?id=179

 

JSR-179: Location API

Die Spezifikation der JSR-179 enthält eine detaillierte Beschreibung der Programmierschnittstelle für die Ermittlung der aktuellen Position eines mobilen Endgerätes.

Diese wurde zum Auswerten des elektronischen Kompasses verwendet.

http://jcp.org/en/jsr/detail?id=179

 

JSR-184: Mobile 3D-Graphics API

Die Spezifikation der JSR-184 enthält eine detaillierte Beschreibung der Programmierschnittstelle für die Darstellung und Animation von 3D-Grafiken.

Diese wurde zum Anzeigen der dreidimensionalen Modelle verwendet.

http://jcp.org/en/jsr/detail?id=184

 

JSR-256: Mobile Sensor API

Die Spezifikation der JSR-256 enthält eine detaillierte Beschreibung der Programmierschnittstelle für die Auswertung verschiedenster Sensoren (Beschleunigung, Temperatur,…)

Diese wurde zum Auswerten der Beschleunigungssensoren verwendet.

http://jcp.org/en/jsr/detail?id=256

 

Python for S60 Module Reference

In dieser Online-Dokumentation werden alle Module, die in der aktuellen Python for S60, also die Python-Bibliothek für Symbian-Handys, vorhanden sind, aufs genauste beschrieben und einige Lösungsvorschläge dargeboten.

http://pys60.garage.maemo.org/doc/s60/

 

Developer Forum Nokia

Hier kann man einige wertvolle Informationen auf dem Bereich der Softwareentwicklung für mobile Endgeräte sammeln und nachlesen.

http://developer.nokia.com/

 

Bücher

Zur weiteren Einarbeitung in die „Java Micro Edition“ wurden folgende Bücher verwendet:

 

·         Java Micro Edition Entwicklung mobiler JavaME-Anwendungen mit CLDC und MIDP

2.0, Klaus-Dieter Schmatz, aktualisierte und erweiterte Auflage, dpunkt.verlag

 

·         3D Graphics: Learning 3D Graphics with the Java Micro Edition, Claus Höfele, Auflage: Pap/Cdr (März 2007), Course Technology Inc

 

 

Nebenbei wurden auch zahlreiche Internetrecherchen betrieben.

 

 

Zeitlicher Ablauf / Meilensteine

 

Sommerferien 2009

Einarbeiten in die jeweiligen Technologien

September 2009

Eigentlicher Projektstart

Oktober 2009

Erste 3D Welt mit Blender erstellt

3D Welt in Java eingebunden

Texturen auf dem Handy angezeigt

Kollisionsabfragen in das Programm eingebunden

November 2009

Modellierung diverser Welten

Schaltbare Objekte anzeigen (Virtual Home Control)

Dezember 2009

Beginn der Auswertung mit den Sensoren

Laufzeit- und Algorithmenoptimierung

Jänner 2010

Fertigstellung der Sensorauswertung

Testen der Bewegungserkennung

Fertigstellung der Java Applikation

Februar 2010

Zusammenführung aller Projektteile, abschließende Tests

 

Aufgabenverteilung

 

Scheipel Tobias           Sensorauswertung, Blender, allgemeine Klassenerstellung für Handy-Applikationen , grundlegende Grafikprogrammierung

Sesser Stefan              Grundgerüste Handy-Applikationen, Blender, Grafikprogrammierung

 

 

2. Inhaltliche Beschreibung des Projektes

Idee und Umsetzung

Die Anwendung für das Handy wurde mithilfe der Java Micro Edition realisiert, welche den Vorteil der Portabilität besitzt, da diese von den meisten der modernen Handys unterstützt wird. Um unser Programm auf einem Handy einsetzten zu können, benötigt es das Optionale Java-Paket „Mobile 3D Graphics API“ (JSR-184) und „Web Services API“ (JSR-172). Nicht zwingend erforderlich sind Bewegungssensoren und einen Kompass, welche in dem Optionalen Java-Paket „Mobile Sensor API“ (JSR-256) vorhanden sind.

 

Das Projekt gliedert sich in 2 Teilbereiche:

·         Virtual Maze Game (Ein Labyrinthspiel)

·         Virtual Home Control (Eine Applikation zum Steuern und Überwachen elektronisch schaltbarer Geräte über das Internet)

 

Die dreidimensionalen Welten werden hierbei entweder lokal mitgeliefert (Virtual Maze Game) oder über das Internet heruntergeladen (Virtual Home Control). Die Darstellung erfolgt, in beiden Fällen gleichermaßen, über das optionale Paket JSR-184.

 

Als Testplattform verwendeten wir das Nokia 6710 Navigator, das die Sensoren zwar physikalisch eingebaut hat, jedoch JSR-256 nicht unterstützt. Die Lösung für dieses Problem brachte ein Python-Script, mit dem man auf die Sensoren zugreifen kann. Dieses Script sendet die Daten dann anschließend, wie bei der JSR-256, an die Java-Anwendung.

 

Das Serversystem, dass zum Schalten der Module benötigt wird, ist bereits installiert vorhanden und muss nur noch per Software angesprochen werden.

 

 

Verwendete Technologien, Probleme und Lösungen

Übersicht

 

Sun Netbeans 6.8

Entwicklungsumgebung für JavaME MIDlets

Blender 2.42a

Programm zum Erstellen dreidimensionaler Welten

Python 2.6  IDLE

Entwicklungsumgebung für Python-Scripts

Microsoft Visual Studio 2008

Entwicklungsumgebung für .NET

Verwendet für Hilfsprogramme und Testläufe zur Sensorauswertung

Sun Java ME SDK 3.0

Emulatoren zum Testen von MIDlets, die verschiedene optionale Pakete verwenden

 

3D-Objekte

Um auf einem Handy überhaupt eine dreidimensionale Welt anzeigen zu können, ist das optionale Java Paket JSR-184 zwingend erforderlich. Da so ziemlich alle Handys, die derzeit am Markt erhältlich sind, Java-fähig sind und dieses Paket implementiert haben, stellt dies jedoch kein sehr großes Problem dar.

 

Bevor man an das einbinden einer 3D-Welt in eine mobile Java-Applikation denkt, muss man zuerst mit Hilfe der Software "Blender" eine eigene virtuelle Umgebung schaffen. Da Blender eine sehr professionelle Software ist, liefert es dem Benutzer eine große Variation von Fenstern, Ansichten und Buttons. Unsere 3D-Welt besitzt allerdings keine Animation oder dergleichen Komplexes, somit ist nur ein Bruchteil des Funktionsangebotes der Software für unsere Zwecke zu gebrauchen. Hilfreich für die Einarbeitung in die Modellierung, war die oben genannte Blender Dokumentation.

Um die virtuellen Welten noch lebhafter und realitätsgetreuer zu gestalten, gibt es in Blender die Möglichkeit Texturen (Bilder) auf Objekte zu legen. Diese Funktion bringt jedoch einige Nachteile mit sich, da in Blender die Seiten eines Quaders intern als Dreiecke dargestellt werden. Aufgrund dieser Tatsache bricht sich das Bild, wenn man von verschiedenen Blickwinkeln auf das Objekt sieht.

 

Dieses Darstellungsproblem lässt sich auf zwei verschiedenen Arten lösen:

·         Ein gleichmäßiges Bild wählen, dass aus mehreren Perspektiven ähnlich aussieht

·         Das Bild auf mehrere kleinere Quader legen und aus diesen einen großen Quader bauen

 

Um sich nun der Konvertierung der eigens kreierten 3D-Welten in Java-Fähige Files bedienen zu können, muss das Python-Script "M3G-Exporter"[1] heruntergeladen und in die Blender-Software eingebunden werden. Das durch die Konvertierung entstandene *.m3g File kann nun in das Java-Programm eingebunden werden.

Hierzu gibt es zwei verschiedene Möglichkeiten:

·         Als Programmressource direkt in das Programm einbinden

·         Auf einen Server legen und zur Laufzeit herunterladen

 

Die Möglichkeit das File auf den Server zu legen kommt uns beim Virtual Home Control sehr zu Gute, da einerseits beim Speicherbedarf des Programmes eingespart werden kann und andererseits bei einer Änderung des Files diese automatisch auf alle Applikationen angewandt wird.

 

Eine weitere Möglichkeit die virtuelle Welt zu verändern, ist sie direkt in Java zu bearbeiten.

Diese Methode kommt uns bei der visuellen Darstellung der einzelnen Module zu Gute. Jedes schaltbare Modul erhält hierbei einen eigen Würfel, der mit Hilfe von Koordinaten, die am Server liegen, positioniert wird. Zusätzlich ändert der Würfel, je nach dem aktuellen Zustand des ersten Ports des Modules, seine Farbe:

Zustände:

·         Grün – Modul ist eingeschaltet

·         Rot – Modul ist ausgeschaltet

·         Orange – Modul ist Inaktiv

 

Bewegung

Damit man sich mit seinem Handy mittels seiner eigenen physikalische Bewegung durch die dreidimensionale Welt bewegen kann, muss zunächst gewährleistet sein, dass das Handy einen eingebauten, dreiachsigen Beschleunigungssensor, einen sogenannten Accelerometer XYZ, sowie einen eingebauten, elektronischen Kompass, einen sogenannten Magnetic North, hat.

 

Der Beschleunigungssensor liefert laufend Daten, wie groß die Beschleunigung auf die jeweilige Achse ist. Der Wertebereich ist dabei unterschiedlich, jedoch ist er immer symmetrisch von der negativen bis zur positiven Erdbeschleunigung (z.B. in unserem Fall von -1000 bis +1000, 1000 entspricht dabei der Erdbeschleunigung von rund 10)

Der elektronische Kompass liefert immer den entsprechenden Winkel in Relation zum magnetischen Nordpol der Erde von 0 bis 359°.

 

 

Sobald diese Grundvoraussetzung erfüllt ist, stellt sich die nächste, entscheidenden Frage: Wie kann auf diese Sensoren softwaremäßig zugegriffen werden, beziehungsweise wie kann ich diese Sensoren überhaupt in meiner Applikation verwenden?

Hierzu gibt es zwei verschiedene Möglichkeiten:

·         Das Auslesen der Sensoren über die JSR-256 (Mobile Sensor API)

·         Das Auslesen der Sensoren über ein Python-for-S60 Script

 

1)      JSR-256

JSR-256 ist ein optionales Java-Paket, dass eine Programmierschnittstelle zum Auslesen von physikalisch eingebauten Sensoren beinhaltet, jedoch nicht von jedem Endgerät, das diese Sensoren eingebaut hat, unterstützt wird. Der Aufwand beim Auslesen mittels dieser Schnittstelle ist minimal, da die Sensorwerte, je nach Modell, in einer gewissen Frequenz automatisch zur Verfügung gestellt werden und keine weitere Einstellung mehr notwendig ist.

 

 

2)      Python-for-S60

Falls man den Komfort des JSR-256-Paketes nicht hat, muss man den Umweg über ein Python-Script gehen. Python ist eine Programmiersprache, die auf vielen Plattformen eingesetzt werden kann und mit der vor allem schnell Prototypen erstellt werden können. Mit Python hat man Zugriff auf die meisten Hardwareressourcen des Handys und kann somit weit hardwarenäher programmieren, als mit Java. Ein Nachteil ist aber, dass Python eine von Grund auf andere Programmiersprache als C, C++, Java oder C# ist, und somit eine gewisse Schwierigkeit für Softwareentwickler anderer Programmiersprachen ist. Weiters ist die Dokumentation bei weitem nicht so ausführlich und einige Programmiertechniken, wie das Ansprechen von Webservices oder das Anzeigen von dreidimensionalen Modellen, sind bei weitem komplizierter zu realisieren als in Java.

Ein weiterer Nachteil, speziell auf den elektronischen Kompass bezogen, ist die Tatsache, dass dieser beim Auslesen über Python zuerst kalibriert werden muss, und somit nicht sofort gültige Daten bereitstellt.

Das Prinzip der Auswertung mit einem Python-Script liegt in einem einfachen TCP-Server. Das Python-Script startet einen TCP-Server und beginnt zu horchen, ob sich ein Client (in unserem Fall ein Java-MIDlet) auf ihn verbindet. Ist das der Fall, beginnt der Server sofort Daten zu senden, die jedoch Anfangs nur den Kalibrierungslevel des Kompasses beinhalten und erst nach Abschluss der Kalibrierung gültige Beschleunigungssensor- und Kompasswerte beinhaltet.

 

 

Die Umwandlung von den reinen Sensorwerten in eine Bewegung in der virtuellen Welt erfolgt bei beiden Varianten gleich. Zum Ermitteln der Drehung nach links oder rechts wird die relative Winkeländerung des elektronischen Kompasses herangezogen.

Die Bewegung nach vorne wird über die Beschleunigungssensorwerte ermittelt. Da es jedoch unmöglich ist, eine Unterscheidung, ob nach vorne oder nach hinten gegangen wird, zu treffen, muss man sich hierbei auf unterschiedliche Werte im Stillstand und in der Bewegung einstellen und je nach vorliegender Situation darauf reagieren. Dies erfolgt nach dem Prinzip eines digitalen Filters, der die entsprechende Achse des Beschleunigungssensors auswertet und feststellt, ob eine Bewegung stattfindet oder nicht.

 

Bewegung nach vorne:

 

Drehung um etwa 20°

 

Virtual Maze Game

Das Virtual Maze Game stellt ein einfaches Labyrinthspiel dar, in dem man versuchen muss, den Ausgang in einem dreidimensional dargestellten Labyrinth finden muss. Als Hilfestellung hat man, je nach Schwierigkeitsgrad, zwei- oder dreimal pro Durchgang die Möglichkeit, das Labyrinth von oben zu betrachten und so von der aktuellen Position aus, den besten Pfad zum Ziel zu finden. Die Bewegung erfolgt hierbei entweder über das Steuerkreuz oder die Steuerung mittels der eingebauten Sensoren, wie oben beschrieben.

Bedienung:

 

 

 

 

 

 

 

 

Nach dem Starten des Programmes erscheint ein Informations-fenster, das die Eigenschaften des Mobiltelefons anzeigt.

 

 

 

 

 

 

Als nächstes erscheint ein Auswahlfenster, in dem entschieden werden kann, wie gesteuert werden soll.

(Achtung: Wenn die Sensoren mit Python ausgelesen werden, muss das Skript gestartet werden)

 

 

 

 

 

 

 

 

Nun befindet man sich im Hauptmenü, wo man sich zwischen den dargestellten Menüpunkten entscheiden kann.

(nur mit Python)

 

 

Nachdem man im Hauptmenü „Start“ ausgewählt hat, kommt man, wenn man auf die Sensoren mittels Python zugreift, zum Kalibrieren.

Jetzt muss das Handy um die eigenen Achsen gedreht werden, um den elektronischen Kompass zu kalibrieren.

 

(nur mit Python)

 

 

 

 

 

 

 

Nach einer gewissen Zeit gelangt man zum gelben Kalibrierungsfenster.

Die Kalibrierung ist zu 50% abgeschlossen.

(nur mit Python)

 

 

 

 

 

 

Wenn das grüne Display erscheint, ist die Kalibrierung des elektronischen Kompasses abgeschlossen. Nun kann das Spiel gestartet werden.

 

 

 

 

 

 

 

 

Hier sieht man die eigentliche virtuelle Welt, in der man sich jetzt mithilfe der zuvor gewählten Navigationsmethode bewegen kann.

 

 

 

Virtual Home Control

Das Virtual Home Control ist ein Programm, welches dem Benutzer eine Virtuelle Welt zeigt. In dieser sind diverse Module, die in der Lage sind, Geräte zu schalten und zu überwachen, als farbiger Würfel dargestellt. Wenn man sich einem der genannten Würfel nähert, stellt sich eine Schaltfläche "Schalter" zur Verfügung, bei dessen Betätigung sich ein Menü öffnet. Dieses teilt dem Benutzer den aktuellen Status des Modules mit und gestattet ihm auch diesen zu ändern, sprich zu schalten.

Die Bewegung durch die virtuelle Welt erfolgt hierbei entweder über das Steuerkreuz oder die Steuerung mittels der eingebauten Sensoren, wie oben beschrieben.

 

Bedienung:

Beim Virtual Home Control ist der Start sowie die Kalibrierung ident und somit wird hierbei auf eine genauere Erläuterung dieser Teile nicht eingegangen.

 

 

 

 

Nach dem Infofenster und dem Bewegungsauswahl-fenster kommt man zur Auswahl des Servers. In der Liste findet man alle Server, die Webservices zum Schalten von elektronischen Geräten bereitstellen.

 

 

 

 

 

Nach der Auswahl des Servers erfolgt die Anmeldung an diesem. Dazu müssen Benutzername und Passwort eingegeben werden.

(In unserem Fall:

Benutzername:

member

Passwort:

member)

 

 

Nachdem auch hier die Kalibrierung (falls notwendig) abgeschlossen wurde, findet man sich in der virtuellen Welt des Servers wieder, wo schaltbare Geräte als farbige Würfel dargestellt werden.

(Farbcode siehe oben)

 

 

 

Wenn man sich nahe genug an einen dieser Würfel heran bewegt, erscheint das Menü „Schalter“ am rechten Softbutton. Damit kann jetzt das ausgewählte Gerät gesteuert beziehungsweise überwacht werden.

 

 

Wenn ein Gerät mittels „Schalter“ ausgewählt wird, erscheint ein Infofenster, das die schaltbaren Ports an dem Modul anzeigt.

Inaktive Ports werden mit „Nicht Verbunden“ gekennzeichnet.

Zum Schalten oder überwachen muss ein Port ausgewählt werden.

 

 

Nachdem man einen Port ausgewählt hat, erscheint das Infofenster für den Port. In diesem Fall ist der Port „Grüne LED“ ausgeschaltet. Um das zu ändern braucht man nur „Change“ am rechten Softbutton auswählen.

 

 

 

 

 

 

 

Nachdem „Grüne LED“ eingeschalten wurde, erscheint der zugehörige Würfel grün in der virtuellen Welt.

 

 



[1] Dieses Script kann unter der Adresse http://www.nelson-games.de/bl2m3g/default.html bezogen werden.

© 2010 by Scheipel