Hallo donathus.orth,
zu Deiner Anfrage fallen mir zwei Punkte ein.
- Es gibt möglicherweise ein kleineres Problem bei der Betrachtung der Bewegungen. Der Mauszeiger soll sich auf einer Ebene bewegen. Diese Bewegungsform nennt man eine Translationsbewegung, eine Verschiebungsbewegung also.
Jetzt ist die Kopfbewegung nach links oder rechts aber eine Rotationsbewegung. Natürlich gibt es auch hier eine Winkelbeschleunigung, die man in eine Translationsbeschleunigung des Mauszeigers übersetzen kann.
In einfachen Worten: Um den Mauszeiger so zu steuern wie er sich über den Bildschirm bewegt, müsste man eigentlich den Kopf gerade halten und dann den ganzen Körper nach links/rechts oder oben/unten verschieben.
Das tun wir aber nicht, sondern wir drehen eben den Kopf, d.h. es erfolgt eine Beschleunigung nicht nur entlang einer, sondern entlang von zwei Raumachsen. Wenn man z.B. den Kopf nach links dreht, dann erfolgt eine Beschleunigung in x- UND in -z -Richtung entsprechend den Koordinatenachsen im Bild.
Das ist möglicherweise unkritisch, da wir bei einer leichten bis mittleren Kopfdrehung nach rechts/links größere Beschleunigungswerte entlang der x- als entlang der z-Achse haben.
Möglicherweise kann diese vereinfachte Betrachtungsweise aber auch Ursache für „Übersetzungsfehler“ in die Mausbewegung sein.
Vor allem bei Positionen am Bildschirmrand müssten diese dann auftreten
- Die Formeln für die Beschleunigung stimmen, wenn man davon ausgeht, dass man eine GLEICHMÄßIGE Beschleunigung aus dem Stand ausführt.
Die Kopfbewegungen sind aber alles andere als gleichmäßig.
Lösen lässt sich das Problem, indem man die Bewegung in kleine Zeitschritte (Delta t) unterteilt, z.B. die Ausleseintervalle des Sensors. Für jeden Zeitschritt kann man nun den zurückgelegten Weg innerhalb dieses Zeitschritts nach der Formel unten bestimmen:
Während Delta t zurückgelegter Weg = 1/2*a*(Delta t)^2+v_0*Delta t
a = aktuelle Beschleunigung in diesem Zeitintervall (diese ändert sich von Intervall zu Intervall)
v_0 = Anfangsgeschwindigkeit, zu Beginn des Zeitschritts (macht ja einen Unterschied im zurückgelegten Weg, wenn man schon 120 km/h fährt und dann etwas beschleunigt, wie wenn man die gleiche Beschleunigung aus dem Stand macht)
v_0 bekommt man so: Beschleunigung im Zeitfenster vorher mal die Dauer des Zeitfensters plus die Geschwindigkeit, die man aus dem Zeitfenster da davor hatte.
v_0=a_vorher*Delta t_vorher+v_vorhervorher
Delta t ist normalerweise konstant, v_vorhervorher muss bekannt sein, d.h. es muss an einem ein Startpunkt klar sein, ab dem man davon ausgehen kann, dass v_ganzamaanfang = 0 war.
Dies lässt sich am einfachsten dadurch realisieren, indem man über mehrere Intervalle die aktuelle Beschleunigung ausliest. Ist diese Null, dann bewegt sich der Kopf auch nicht mehr, da die Kopfbewegungen meist kurze beschleunigte Bewegungen sind und ansonsten keine Bewegung auftritt.
Ich hoffe, ich konnte Dir mit der Antwort weiterhelfen. Melde Dich einfach, wenn Du noch Fragen haben solltest. Z.B. auch, wenn die Rotation in der Bewegungserfassung eine Rolle spielen soll.
Würde mich auch echt interessieren, wie´s weitergeht.
Schöne Grüße und gutes Gelingen,
Daniel
P.S.:
Ach so, ja, noch ein letzter Punkt. Das ganze Tracking funktioniert nur fehlerfrei, wenn der Getrackte an einem Ort sitzt. Viel schwieriger wird´s dann, wenn er sich in einem bewegenden Fahrzeug aufhält.