Преобразование координат устройства в мировые координаты - PullRequest
4 голосов
/ 09 ноября 2011

Я занимаюсь этим проектом, часть которого требует от меня получить значения ускорения телефона (андроида) по каждой оси.Так, например, независимо от того, как телефон расположен, значение ускорения по оси Z, если телефон неподвижен, должно быть 9,8, а по остальным осям оно должно быть 0. Теперь я прошел через множество потоков, чтобызаставить это работать должным образом.Я попытался сделать то, что предлагается здесь

        trueacceleration[0] =(float) (accelerometervalues[0]*(Math.cos(orientationvalues[2])*Math.cos(orientationvalues[0])+Math.sin(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.sin(orientationvalues[0])) + accelerometervalues[1]*(Math.cos(orientationvalues[1])*Math.sin(orientationvalues[0])) + accelerometervalues[2]*(-Math.sin(orientationvalues[2])*Math.cos(orientationvalues[0])+Math.cos(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.sin(orientationvalues[0])));
        trueacceleration[1] = (float) (accelerometervalues[0]*(-Math.cos(orientationvalues[2])*Math.sin(orientationvalues[0])+Math.sin(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.cos(orientationvalues[0])) + accelerometervalues[1]*(Math.cos(orientationvalues[1])*Math.cos(orientationvalues[0])) + accelerometervalues[2]*(Math.sin(orientationvalues[2])*Math.sin(orientationvalues[0])+ Math.cos(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.cos(orientationvalues[0])));
        trueacceleration[2] = (float) (accelerometervalues[0]*(Math.sin(orientationvalues[2])*Math.cos(orientationvalues[1])) + accelerometervalues[1]*(-Math.sin(orientationvalues[1])) + accelerometervalues[2]*(Math.cos(orientationvalues[2])*Math.cos(orientationvalues[1])));

Но это дает мне что-то совершенно другое и меняется, когда я перемещаю телефон.Любая идея, что должно быть правильным / простым способом сделать это?

1 Ответ

1 голос
/ 12 ноября 2011

На акселерометр влияет сила тяжести, даже устройство сидит на столе без каких-либо дополнительных усилий.

Взято из Android Developer :

Датчик этого типа измеряет ускорение, приложенное к устройству (Ad).Концептуально это достигается путем измерения сил, приложенных к самому датчику (Fs), используя соотношение:

Ad = - ∑Fs / mass

В частности, сила тяжести всегда влияет на измеряемое ускорение:

Ad = -g - ∑F / mass

По этой причине, когда устройство сидит на столе (и, очевидно, не ускоряется), акселерометр читает величину g = 9.81 m/s^2

Что касается преобразования координат устройства в мировые координаты, почему бы вместо этого не использовать getRotationMatrix () ?

...