Hochschule Bremen Echtzeit-Erkennung einer Kurve … · Apple SDK the goal of this thesis is to...

42
Hochschule Bremen Echtzeit-Erkennung einer Kurve mit dem Core Motion Framework des IOS SDK Bachelorarbeit im Studiengang Internationaler Studiengang Medieninformatik von Jan Christoph Schrader Matrikelnummer: 339786 Datum der Abgabe 04.05.2015 Erstprüfer: Prof. Dr. Barbara Grüter Zweitprüfer: Simon Bogutzky M. Sc.

Transcript of Hochschule Bremen Echtzeit-Erkennung einer Kurve … · Apple SDK the goal of this thesis is to...

Hochschule Bremen

Echtzeit-Erkennung einer Kurve mit dem Core

Motion Framework des IOS SDK

Bachelorarbeit

im Studiengang Internationaler Studiengang Medieninformatik

von

Jan Christoph Schrader

Matrikelnummer: 339786

Datum der Abgabe 04.05.2015

Erstprüfer: Prof. Dr. Barbara Grüter

Zweitprüfer: Simon Bogutzky M. Sc.

II

Eidesstattliche Erklärung

Hiermit versichere ich eidesstattlich, dass ich die vorliegende Arbeit selbständig und

ohne Benutzung anderer als der angegebenen Hilfsmittel angefertigt habe. Alle

Stellen, die wörtlich oder sinngemäß aus veröffentlichten und nicht veröffentlichten

Schriften entnommen sind, wurden als solche kenntlich gemacht. Die Arbeit wurde

in gleicher oder ähnlicher Form keinem anderen Prüfungsamt vorgelegt. Mir ist

bewusst, dass eine falsche Erklärung rechtliche Folgen haben wird.

Bremen, 4. Mai 2015

Unterschrift

III

Zusammenfassung

Die Themen Ganganalyse und Bewegungserkennung sind ein aktuelles und breites

Thema der Informatik. Diese Arbeit beschäftigt sich mit dem Teilaspekt der

Kurvenerkennung. Mit Hilfe des Core Motion Framework von Apple soll ein

Algorithmus entwickelt werden, welcher in Echtzeit erkennt, wann ein Benutzer mit

dem Handy in der Tasche um eine Kurve geht. Hierfür wurden drei Konzepte

erarbeitet die auf verschiedene Sensoren und Daten zurückgreifen. Während ein

Konzept das Magnetometer nutzt, greifen zwei Sensoren auf Werte des Gyroskops

zurück.

Im Rahmen der Arbeit wird auf Eigenarten und Probleme der Konzepte

eingegangen und mögliche Lösungen werden aufgezeigt.

Die verschiedenen Konzepte werden nach deren Ausarbeitung in einem Prototyp

umgesetzt, welcher für einen Test auf einer vorgegeben Strecke verwendet wird.

Die Auswertung der Ergebnisse zeigen ein deutlich besseres Abschneiden des

Konzeptes, welches Attitude Roll Daten nutzt und mit einem Referenzwinkel

arbeitet, gegenüber den anderen beiden Konzepten.

Einige mögliche Verbesserungen und Erweiterungen der Erkennung werden

abschließend in dieser Arbeit aufgezeigt.

Abstract

Gait analysis and motion tracking is a present and large topic in computer science.

This thesis deals with turn detection. Using the Core Motion Framework from the

Apple SDK the goal of this thesis is to develop an algorithm that detects a turn while

the user has an iPhone in his pants pocket. Three different approaches using the

magnetometer or the gyroscopes roll value doing a data analysis or using a

reference angle were developed. Multiple problems of the approaches had to be

dealt with before they were tested on a fixed track.

An evaluation of the results shows the advantages using a reference angle and the

roll values of the gyroscope over the other approaches. Though several weaknesses

could be determined and possible improvements were provided in a forward plan.

IV

Inhaltsverzeichnis

1. Einleitung 1

1.1. Motivation 1

1.2. Aufgabenstellung 2

1.3. Aufbau der Arbeit 2

2. Grundlagen 4

2.1. Core Motion Framework 4

2.2. Sensoren des iPhone 5

2.2.1. Beschleunigungssensor 6

2.2.2. Gyroskop 7

2.2.3. Magnetometer 7

2.2.4. GPS 7

2.3. Definition einer Kurve 8

3. Konzepte 9

3.1. Magnetometer 9

3.2. Attitude-Roll Analyse 10

3.3. Referenzwinkel 13

3.4. Bekannte Probleme der Konzepte 15

3.4.1. Probleme des Magnetometer-Konzepts 15

3.4.2. Probleme des Attitude-Roll Analyse-Konzepts 16

3.4.3. Kardanische Blockade 16

4. Umsetzung 18

4.1. Allgemeiner Aufbau des Prototyps 18

4.2. Grundkonfiguration Location Manager 20

4.3 Grundkonfiguration Motion Manager 20

4.4. Umsetzung Magnetometer Konzept 22

4.5. Umsetzung Attitude-Roll Analyse Konzept 22

4.6. Umsetzung Referenzwinkel Konzept 24

5. Evaluation 26

5.1. Testaufbau 26

5.1.1. Teststrecke 27

5.1.2. Testpersonen 28

5.2. Testergebnisse 28

5.3. Auswertung 31

6. Fazit und Ausblick 32

6.1. Fazit 32

6.2. Ausblick 32

Literaturverzeichnis 34

Abbildungsverzeichnis 37

Tabellenverzeichnis 38

1

1 Einleitung

Die Einleitung bietet einen Einstieg in die Problematik, die Motivation hinter dem

Thema und die Struktur der Arbeit.

1.1 Motivation

Die Ganganalyse und Bewegungserkennung ist ein aktuelles und breit gefächertes

Thema der Informatik. In diesen Bereich fällt auch das Thema dieser Arbeit.

Viele weit verbreitete Anwendungen für Smartphones wie zum Beispiel “Google Fit”

[1], “Moves” [2] oder “Apple Health” [3] führen Ganganalysen durch. Diese

Anwendungen verfolgen und analysieren, wie auch viele Fitness Anwendungen, die

Bewegungen und Aktivitäten des Benutzers. Dies geschieht in der Regel allerdings

recht oberflächlich und beinhaltet meist nur einen Schrittzähler, eine

Aktivitätserkennung und einen Streckenverlauf der mittels GPS aufgezeichnet

wurde.

Eine Erkennung einer Kurve in Echtzeit geht einen Schritt weiter und analysiert die

Aktivität des Benutzers im Detail.

In der Informatik wird der Kontext in dem der Benutzer eine Anwendung benutzt,

immer wichtiger. Wenn dem Benutzer zum Beispiel Werbung gezeigt wird, soll diese

möglichst von dem Supermarkt sein, welchen er gerade betritt. Das sollte so

funktionieren, dass das Gerät erkennt in welchem Kontext es sich gerade bewegt,

und nicht erst durch eine Eingabe des Benutzers an diese Information gelangen.

Informationen zu einem solchen Kontext kann eine Kurvenerkennung beisteuern.

Navigationssysteme für Autos greifen auf GPS zurück um den aktuellen Fortschritt

der Route zu erfassen. Wenn man zu Fuß unterwegs ist und auf eine Navigation

zurückgreift, ist dieses Vorgehen vielleicht zu ungenau und könnte zu fehlerhaft

sein. Eine Kurvenerkennung kann hier zuverlässiger sagen, dass der Benutzer

abgebogen ist, als die Positionsbestimmung über GPS.

Hier wären als Anwendungsgebiet auch mobile Spiele zu nennen. Ein mobiles Spiel

“Fangen” zum Beispiel könnte den suchenden Spielern mitteilen, dass der

flüchtende Spieler gerade abgebogen ist.

2

Ein weiteres Beispiel in der das Thema Bedeutung finden kann sind Flow-

Maschinen [4]. Diese analysieren den Gang des Benutzers und unterstützen ihn

durch Klang, der auf Basis der Ganganalyse erstellt wurde, das Flow Erlebnis zu

erlangen [5].

1.2 Aufgabenstellung

In dieser Arbeit werden mehrere Konzepte zur Erkennung einer Kurve entwickelt

und evaluiert. Hierzu müssen zunächst die nötigen Grundlagen geschaffen werden

bevor die Lösungskonzepte erarbeitet werden können. Zu der Herausarbeitung der

Konzepte gehört auch eine Analyse, welche Probleme auftreten könnten und wie

man diese lösen kann.

Der nächste Schritt in dieser Arbeit ist die Umsetzung der verschiedenen Konzepte

in einem Prototyp, welcher genutzt werden kann um in einer Studie die

verschiedenen Konzepte zeitgleich zu evaluieren.

Eine Schwierigkeit dieser Arbeit ist es, die Erkennung einer Kurve in Echtzeit zu

realisieren und nicht in einem Datensatz Kurven zu erkennen.

Die fertige Arbeit soll eine solide Grundlage für weitere Arbeit in diesem

Themengebiet und mögliche Erweiterungen der Erkennung bieten.

1.3 Aufbau der Arbeit

Das zweite Kapitel dieser Arbeit befasst sich mit den Grundlagen die für das Thema

dieser Arbeit erforderlich sind. Zunächst wird auf das genutzte Core Motion

Framework eingegangen und anschließend werden die verfügbaren Sensoren

erläutert, sowie eine Definition einer Kurve aufgestellt.

Im dritten Kapitel werden die verschiedenen Konzepte zur Erkennung hergeleitet

und erläutert. Ebenso werden hier verschiedene Einschränkungen und Probleme

beschrieben.

Das vierte Kapitel umfasst die Umsetzung und Implementation der Konzepte.

Im fünften Kapitel der Arbeit wird ein Testszenario für eine Evaluation beschrieben

und die Ergebnisse der Testpersonen werden aufgezeigt und ausgewertet.

3

Das sechste Kapitel zieht ein abschließendes Fazit, gefolgt von einem Ausblick was

für Änderungen und Erweiterungen möglich und sinnvoll wären.

4

2 Grundlagen

Dieses Kapitel befasst sich mit den Grundlagen der für die Kurvenerkennung

erforderlichen Technik. In Kapitel 2.1 wird das Core Motion Framework des iOS

SDK genauer betrachtet.

In Kapitel 2.2 werden die verfügbaren Sensoren eines iPhone beschrieben. Die

verwendete Definition einer Kurve wird in Kapitel 2.3 beschrieben.

2.1 Core Motion Framework

Das Core Motion Framework bietet eine Unterstützung beim Zugriff auf die Daten

der im iPhone verbauten Sensoren. Es besteht die Möglichkeit entweder auf die

Rohdaten zuzugreifen oder auf transformierte Daten, relativ zur aktuellen

Orientierung des Geräts. Ebenso ist die Möglichkeit gegeben an gewisse Daten auf

mehreren Wegen zu gelangen. Die Roll, Pitch und Yaw Daten, die auf die Rotation

des Geräts schließen lassen, können zum Beispiel direkt über das Framework

ausgelesen werden. Diese werden mit Hilfe der Euler-Winkel errechnet. Da dies in

gewissen Situationen Probleme verursachen kann [vgl. 3.4] bietet das Framework

die Alternative der Quaternionen aus denen sich die Werte berechnen lassen.

Auch gibt es die Möglichkeit Daten zu erhalten, die mit Hilfe mehrerer Sensoren

errechnet wurden, um Ungenauigkeiten der einzelnen Sensoren zu korrigieren. Dies

geschieht durch verschiedene Algorithmen die im Framework durch Apple

implementiert wurden.

Für die verschiedenen Sensoren kann man unterschiedliche Frequenzen einstellen

in denen neue Werte geliefert werden sollen. Zusätzlich beinhaltet das Framework

einen Schrittzähler und eine Bewegungserkennnung, die ermittelt ob der Benutzer

gerade geht, läuft oder Auto fährt [6].

Das Core Motion Framework kann ab iOS Version 4.0 aufwärts genutzt werden.

Funktionen für den Magnetometer Sensor wurden in Version 5.0 eingeführt.

5

2.2 Sensoren des iPhone

Die Sensoren bilden die Grundlagen für die Kurvenerkennung. Sie liefern Daten, die

Aufschluss über die aktuelle Orientierung und Veränderungen der Orientierung des

Geräts geben. Sie bieten die Möglichkeit Rückschlüsse auf Aktivitäten und

Verhalten des Benutzers zu ziehen.

Die verschiedenen Sensoren sind nicht in allen Geräten verfügbar. Die

nachfolgende Grafik zeigt eine Übersicht der Verfügbarkeit.

Abbildung 2.1: Verfügbarkeit der Sensoren [7]

Für diese Arbeit sind der Beschleunigungssensor, das Magnetometer, das

Gyroskop und GPS interessant. Diese sind alle spätestens ab dem iPhone 4

verfügbar.

Mehrere Sensoren errechnen ihre Daten in Relation zu einem internen

Koordinatensystem. Dieses basiert auf den drei Achsen X, Y und Z.

6

Abbildung 2.2: Aufbau der Achsen in einem iPhone [8]

In Abbildung 2.2 sind die angesprochenen drei Achsen zu sehen. Sensoren wie zum

Beispiel der Beschleunigungssensor liefern einen Wert für jede der drei Achsen.

Weiterhin gibt es zum Beispiel auch die Möglichkeit die Rotation des Geräts um eine

bestimmte Achse mit dem Gyroskop zu errechnen [Abb. 2.2].

Auf die Funktionsweise der Sensoren im Einzelnen wird in den nächsten

Abschnitten eingegangen.

2.2.1 Beschleunigungssensor

Der Beschleunigungssensor misst die lineare Beschleunigung des Geräts. Dies

geschieht indirekt über ein kleines Objekt auf das die Gravitationskraft wirkt. Über

die Intensität lässt sich schließen, wie stark diese Beschleunigung ist. Wendet man

dieses Verfahren auf drei relativ zum Gerät positionierte Achsen an, kann man die

lineare Beschleunigung des ganzen Geräts messen [9].

Der Beschleunigungssensor ist in jedem iPhone verfügbar [Abb. 2.1].

7

2.2.2 Gyroskop

Das Gyroskop bestimmt die aktuelle Ausrichtung des Geräts an allen drei Achsen

[vgl. Abb. 2.2].

Zur Bestimmung der Orientierung wird die Erdanziehung genutzt. Ein Wert

beschreibt die Rotation um jeweils eine der Achsen und wird in Bogenmaß pro

Sekunde angegeben. Die gelieferten Sensordaten stehen im Verhältnis zum

vorherigen Wert und sind keine absoluten Werte [10].

Das Gyroskop ist verfügbar ab dem iPhone 4 [Abb. 2.1].

2.2.3 Magnetometer

Ein Magnetometer misst die Stärke des Magnetfeldes um das Gerät herum. Es

berechnet die Ausrichtung zum magnetischen Nordpol und funktioniert damit ähnlich

wie ein analoger Kompass.

Zu unterscheiden ist der magnetische Nordpol vom geografischen Nordpol. Der

magnetische Nordpol bewegt sich und befindet sich zurzeit nördlich von Kanada.

Der geografische Nordpol liegt auf der Erdachse. Nutzt man den

CLLocationManager, errechnet dieser mit Hilfe des Magnetometers das “True

Heading”, welches die Ausrichtung zum geografischen Nordpol darstellt [11].

Ein Magnetometer ist verfügbar ab dem iPhone 3GS [Abb. 2.1].

2.2.4 GPS

Der GPS Sensor bestimmt die aktuelle Position des Geräts. Hierzu werden

verschiedene Daten wie die geografische Länge, Breite und Höhe ebenso wie die

Geschwindigkeit und die Genauigkeit ermittelt. GPS ist verfügbar ab dem iPhone 3

[Abb. 2.1].

8

2.3 Definition einer Kurve

Eine Kurve wird in dieser Arbeit dadurch definiert, dass eine Person ihren normalen

Gang unterbricht und ihre Ausrichtung ändert. Da dies nicht innerhalb von sehr

kurzer Zeit geschehen kann, muss die Veränderung über einen Zeitraum betrachtet

werden. Zusätzlich muss ein Grenzwert festgelegt werden, ab dem die Veränderung

der Ausrichtung ausreichend ist um als Kurve erkannt zu werden. Analog zu der

Ausarbeitung wird dieser Grenzwert auf 45° festgelegt, da er genug Spielraum lässt

um einen unregelmäßigen Gang zuzulassen und dennoch genau genug ist um ein

nicht abruptes Abbiegen zu erfassen [12].

9

3 Konzepte

3.1 Magnetometer

Mit dem Magnetometer des iPhones lässt sich ein Kompass nachbauen. Dieser

nutzt, wie in Kapitel 2.2.3 beschrieben, das Magnetfeld um das Gerät, um damit die

aktuelle Ausrichtung des Geräts zum magnetischen Norden zu errechnen.

Diese Eigenschaft kann man nutzen um die aktuelle Ausrichtung des Geräts in der

Hosentasche zu ermitteln und durch Veränderungen feststellen wann um eine Kurve

gegangen wurde.

Wie in der Definition einer Kurve in Kapitel 2.3 festgelegt wurde, soll ab einer

Veränderung um 45° eine Kurve erkannt werden.

Durch den Location Manager werden, wie in Kapitel 2.2.3 beschrieben, regelmäßig

die Werte des “True Heading”, also der aktuellen Ausrichtung zum geografischen

Nordpol, geliefert. Dieser Wert wird zu Beginn der Erkennung gespeichert und als

aktuelle Gangrichtung definiert. In regelmäßigen Abständen soll nun geprüft werden

ob sich die aktuelle Ausrichtung im Vergleich zu der anfänglich gespeicherten

Ausrichtung um mehr als 45° verändert hat. Sollte dies der Fall sein, wurde eine

Kurve erkannt und die Gangrichtung muss neu definiert werden. Hierfür wird der

Wert gespeichert der bei der Überprüfung genutzt wurde.

Abbildung 3.1: Übersicht der Bereiche für eine Ausrichtung oder eine erkannte

Kurve

10

Da ein Gang selten komplett geradeaus geht, aber dabei nicht unbedingt immer

eine Kurve beinhalten muss, wird, wie in der oben stehenden Grafik zu sehen ist,

ein zusätzlicher Bereich eingeführt der ab 30° Veränderung beginnt und bis 45°

geht. Hier wird die Ausrichtung neu definiert, aber keine Kurve erkannt.

Der Bereich ist groß genug um mögliche Korrekturen der Gangrichtung vornehmen

zu können, wie zum Beispiel der Gang an einer lang gezogenen Strecke die über

mehrere Meter ihre Richtung ändert.

Veränderungen im Bereich bis 30° werden nicht betrachtet, da in diesem Ereignisse

wie zum Beispiel das Überholen eines anderen Fußgängers liegen.

3.2 Attitude-Roll Analyse

Dieser Ansatz basiert auf einer kontinuierlichen Betrachtung der Roll Werte, die vom

Core Motion Framework geliefert werden [vgl. 2.1]. Der Roll Wert beschreibt die

Rotation des Geräts um die Y-Achse. Je nach Drehrichtung verändern sich die

Werte ins Positive oder Negative. Dies ist in der folgenden Grafik zu sehen.

Abbildung 3.2: Übersicht der möglichen Rotationen an den verschiedenen Achsen

[13]

Dieses Verhalten ermöglicht es Daten zu erhalten, die eine Bewegung der Hüfte

repräsentieren und damit sehr geeignet für eine Kurvenerkennung sind.

11

Da die Daten relativ zu den vorherigen und nicht absolut sind, ist es nicht möglich,

wie beim Konzept das auf dem Magnetometer basiert, zu prüfen, ob die Werte einen

Grenzwert überschreiten [vgl. 3.1].

Dieses Konzept soll Unterschiede in den Daten feststellen, die eine Veränderung

zwischen “Geradeaus”-Gang und “Kurve”-Gang charakterisieren.

In der folgenden Grafik sieht man zunächst den Gang geradeaus.

Abbildung 3.3: Verhalten des Roll-Wertes über die Zeit bei einem normalen Gang

Zu sehen ist ein wellenförmiges, stetiges Muster das Ausschläge von ca. -150 bis

+150 Grad beim Roll-Wert hat. Dieses Muster wiederholt sich immer wieder, so

lange man einen gleichmäßigen Gang hat. In der folgenden Grafik wird bereits der

Unterschied zum „Kurven-Gang“ deutlich.

12

Abbildung 3.4: Unterschied im Verhalten des Roll-Wertes über die Zeit zwischen

normalen Gang und Gang um eine Kurve

Zu sehen ist hier ein Teil von ca. Sekunde 4 bis 7 in dem die Ausschläge nur ins

Positive gehen, aber noch ähnlich hoch wie in der vorherigen Grafik beim „Gang

geradeaus” sind. In diesem Abschnitt wurde tatsächlich gerade um eine Kurve

gegangen. Nach der Kurve ist wieder das bereits bekannte Muster des „Gang

geradeaus” zu sehen.

Hier gibt es zwei Möglichkeiten. Neben der eben dargestellten Variante gibt es

zusätzlich noch die Möglichkeit, dass die Werte während einer Kurve nur in den

negativen Bereich ausschlagen. Angenommen das iPhone befindet sich in der

linken Hosentasche, dann werden bei einer Kurve nach links nur kleine Schritte mit

dem linken Bein gemacht. Bei einer Kurve nach rechts muss man hingegen große

Schritte machen um die Drehung zu vollziehen und daher auch eine größere

13

Bewegung mit der Hüfte machen. Mit dem Gerät in der rechten Hosentasche würde

sich das Verhalten umkehren.

Der Ansatz ist nun, diese Veränderungen zu erkennen. Gelingt das, kann ein Gang

um die Kurve erkannt werden.

Da pro Sekunde ca. 100 neue Werte dazu kommen und diese einzeln keine hohe

Aussagekraft besitzen, wird hier ein Zeitfenster festgelegt in dem die Daten

analysiert und verglichen werden. Dieses wird auf 100 Werte festgelegt und

entspricht einer kompletten Schwingung vom Ausgangswert, in den positiven

Bereich, in den negativen Bereich und zurück zum Ausgangswert. Es muss also ein

Mechanismus entwickelt werden, welcher aus den Werten immer zwei Zeitfenster

an Daten bereitstellt. Eins mit den aktuellsten 100 Werten und eins mit den älteren

100 Werten. Diese beiden Zeitfenster müssen nun unterschieden werden. Da die

Ausschläge größer oder kleiner werden, ändert sich auch der Durchschnittswert in

diesem Bereich. Eine zusätzliche Möglichkeit die gewünschte Veränderung

festzustellen bietet die Distanz zwischen den kleinsten und dem größten Wert eines

Zeitfensters. Idealerweise gehören die beiden Werte zu einer Schwingung,

allerdings stellt es auch kein Problem dar sollte dies nicht der Fall sein. Wenn die

Größe der Schwingung sich verändert, wirkt sich das auch auf die Distanz aus.

Daher kann ein solcher Wert auch zum Vergleich heran gezogen werden.

Einige Datenanalysen haben ergeben, dass 95 Prozent Unterschied bei der Distanz

zwischen neuem und altem Zeitfenster und 80 Prozent Unterschied beim

Durchschnittswert eine gute Ausgangslage für eine Kurvenerkennung bieten.

Auf Probleme mit diesen Werten wird im Kapitel 3.4.2 eingegangen.

3.3 Referenzwinkel

Dieses Konzept funktioniert ähnlich wie das Konzept des Magnetometers [vgl. 3.1]

von einer Referenzausrichtung aus. Das Core Motion Framework bietet eine Klasse

“CMAttitude” welche die Ausrichtung des Geräts auf verschiedene Arten

repräsentiert [14]. Neben der Repräsentation als Drehmatrix gibt es auch die

Möglichkeit der Eulerwinkel (Roll, Yaw, Pitch) und der Quaternionen. Der Vorteil

durch die Nutzung der Quaternionen gegenüber der Nutzung der Eulerwinkel wird in

Kapitel 3.4 behandelt.

14

Beim Start der Erkennung wird das aktuelle CMAttitude-Objekt gespeichert und als

aktuelle Gangrichtung festgelegt um eine Referenzausrichtung für die

Kurvenerkennung zu haben.

Da in regelmäßigen Abständen neue CMAttitude-Objekte durch den Motion

Manager bereitgestellt werden, soll durch Methoden der CMAttitude-Klasse die

Differenz zwischen der Referenzausrichtung und der neu erhaltenen Ausrichtung

errechnet werden. Da es sich hierbei um die komplette Orientierung des Geräts

handelt, müssen aus den neuen Werten noch die für die Erkennung relevanten

Werte errechnet werden. Hierfür wird wie im “Attitude Roll Analyse”-Konzept der

Roll Wert herangezogen, da er die Hüftbewegung abbildet, wenn sich das Gerät in

der Hosentasche befindet [vgl. 3.2].

Abbildung 3.5: Übersicht der Bereiche für eine Ausrichtung oder eine erkannte

Kurve

Wie in der Grafik zu sehen ist, werden Veränderungen bis 30° nicht beachtet um

kleinere Korrekturen der Gangrichtung zu ignorieren. Der Bereich zwischen 30° und

45° Veränderung wird genutzt um die aktuelle Gangrichtung festzulegen. Dafür wird

das aktuelle CMAttitude-Objekt wie beim Start der Erkennung als

Referenzausrichtung gespeichert. Hiermit werden Korrekturen der Gangrichtung

abgefangen wie zum Beispiel bei einer Strecke die einen Drall nach rechts hat, aber

eigentlich keine Kurve beinhaltet.

15

Beträgt die Veränderung mehr als 45°, wird die Ausrichtung ebenfalls als neue

Referenz gesetzt und zusätzlich eine Kurve erkannt [vgl. 2.3].

3.4 Bekannte Probleme der Konzepte

Die verschiedenen Konzepte haben mehrere bekannte Probleme oder

Einschränkungen in ihrer Funktionalität die in diesem Kapitel der Arbeit behandelt

werden.

Ein allgemeines Problem der Konzepte besteht darin, dass sich das Gerät während

der Erkennung immer in der gleichen aufrechten Lage in der Tasche befinden muss.

Sollte das Gerät auf die Seite rutschen, oder von Beginn an auf der Seite liegen,

kann es zu fehlerhaften Erkennungen führen. Sollte das Gerät schief liegen, werden

zwar dieselben Bewegungen registriert, allerdings auf einer anderen Achse oder auf

mehrere Achsen verteilt. Das würde die in den Konzepten verwendeten Werte

verfälschen und zu ausbleibenden oder falschen Erkennungen führen.

Im folgenden Abschnitt wird auf mehrere spezifische Probleme eingegangen.

3.4.1 Probleme des Magnetometer-Konzepts

Ein allgemeines Problem bei der Verwendung des Magnetometers ist, dass es von

anderen elektronischen Geräten gestört werden kann. Dies nimmt dann direkten

Einfluss auf die Daten. Ebenso kann es vorkommen, dass man sich in Bereichen

ohne magnetischen Einfluss befindet. In diesen Bereichen würde der Magnetometer

nicht funktionieren und fehlerhafte Daten liefern.

Die hohe Anfälligkeit des Magnetometers wird auch damit belegt, dass es

Unterschiede in den Daten gibt, die durch Veränderungen der Höhe verursacht

werden. Die Werte, die man zum Beispiel im 5. Stock erhält, unterscheiden sich von

Werten die man auf Meeresspiegel-Höhe erhält [15].

16

3.4.2 Probleme des Attitude-Roll Analyse-Konzepts

Das Konzept der Attitude-Roll Analyse [vgl. 3.2] unterscheidet sich stark von den

anderen Konzepten. Es nutzt zwar die gleichen Daten wie die anderen Konzepte,

aber in einem anderen Format. Durch die Verwendung des Bogenmaßes kann nicht

einfach definiert werden, dass ab 45° eine Kurve erkannt werden soll. Daher werden

andere Grenzwerte verwendet, welche allerdings schwer zu finden und von vorne

herein festzulegen sind. Dies liegt daran, dass Personen, auf Grund von

unterschiedlichen Beinlängen, unterschiedliche Gangarten aufweisen.

3.4.3 Kardanische Blockade

Die kardanische Blockade, auch bekannt als “Gimbal Lock” (engl.), bezeichnet ein

Problem das bei der Verwendung der Eulerwinkel auftreten kann. Hierbei kann es

passieren, dass zwei der drei Achsen aufeinander liegen und daher den gleichen

Effekt haben.

Abbildung 3.6: Beispielhafter Ablauf für eine kardanische Blockade [16]

In der Abbildung ist zu sehen, dass durch die Drehung an der Y Achse im zweiten

Schritt der Effekt entsteht, dass die Drehung in Schritt eins und in Schritt drei die

gleiche Wirkung haben obwohl die Drehung einmal auf der X- und einmal auf der Z-

Achse durchgeführt wird. Dieses Verhalten hat zur Folge, dass jede Rotation um

90° unweigerlich zum Verlust eines Freiheitgrades führt und zwei zuvor

unterschiedliche Rotationen den gleichen Effekt haben [17, 18].

Dieses Problem kann bei beiden Konzepten die mit dem Roll-Wert arbeiten,

auftreten, und muss bei der Umsetzung beachtet werden. Eine Möglichkeit dieses

Problem zu umgehen, bietet die Nutzung von Quaternionen. Diese verwenden einen

vierdimensionalen Vektor um die aktuelle Orientierung zu repräsentieren und

17

Probleme wie die kardanische Blockade zu umgehen [18]. Quaternionen werden

durch das Core Motion Framework zur Verfügung gestellt und können daher als

Alternative zu den Eulerwinkeln genutzt werden.

18

4 Umsetzung

Dieses Kapitel der Arbeit behandelt die Implementation der verschiedenen

Konzepte für einen Prototypen, der für den Test verwendet werden soll [vgl. 5.1].

4.1 Allgemeiner Aufbau des Prototyps

Der allgemeine Aufbau des Prototyps ist in der folgenden Grafik dargestellt.

Abbildung 4.1: Aufbau des Prototypen

19

Die Basis bilden zwei Manager-Klassen, die Rohdaten von den Sensoren über den

CLLocationManager [11] und den CMMotionManager [6] erhalten. Diese Daten

werden an die verschiedenen Erkennungen weitergereicht. Dort werden sie

entsprechend aufbereitet und analysiert.

Erkannte Kurven werden als Event an den ViewController weitergegeben und dort

mit einem Zeitstempel und der aktuellen GPS-Position verknüpft. Diese Information

wird dann mit CoreData in der Anwendung gespeichert. Zusätzlich bietet die

Anwendung die Möglichkeit, diese Daten danach als CSV-Datei zu exportieren. Der

ViewController ist das Herzstück der Anwendung. In dieser Klasse werden alle

Funktionen übernommen, die nicht direkt mit der Erkennung zu tun haben. Ebenso

werden hier auch die beiden oben genannten Manager-Klassen für die Erkennung

initialisiert.

Außerdem wurde eine Klasse “MotionEvent” eingeführt.

Abbildung 4.2: Aufbau der MotionEvent-Klasse

Diese wird genutzt um eine erkannte Kurve zu repräsentieren. Wie in der Abbildung

zu sehen ist, gibt es einen Zeitstempel der aussagt, wann das Event erkannt wurde

und einen NSString der von der Erkennung gesetzt wird um identifizieren zu

können, welche Erkennung das Objekt erstellt hat.

Mit der Methode “sendEvent” kann das Event über einen Delegate verschickt

werden. Ein Delegate stellt eine Beziehung zwischen zwei Klassen her und

ermöglicht den Austausch von Nachrichten [19]. Angenommen Klasse A setzt

Klasse B als Delegate, dann kann Klasse A sicherstellen, dass Klasse B eine

Methode zum Empfang einer Nachricht implementiert hat und darüber Nachrichten

an die Klasse B verschicken.

Im nächsten Abschnitt wird auf die grundlegenden Konfigurationen und

Initialisierungen der Ansätze eingegangen.

20

4.2 Grundkonfiguration Location Manager

Als erstes wird ein neues Objekt des CLLocationManager erstellt und seine “init”-

Methode aufgerufen. Dem Location Manager wird der Wert “self” als Delegate

zugewiesen, was bewirkt, dass die Klasse sowohl den Location Manager als auch

die Methode für den Empfang der Daten stellt [vgl 4.1]. Registriert der Location

Manager einen neuen Wert, wird dieser über den Delegate an die Klasse geleitet.

Damit der Location Manager funktioniert, ist es zwingend notwendig, dass die

Methode “requestWhenInUseAuthorization” des Location Manager einmal

aufgerufen wird. Diese ist dafür verantwortlich, dass die Anwendung mittels eines

Popups die Erlaubnis des Benutzers einholt, auf die Position zuzugreifen zu dürfen.

Um eine möglichst genaue Bestimmung der Position zu erhalten wird dem Location

Manager als “distanceFilter” und als “desiredAccuracy” der Wert

“kCLLocationAccuracyBest” gesetzt. Diese Konstante bewirkt möglichst genaue

Positionen. Hier könnte man auch etwas ungenauere Modi wählen um

beispielsweise Akkulaufzeit zu sparen.

Um nicht zu viele Aktualisierungen der Ausrichtung zu erhalten wird der

“headingFilter” auf den Wert 1 gesetzt um erst Veränderung ab 1° zu betrachten.

4.3 Grundkonfiguration Motion Manager

Der Motion Manager muss, ähnlich wie der Location Manager im vorherigen

Abschnitt, konfiguriert werden. Diese Konfiguration wird einmalig aufgerufen, sobald

der User auf den “Start”-Knopf des Prototypen drückt.

Als erstes wird die Methode “setupForStartUpdating” aufgerufen. Diese Methode

setzt diverse Variablen für die Erkennungen auf ihre Ausgangswerte.

An dieser Stelle wird zusätzlich geprüft ob das aktuelle Gerät über die benötigten

Sensoren verfügt. Nur wenn dies der Fall ist, wird fortgefahren mit dem Setzen des

Update Intervalls. Das Update Intervall legt fest wie oft der Motion Manager

Aktualisierungen der Daten liefern soll. Dieses wird auf 1/100 gesetzt, was

gleichbedeutend mit einem Intervall von 100Hz ist. Der Motion Manager soll pro

Sekunde 100 neue Daten liefern. Dies ist ein üblicher Wert für diese Art von

Anwendungen [20].

21

Als nächstes werden die Aktualisierungen gestartet. Hier wird der Parameter

“CMAttitudeReferenceFrameXArbitraryZVertival” als Reference Frame übergeben.

Ein Reference Frame wird als Basis Koordinatensystem für den Motion Manager

genutzt. Es dient als Ausgangsposition, von derer aus alle anderen Daten ausgehen

[17]. Der hier genutzte Wert bedeutet, dass die Z-Achse vertikal und die X-Achse in

eine beliebige Richtung horizontal zeigen soll [21]. Die möglichen Alternativen zu

diesem Reference Frame unterscheiden sich nicht deutlich von dem gewählten, da

diese nur für den Magnetometer Auswirkungen haben. Dieser wird aber in dieser

Arbeit nicht über den Motion Manager angesteuert. Da die Alternativen außerdem

eine höhere CPU-Last zur Folge hätten, wurde das oben genannte Reference Frame

gewählt [21].

Da die Erkennung nur zu gewissen Zeitpunkten ausgeführt werden soll, wird jede

Aktualisierung gezählt und nur wenn eine gewisse Anzahl überschritten wurde

sollen die Erkennungen aufgerufen werden. Andernfalls würden die Erkennungen

nicht richtig funktionieren, da, wie in Kapitel 2.3 definiert wurde, eine Kurve einen

gewissen Zeitraum benötigt. Zusätzlich würde eine ständige Überprüfung eine sehr

hohe CPU Auslastung verursachen. Der Grenzwert wurde hierfür auf 100 festgelegt,

da im Durchschnitt ein Schritt eine Sekunde dauert, was wie zuvor festgelegt ca.

100 Daten bedeutet [22]. Damit wird jede Sekunde beziehungsweise bei in etwa

jedem Schritt auf eine Kurve geprüft.

Den Methoden für die Erkennungen wird ein “CMAttitude”-Objekt [14] übergeben,

was verdeutlicht, dass hier nicht die Rohdaten der Sensoren verwendet werden

sondern über das Core Motion Framework auf die Daten zugegriffen wird. Die

Vorteile dieses Vorgehens wurden in Kapitel 2.1 erläutert.

22

4.4 Umsetzung Magnetometer Konzept

Dieser Abschnitt beschäftigt sich mit der Umsetzung des Magnetometer Konzepts.

Die Aktualisierungen des Location Manager werden über die Methode

“locationManager:didUpdateHeading:” bereitgestellt. Diese wird vom Location

Manager über den Delegate aufgerufen [vgl. 4.1].

Der Parameter “newHeading” enthält die aktuelle Ausrichtung des Magnetometers

und wird an die Methode “detectDirectionChangeWithMagnetometer” übergeben.

Diese errechnet zunächst die Differenz zwischen der letzten gespeicherten

Ausrichtung und der aktuellen Ausrichtung (“newHeading”). Beträgt diese

Veränderung mehr als 30° wird die aktuelle Ausrichtung aktualisiert und in der

Variable “lastHeading” gespeichert. Beträgt die Veränderung zusätzlich mehr als

45°, wurde hier eine Kurve erkannt und ein Motion Event erstellt [vgl. 4.1].

Das Event wird dann durch die “sendMotionEvent” Methode an den ViewController

weiter gegeben.

Bei dieser Umsetzung gibt es noch die Besonderheit, dass auf das Core Location

Framework zugegriffen wird und nicht auf das Core Motion Framework. Bei der

Umsetzung des Konzepts stellte sich heraus, dass die Daten des Magnetometer,

welche das Core Motion Framework durch die Klasse “CMCalibratedMagneticField”

[23] bereitstellt, ungenauer und weniger zuverlässig sind als dieselben Daten die

durch den Location Manager erhalten werden konnten. Der Zugriff auf die

CLHeading-Werte lässt sich allerdings problemlos austauschen mit dem Zugriff auf

die Magnetometer-Daten über das DeviceMotion-Objekt, welches durch das Core

Motion Framework bei jeder Aktualisierung bereitgestellt wird.

4.5 Umsetzung Attitude-Roll Analyse Konzept

Der folgende Abschnitt erläutert die Umsetzung des “Attitude-Roll Analyse”-

Konzepts.

Damit wie in Kapitel 3.2 erläutert immer zwei Listen an Werten zur Verfügung

stehen, werden diese in der Methode “manageFramesForDetection” gehandhabt.

Der Methode wird ein Objekt vom Typ “CMAttitude” übergeben, aus welchem die

aktuelle Ausrichtung errechnet werden kann. Hierfür werden Quaternionen genutzt

23

um in Kapitel 3.4.3 angesprochene Probleme zu vermeiden. Für die Berechnung

des benötigten Roll-Wertes wird folgende Formel angewandt [vgl 3.2] [24]:

𝑎𝑡𝑎𝑛2(2 ∗ (𝑞𝑢𝑎𝑡. 𝑦 ∗ 𝑞𝑢𝑎𝑡. 𝑤 − 𝑞𝑢𝑎𝑡. 𝑥 ∗ 𝑞𝑢𝑎𝑡. 𝑧), 1 − 2 ∗ 𝑞𝑢𝑎𝑡. 𝑦 ∗ 𝑞𝑢𝑎𝑡. 𝑦 − 2 ∗ 𝑞. 𝑧 + 𝑞𝑢𝑎𝑡. 𝑧)

Um den nun erhaltenen Wert im Bogenmaß in Gradmaß umrechnen zu können,

wird dieser mit 180/ 𝑝𝑖 multipliziert [25].

Die Listen haben eine festgelegte Größe, welche in der Variable

“frameSizeForDirectionChangeDetection” festgelegt wird. Dieser Wert wurde, wie in

Kapitel 4.3 erläutert, auf 100 gesetzt. Um in einer Liste die letzten 100 Daten und in

der anderen Liste die vorletzten 100 Daten zu haben, müssen die neuen Werte

korrekt einsortiert werden.

Dafür gibt es drei Möglichkeiten, wobei die Erste darin besteht, dass die Liste mit

den älteren Daten noch nicht 100 Werte hat und der neue Wert daher in diese Liste

geschrieben wird.

Die zweite Option ist, dass in der Liste mit den älteren Daten bereits genug Daten

vorhanden sind, aber in der neueren Liste noch nicht genug Daten vorliegen. In

diesem Fall wird der neue Wert in die aktuelle Liste kopiert.

Im dritten Fall sind in beiden Listen bereits genug Werte vorhanden. Daher wird

zunächst der neue Wert in die aktuelle Liste kopiert. Zusätzlich wird der älteste Wert

der aktuellen Liste in die ältere Liste verschoben. Abschließend wird der älteste

Wert in der älteren Liste gelöscht.

Die folgende Abbildung verdeutlicht dieses Vorgehen noch einmal.

Abbildung 4.3: Listenhandhabung bei der Erstellung der Zeitfenster

Wenn die Listen erstellt sind, kann die Erkennung auf diese zugreifen und hat immer

die zwei benötigten Zeitfenster an Daten zu Verfügung.

24

Der erste Teil der Erkennung errechnet die Durchschnittswerte der Daten in den

jeweiligen Zeitfenstern. Hier werden jeweils alle Werte der Liste addiert und durch

die Anzahl der Werte geteilt. Im gleichen Abschnitt wird ebenfalls der jeweils

kleinste und größte Wert für spätere Überprüfungen gespeichert.

Der zweite Teil der Erkennung nutzt die eben errechneten Werte für die Berechnung

der Distanz zwischen dem Minimum und den Maximum, sowie den Unterschied der

Durchschnittswerte.

Zunächst wird berechnet um wie viel Prozent sich die Distanz zwischen dem

Minimum und den Maximum verändert hat. Des Weiteren wird die Veränderung der

Durchschnittswerte berechnet.

Im letzten Teil der Erkennung wird die Überprüfung auf eine Kurve mit den

errechneten Veränderungen vorgenommen.

Wenn die Bedingungen [vgl. 3.2] erfüllt werden, wird ein Motion Event erstellt und

damit die Erkennung einer Kurve signalisiert.

4.6 Umsetzung Referenzwinkel Konzept

Dieses Kapitel behandelt die Umsetzung des Konzepts “Referenzwinkel” [vgl. 3.3].

Der Funktion für diese Erkennung wird ein CMAttitude-Objekt übergeben. Als erstes

wird geprüft, ob für die Erkennung bereits ein Referenzwinkel gespeichert wurde. Ist

dies nicht der Fall, wird die Ausrichtung des übergebenen Objekts als

Referenzwinkel gespeichert.

Gibt es bereits eine gespeicherte Ausrichtung, wird der Unterschied zwischen der

aktuellen Ausrichtung und der als Referenz gespeicherten Ausrichtung errechnet.

Dies geschieht mit Hilfe der Methode “multiplyByInverseOfAttitude” der Klasse

“CMAttitude” [26]. Diese funktioniert so, dass Sie die Inverse des übergebenen

Objekts, in diesem Fall der Referenzausrichtung, errechnet und mit der aktuellen

Ausrichtung multipliziert. Durch dieses Vorgehen wird der Unterschied zwischen den

beiden Ausrichtungen errechnet und durch die verwendete Methode in der Variable

für die aktuelle Ausrichtung gespeichert. Der vorherige Stand wird überschrieben.

Die aktuelle Ausrichtung wird direkt vor jedem Aufruf der Erkennungsmethode

gespeichert.

25

Da Probleme wie die Kardanische Blockade [vgl. 3.4.3] umgangen werden sollen,

werden ab dieser Stelle Quaternionen genutzt. Durch das Core Motion Framework

[vgl. 2.1] kann man auf diese Daten problemlos über das CMAttitude Objekt

zugreifen. Genutzt werden nun die Daten des eben errechneten Unterschieds der in

der Variable “curAttitudeForDirectionChangeDetection” gespeichert ist. Um den

benötigten Roll-Wert zu errechnen, wird folgende Formel [24] verwendet:

𝑎𝑡𝑎𝑛2(2 ∗ (𝑞𝑢𝑎𝑡. 𝑦 ∗ 𝑞𝑢𝑎𝑡. 𝑤 − 𝑞𝑢𝑎𝑡. 𝑥 ∗ 𝑞𝑢𝑎𝑡. 𝑧), 1 − 2 ∗ 𝑞𝑢𝑎𝑡. 𝑦 ∗ 𝑞𝑢𝑎𝑡. 𝑦 − 2 ∗ 𝑞. 𝑧 + 𝑞𝑢𝑎𝑡. 𝑧)

Um den nun erhaltenen Wert im Bogenmaß in Gradmaß um zurechnen, wird dieser

mit 180/ 𝑝𝑖 multipliziert [25]. Durch diese Umrechnung kann nun der Roll-Wert in

Grad dem Konzept in Kapitel 3.3 entsprechend überprüft werden.

Zunächst wird geprüft, ob sich der Wert zwischen 30 und 45 Grad befindet. In

diesem Fall wird die der Methode übergebene Ausrichtung als neue

Referenzausrichtung gespeichert [vgl. 3.3]. Danach wird zusätzlich geprüft ob der

Wert auch über 45 Grad liegt. In diesem Fall wird ein Motion Event-Objekt erstellt,

da eine Kurve erkannt wurde. Dies enthält den aktuellen Zeitstempel und den

Namen der Erkennung. In diesem Fall wird auch noch zwischen Links- (>45°) und

Rechtskurve (<-45°) unterschieden.

26

5 Evaluation

In diesem Kapitel der Arbeit wird ein Test des Prototyps geplant, durchgeführt und

ausgewertet.

5.1 Testaufbau

Zur Überprüfung der Konzepte wurde ein Testszenario für den in Kapitel 4

entwickelten Prototypen erstellt. Für den Test wurden vier Testpersonen gesucht,

die bestimmte Kriterien erfüllen, auf die in Kapitel 5.1.2 eingegangen wird. Die

Testpersonen gehen eine vorgegebene Strecke, welche im Kapitel 5.1.1 gezeigt

wird.

Für alle Testpersonen sollen die gleichen Bedingungen gelten. Das zur Verfügung

gestellte iPhone 4S soll in der linken Hosentasche getragen werden. Das iPhone 4S

hat alle benötigten Sensoren [vgl. 2.2] und daher läuft der Prototyp mit allen drei

Erkennungen der Konzepte parallel. Alle vier Testläufe wurden durchgeführt,

während auf dem Gerät die zu dem Zeitpunkt aktuellste iOS Version 8.2 installiert

war.

Während des Tests wird via GPS durchgehend die Position bestimmt. Wird von

einem der drei Konzepte eine Kurve erkannt, verknüpft der Prototyp die aktuelle

Position mit der Erkennung. So lässt sich in der Auswertung einfacher

nachvollziehen, wo genau eine Kurve erkannt wurde und wo es auf der Strecke

fehlerhafte Erkennungen gab. Sämtliche Daten wie die Erkennungen, die Positionen

und Zeitstempel die gesammelt werden, speichert der Prototyp in einer Datenbank.

Diese Daten lassen sich nachträglich als CSV-Datei exportieren.

27

5.1.1 Teststrecke

Die geplante Strecke für den Test ist auf der folgenden Karte zu sehen. Die Strecke

beginnt mit einem geraden Stück, welches dafür gedacht ist die Testpersonen in

einen gleichmäßigen Gang beschleunigen zu lassen. Ebenso bietet es Zeit um

eventuelle Korrekturen an der Positionierung des Geräts in der Tasche

vorzunehmen. Danach bietet die Strecke eine Mischung aus sechs Links- und sechs

Rechtskurven, welche unterschiedlich schnell aufeinander folgen können.

Eine zusätzliche Schwierigkeit soll der Abschnitt zwischen Kurve zwei und drei

darstellen. In diesem Bereich gibt es keine Möglichkeit geradeaus zu gehen und

erfordert daher einige Korrekturen der Richtung ohne dass dabei eine Kurve erkannt

werden soll.

Abbildung 5.1: Die Teststrecke mit Start, Ziel und den Kurven

28

5.1.2 Testpersonen

Bei der Auswahl der Testpersonen wurde Wert darauf gelegt, dass drei von vier

Personen unterschiedliche Beinlängen haben, da die Beinlänge die Gangart

beeinflussen und daher zu unterschiedlichen Ergebnissen führen kann.

Um eine Kontrolle der Ergebnisse und deren Aussagekraft zu haben, sollten

allerdings auch zwei Personen relativ gleich gebaut sein und so einen guten

Vergleich bieten können.

Testperson Beinlänge

Person 1 Lang

Person 2 Kurz

Person 3 Lang

Person 4 Mittel

Tabelle 5.1: Beinlänge der Testpersonen

Den Testpersonen war vor dem Test bekannt, dass es sich um das Thema

Kurvenerkennung dreht. Ihnen wurde nahegelegt, während des Tests ganz natürlich

zu gehen. Zusätzlich wurden sie dabei auch in ein Gespräch verwickelt, damit sie

sich möglichst wenig auf ihren Gang konzentrieren, sondern auf das Gespräch. Dies

sollte für einen normalen, authentischen Gang sorgen.

5.2 Testergebnisse

Nach jedem durchgeführten Test wurden die in der Datenbank gespeicherten

Dateien für die Auswertung exportiert. Die gespeicherten Erkennungen wurden mit

den enthaltenen GPS-Positionen auf einer Karte eingezeichnet und konnten dann

den in Kapitel 5.1.1 festgelegten Kurven zugeordnet werden. So konnten Statistiken

zu jeder Erkennung und jeder Person erstellt werden.

29

Magnetometer Attitude-Roll Analyse Referenzwinkel

43,75% 37,5% 81,25%

Tabelle 5.2: Gesamtergebnisse der Konzepte

In Tabelle 5.2 sind die Gesamtergebnisse zu sehen. Hier wird die Erkennungsrate

der drei Konzepte von allen vier Testpersonen zusammengefasst dargestellt. Zu

sehen ist, dass die Erkennung mittels Magnetometer 43,75% der Kurven erkannt

hat. Das sind ca. 5-6 von 12 Kurven pro Person. Das zweite Konzept, welches die

Roll Daten analysiert, kommt nur auf 37,5% was, ca. 4-5 Kurven entspricht. Am

besten funktionierte die Erkennung mit Hilfe eines Referenzwinkels. Dieses Konzept

erkannte 81,25% der Kurven und damit 9-10 Kurven pro Person.

Die folgende Tabelle zeigt die Erkennungsrate aufgeschlüsselt nach Methode und

Person.

Person 1 Person 2 Person 3 Person 4

Magnetometer 50% 50% 41,6% 33,3%

Attitude-Roll

Analyse

58,3% 16,6% 41,6% 33,3%

Referenzwinkel 75% 91,6% 83,3% 75%

Tabelle 5.3: Ergebnisse pro Person und Konzept

In Tabelle 5.3 ist besonders die zweite Testperson hervorzuheben. Bei dieser

Person wurden mittels der Roll-Daten Analyse nur zwei Kurven erkannt. Allerdings

klappte die Erkennung mit einem Referenzwinkel sehr gut. Hier wurden 11 von 12

Kurven erkannt.

30

Abbildung 5.2: Karte mit Ergebnissen der Erkennungen je Kurve

Abbildung 5.2 stellt erneut die Karte mit der Teststrecke aus Kapitel 5.1.1 dar.

Neben jeder Kurve ist zu sehen zu wie viel Prozent welche Erkennung funktioniert

hat. Das Ergebnis bezieht sich hierbei auf alle Testpersonen. Auffällig ist die

schlechte Erkennung der ersten Kurve durch die Referenzwinkel Erkennung.

Ebenso fällt die Erkennung mittels Magnetometer nach Kurve sieben fast komplett

aus.

Jedes der drei Konzepte hatte im Verlauf des Tests insgesamt zwei fehlerhafte

Erkennungen.

31

5.3 Auswertung

Die Testergebnisse zeigen, dass die Erkennung mittels Referenzwinkel mit 81,25%

sehr gut geklappt hat. Lässt man die Erkennung der ersten Kurve außen vor,

erreicht diese Methode sogar 95%. Die erste Kurve unterschied sich nicht von den

anderen. Eine mögliche Erklärung wäre hier, dass die Testpersonen sich noch in

einem ungewohnten Umfeld befanden, allerdings erkannten hier die anderen beiden

Konzepte die Kurve deutlich besser.

Das Konzept der Kurvenerkennung mittels Magnetometer erkannte mit 43,75%

lediglich etwas weniger als die Hälfte der Kurven und die Roll Werte Analyse sogar

nur etwas mehr als ein Drittel der Kurven mit 37,5%. Besonders der letzte Wert

weicht hier stark von den Erwartungen ab. Dass die zweite Testperson, welche die

kürzesten Beine hat [vgl. Tabelle 5.1], hier auf lediglich 16,6% erkannte Kurven

kommt, lässt vermuten, dass diese Erkennung stark abhängig von der Gangart des

Benutzers ist. Die vierte Testperson mit mittlerer Beinlänge kommt auch auf nur

33,4%. Dieses Ergebnis lässt vermuten, dass bei den Personen mit kürzeren

Beinen die Ausschläge in den Daten [vgl. 3.2] nicht stark genug waren um von der

Erkennung erfasst zu werden. Ebenso ist es denkbar, dass die Grenzwerte der

Erkennung nicht ideal sind.

Wie in Kapitel 3.4.1 bereits dargestellt wurde, ist das Magnetometer relativ anfällig

für Fehler. Dennoch erkannte dieses Konzept 43,75% der Kurven. Hier gab es keine

großen Unterschiede zwischen den Testpersonen festzustellen.

Bei der zweiten Testperson gab es eine fehlerhafte Erkennung, die von allen drei

Konzepten gemacht wurde. Diese lag zwischen Kurve zwei und Kurve drei. Dieser

Abschnitt war als Schwierigkeit vorgesehen [vgl. 5.1.1]. Hier ist es gut möglich, dass

die Erkennungen nicht falsch funktioniert haben sondern wirklich eine Kurve erkannt

haben, weil die Testperson dementsprechend gegangen ist.

32

6 Fazit und Ausblick

In diesem Kapitel wird diese Arbeit noch einmal abschließend zusammengefasst

und ein Fazit gezogen. Zusätzlich wird ein Ausblick gegeben, wie man die

verschiedenen Konzepte erweitern und Erkenntnisse aus dem Test in die

Erkennung einfließen lassen kann.

6.1 Fazit

Diese Arbeit beschäftigte sich mit verschiedenen Konzepten zur Erkennung einer

Kurve in Echtzeit mit Hilfe des Core Motion Framework des iOS SDK. Hierfür wurde

die Funktionsweise verschiedener Sensoren betrachtet und wie man diese für das

Ziel der Arbeit nutzen kann.

Es wurden drei verschiedene Konzepte erarbeitet und in einem Prototyp umgesetzt.

Diese Konzepte hatten verschiedene Ansätze und verwendeten auch verschiedene

Sensordaten. Ebenso wurden verschiedene Probleme herausgestellt, Eigenarten

der Konzepte erarbeitet und Lösungen in den Prototyp eingearbeitet.

Der Prototyp wurde verwendet um in einem Test die Funktionalität der Erkennung

zu evaluieren. Diese Evaluation ergab, dass das Konzept mit den besten Resultaten

das Core Motion Framework nutzt um die aktuelle Ausrichtung des Geräts zu

analysieren und eventuelle Veränderungen zu erkennen.

6.2 Ausblick

Für die verschiedenen Konzepte gibt es mehrere Möglichkeiten zur Erweiterung.

Eine Möglichkeit, die für alle drei Konzepte denkbar wäre, ist, die Erkennung

unabhängig von der Lage in der Tasche zu machen. Sollte eine Anwendung eine

Kurvenerkennung einsetzen, sollte der Benutzer nicht darauf achten müssen wie

das Gerät in seiner Tasche liegt.

Wie in der Arbeit bereits festgestellt wurde, gibt es verschiedene Gangtypen die sich

auf die Erkennung auswirken. Hier wäre denkbar das Konzept zu erweitern, welches

die Roll Daten analysiert. Hier gäbe es die Möglichkeit ein Lernsystem für die

33

Anwendung zu entwickeln, welches beispielsweise die ersten Gänge eines

Benutzers analysiert und anhand dieser Daten Grenzwerte berechnet und das

Intervall für eine Überprüfung festlegt. Eine weitere Möglichkeit zu vermeiden, dass

Daten in die Zeitfenster falsch eingeteilt werden und damit eine Kurvenerkennung

verhindern, ist der Ansatz auf eine bestimmt Anzahl an Daten eine Fourier

Transformation durchzuführen. So würde sich ermitteln lassen, wann ein Schritt

gemacht wird und anhand dieser Information könnte man seine Zeitfenster erstellen.

Denkbar wäre ebenfalls die Verknüpfung der Kurvenerkennung mit weiteren

Bereichen der Ganganalyse. Hier bietet sich die Schritterkennung an. Diese könnte

ein Taktgeber für die Überprüfung und die Erstellung der Zeitfenster und damit eine

weitere Optimierung des Zeitpunktes der Überprüfung sein.

34

Literaturverzeichnis

[1] https://fit.google.com/

[2] https://www.moves-app.com/

[3] https://www.apple.com/ios/whats-new/health/

[4] http://www.informatik.hs-bremen.de/gob/flow/

[5] Wikipedia (2015): “Eine Tätigkeit im Flow erleben”; Online

http://de.wikipedia.org/wiki/Flow_(Psychologie)#Eine_T.C3.A4tigkeit_im_Flow_erleb

en [Stand 24.4.2015]

[6] IOS Developer Library: “Core Motion Framework Reference”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CoreM

otion_Reference/index.html#//apple_ref/doc/uid/TP40009686 [Stand 24.4.2015]

[7] Alasdair Allan (2011): “Basic Sensors in iOS” S. 2

[8] Alasdair Allan (2011): “Basic Sensors in iOS” S. 39

[9] IOS Developer Library: “Accessing Accelerometer Data”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMAc

celerometerData_Class/index.html#//apple_ref/swift/struct/CMAcceleration [Stand

24.4.2015]

[10] IOS Developer Library: “Getting the Rotation Rate”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMGy

roData_Class/index.html#//apple_ref/c/tdef/CMRotationRate [Stand 24.4.2015]

[11] IOS Developer Library: “CLLocationManager Class Reference”; Online

https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLL

ocationManager_Class/index.html [Stand 24.4.2015]

35

[12] Mahmoud El-Gohary; Sean Pearson; James McNames; Martina Mancini; Fay

Horak; Sabato Mellone; Lorenzo Chiari (2013): “Continuous Monitoring of Turning in

Patients with Movement Disability” S. 4 – 5

[13] Andreas Eichner: “Sensors & Core Motion”; Online

http://wwwbruegge.in.tum.de/lehrstuhl_1/home/98-teaching/tutorials/505-sgd-ws13-

tutorial-core-motion [Stand 24.4.2015]

[14] IOS Developer Library: “CMAttitude Class Reference”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMAtti

tude_Class/index.html [Stand 24.4.2015]

[15] Nirupam Roy; He Wang; Romit Roy Choudhury (2014): “I am a Smartphone

and I can Tell my User’s Walking Direction” K. 4.3

[16] Alex Diener (2010): “Quaternions”; Online

http://www.idevgames.com/articles/quaternions [Stand 24.4.2015]

[17] Denivip Media (2013): “The art of core motion in iOS”; Online

http://blog.denivip.ru/index.php/2013/07/the-art-of-core-motion-in-ios/?lang=en

[Stand 24.4.2015]

[18] Logah Perumal (2011): “Quaternion and Its Application in Rotation Using Sets

of Regions”

[19] Matt Neuburg (2013): “iOS 7 Programming Fundamentals” S. 306

[20] University of Southern California (2013): “Accelerometer Gyroscope”; Online

http://bcf.usc.edu/~trinagre/itp342-20143/lectures/ITP342_Accelerometer.pdf

[Stand 24.4.2015]

36

[21] IOS Developer Library: “CMAttitude Reference Frame”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMAtti

tude_Class/index.html#//apple_ref/c/tdef/CMAttitudeReferenceFrame [Stand

24.4.2015]

[22] Wiebren Zijlstra; At L. Hof (2002): “Assessment of spatio-temporal gait

parameters from trunk accelerations during human walking” S. 6

[23] IOS Developer Library: “Getting the Calibrated Magnetic Field”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMDe

viceMotion_Class/#//apple_ref/occ/instp/CMDeviceMotion/magneticField [Stand

24.4.2015]

[24] Wikipedia (2015): “Conversion between quaternions and Euler angles”; Online

http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles

[Stand 24.4.2015]

[25] Wikipedia (2015): “Radiant (Einheit)”; Online

http://de.wikipedia.org/wiki/Radiant_(Einheit) [Stand 24.4.2015]

[26] IOS Developer Library: “Obtaining the Change in Attitude”; Online

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMAtti

tude_Class/index.html#//apple_ref/occ/instm/CMAttitude/multiplyByInverseOfAttitud

e: [Stand 24.4.2015]

37

Abbildungsverzeichnis

2.1: Verfügbarkeit der Sensoren [7] 5

2.2: Aufbau der Achsen in einem iPhone [8] 6

3.1: Übersicht der Bereiche für eine Ausrichtung oder eine erkannte Kurve 9

3.2: Übersicht der möglichen Rotationen an den verschiedenen Achsen [13] 10

3.3: Verhalten des Roll-Wertes über die Zeit bei einem normalen Gang 11

3.4: Unterschied im Verhalten des Roll-Wertes über die Zeit zwischen

normalen und Gang um eine Kurve 12

3.5: Übersicht der Bereiche für eine Ausrichtung oder eine erkannte Kurve 14

3.6: Beispielhafter Ablauf für eine kardanische Blockade [16] 16

4.1: Aufbau des Prototypen 18

4.2: Aufbau der MotionEvent-Klasse 19

4.3: Listenhandhabung bei der Erstellung der Zeitfenster 23

5.1: Die Teststrecke mit Start, Ziel und den Kurven 27

5.2: Karte mit Ergebnissen der Erkennungen je Kurve 30

38

Tabellenverzeichnis

5.1: Beinlänge der Testpersonen 28

5.2: Gesamtergebnisse der Konzepte 29

5.3: Ergebnisse pro Person und Konzept 29