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