Forum: Mikrocontroller und Digitale Elektronik Gesten/Bewegungen mit Accelerometer erkennen


von Bernhard (Gast)


Lesenswert?

Hallo,

ich hab mir vor langer Zeit eine EZ430-Chronos gekauft, die nun schon 
seit einigen Monaten unbenutzt in einer Schublade liegt. Das soll sich 
nun aber ändern. Und zwar würde ich gerne mit dem eingebauten 3-Achsen 
Accelerometer  Bewegungen/Gesten erkennen.
Ich hab zwar schon ein bisschen im Internet recherchiert, bin aber doch 
noch etwas planlos wie ich das am besten angehen soll.
Die wichtigste Frage mal gleich zu Beginn: Kann man alleine durch das 
Auswerten eines 3-Achsen Accelerometers Bewegungen (zuverlässig) 
erkennen?
Mal angenommen die Erkennung und Auswertung ist möglich: Wie würdet ihr 
so eine Aufgabenstellung angehen?
Mein Ansatz wäre: Ich zeichne zu jeder Bewegung/Geste einige Datensätze 
auf, übertrage diese in ein Diagramm und schau mir die Abhängigkeiten 
und Gemeinsamkeiten zwischen den Datensätzen an. Und dann versuche ich 
dazu eine mathematische Funktion zu finden, die möglichst gut "passt".
Kann das funktionieren oder würdet ihr es anders machen?
Welches Programm würdet ihr zum Analysieren der Datensätze verwenden? 
Ich habs die letzten Tage mit Excel versucht, bin damit aber nicht so 
ganz zufrieden damit. Das Plotten der Daten funktioniert mit Excel ja 
ganz gut, aber wenn es darum geht Daten zu filtern und glätten, dann 
stößt man mit dem Programm meines Erachtens an seine Grenzen (oder ich 
kenn mich damit einfach zu wenig aus).
von Purzel H. (hacky)


Lesenswert?

Selbst was schreiben ? In der Programmiersprache deiner wahl.
von Bernhard (Gast)


Lesenswert?

Wie meinst du das? Das ich das dann mal in einem Sourcecode packen muss, 
ist mir klar. Aber mir gehts im Moment eher darum, wie ich die Daten am 
besten analyisiere und aufbereite.
von Bernhard (Gast)


Lesenswert?

Ich hab mich die letzten Tage wieder etwas mehr in dieses Thema 
eingelesen und bin nun zu dem Schluss gekommen, dass mein Ansatz wohl 
doch nicht so praktisch ist. Schließlich soll die Geste unabhängig von 
der Geschwindigkeit/Größe der Bewegung erkannt werden. Das heißt, es 
soll egal sein ob ich einen großen oder einen kleinen Kreis in die Luft 
male.
Ich hab mir gedacht, dass ich das anfangs mal auf dem PC (Matlab, C) 
realisiere, doch ehrlich gesagt bin ich im Moment ein wenig ratlos wie 
ich das am besten angehe.
Mir wäre schon enorm geholfen, wenn mir jemand sagen könnte welche 
Algorithmen üblicherweise für diese Art von Problemstellung verwendet 
werden. Dann hab ich mal ein paar Stichworte für weitere Recherchen.
von Reinhard Kern (Gast)


Lesenswert?

Hallo,

informiere dich mal über Mustererkennung. Gehört nicht unbedingt zu den 
einfachen Fachgebieten.

Ein Kreis ist ein Kreis ist ein Kreis - ob du ihn nun auf Papier malst 
oder in die Luft.

Gruss Reinhard
von Peter D. (pdiener) Benutzerseite


Lesenswert?

Mit einem Beschleunigungssensor alleine kann man keine Bewegungspfade im 
3D-Raum berechnen. Damit könnte man allenfalls bestimmte Eigenschaften 
von einem begrenzten Satz möglicher Bewegungen erkennen.

Es gibt vom Hersteller Invensense z.B. den MPU6000 (motion processing 
unit)
http://invensense.com/mems/gyro/mpu6000.html

Der hat einen integrierten Prozessor zur Bewegungsschätzung durch 
Datenfusion aus Beschleunigungen und Drehraten sowie optional einem 
3D-Kompass.

Unter Applications steht auf der Website unter anderem auch "Gesture 
Short Cuts".

Vielleicht ist das ja ein möglicher Anfangspunkt für eine Rechersche 
nach Bewegungsmustererkennung.
Ein weiteres Stichwort wäre: Inertial measurement unit.

Grüße,

Peter
von Purzel H. (hacky)


Lesenswert?

Zusaetzlich zum 3D Beschleunigungssensor benoetigt man auch noch einen 
Drehratensensor. Dann sollte es gehen. Zu den Algorithmen. Es geht darum 
Muster zu vergleichen. Das nennt sich dann Kreuzkorrelationen. Man 
korreliert dabei gemessene Daten mit bereits Vorhandenen, oder gelernten 
Daten. Und bekommt eine Uebereinstimmung in %. Der Datensatz mit der 
groessten Uebereinstimmung ist dann der Passende, sofern eine Schwelle 
ueberschritten wird.
von Bernhard (Gast)


Lesenswert?

Danke, die Algorithmen und Prinzipien die ihr mir genannt habt, helfen 
mir schon mal enorm weiter!

Ihr meint ja alle, dass man für eine Bewegungspfaderkennung im Raum mehr 
als einen 3D Beschleunigungssensor braucht. Nur wie macht die WiiMote 
das dann?
Die hat ja auch nur einen eingebauten 3D-Beschleunigungssensor?!
Sicher, die WiiMote nutzt auch Infrarot zur Positionserkennung, aber 
soweit ich informiert bin, wird bei Spielen wie WiiSports nur der 
3D-Beschleunigungsssensor verwendet.
von Reinhard Kern (Gast)


Lesenswert?

Bernhard schrieb:
> Sicher, die WiiMote nutzt auch Infrarot zur Positionserkennung, aber
> soweit ich informiert bin, wird bei Spielen wie WiiSports nur der
> 3D-Beschleunigungsssensor verwendet.

Hallo,

das kann man schon machen, aber dann darfst du das Gerät während der 
Gesten nicht verdrehen - damit würdest du ja das Koordinatensystem, das 
fest mit dem Sensor und damit mit dem Gerät verbunden ist, im Raum 
drehen, das ergäbe falsche Bewegungsdaten. Das schränkt die Bedienung 
aber deutlich ein.

Möglicherweise kann man die Ausrichtung herausrechenen, wenn man ein 
konstantes Schwerefeld von 1 g voraussetzt, das habe ich mir noch nicht 
näher überlegt. Im Prinzip zeigt der Sensor die Vektorsumme an aus 
Schwerefeld der Erde und Beschleunigung des Geräts. Man weiss die Grösse 
des Schwerefelds, aber nicht die Richtung. Mein mathematisches 
Bauchgefühl sagt, dass es da keine eindeutige Lösung gibt, aber 
vielleicht kann man aus den vorhergehenden Daten eine wahrscheinlichste 
Lösung bestimmen.

Gruss Reinhard
von Peter D. (pdiener) Benutzerseite


Lesenswert?

Die WiiMote hat einen optionalen Gyro (Motion+ attachment) zum 
anstecken.

"The angular_velocity_zeroed shows the Motion+ gyroscope reading. These 
values are valid only if the Motion+ attachment is plugged into the 
Wiimote."
http://www.ros.org/wiki/wiimote

Nur dann ist es eine IMU und kann Bewegungspfade berechnen.

Grüße,

Peter
von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wenn man nur einige Gesten erkennen will und keinen beliebigen 3D-Pfad, 
dann sehe ich keinen Grund wieso ein Drehratensensor unbedingt nötig 
sein sollte. Als Lösungsansatz würde ich eine Vorverarbeitung der 
Beschleunigungsdaten zur Normalisierung der Skalierung durch z.B. 
verschieden schnelle Bewegungen oder Startwinkel und dann eine 
Auswertung per HMM vorschlagen. Aber das ist sicherlich nichts was man 
mal an einem Wochenende macht.
von Peter D. (pdiener) Benutzerseite


Lesenswert?

Wenn man keinen Drehratensensor hat, kann man minimale Drehungen nicht 
nicht von Beschleunigungsvorgängen unterscheiden.

Angenommen ein 3-Achs Beschleunigungssensor ist so ausgerichtet:
X - Westen
Y - Norden
Z - Erdkern

Das Kippen des Sensors um die Y-Achse um einige Grad sogt dafür, dass 
der Gravitationsvektor starke Messwertveränderung (Sin(0 +- h)) in X 
hervorruft. Das kann man im Messwert Y nicht sehen und der Messwert Z 
ändert sich nur ganz minimal (Cos(0 +- h)).
Das kann man von einer linearen Beschleunigung in X-Richtung erst 
unterscheiden, wenn man die vorangegangene Drehung kennt.

Grüße,

Peter
von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wie gesagt, das müsste man eben irgendwie normalisieren. Genügend 
Redundanz in den Gesten sollte natürlich vorhanden sein.
von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.