2014-11-25 2 views
0

У меня есть приложение для сохранения акселерометра и гироскопа и некоторых других данных датчиков. Но данные акселерометра с оси Z неправильны, поэтому большие ... иногда даже данные X и Y не близки к 0, поскольку они должны быть, но близки к 2-3 ... Ось Z дает мне данные около 10 ... Is есть ли какая-либо ошибка в коде или? Любая идея?Данные акселерометра, ось Z дает неправильные данные?

выборка данных:

0|19:57:55:584|-0.08912659|-0.015655518|9.652756 
1|19:57:55:653|-0.021209717|0.008834839|9.677216 
2|19:57:55:704|-0.035308838|0.032958984|9.677216 
3|19:57:55:753|-0.035308838|0.048065186|9.658646 
4|19:57:55:855|-0.015686035|0.012008667|9.666275 
5|19:57:55:906|-0.027709961|-0.006378174|9.6380005 
6|19:57:55:955|-0.0539093|-0.04698181|9.582184 
7|19:57:56:057|-0.05491638|-0.0053100586|9.64032 
8|19:57:56:109|-0.0789032|0.020812988|9.684845 
9|19:57:56:164|-0.16851807|-0.02734375|9.640045 
10|19:57:56:258|-0.10827637|-0.035888672|9.696838 
11|19:57:56:308|-0.09414673|-0.038009644|9.72084 
12|19:57:56:358|-0.0569458|-0.030395508|9.680252 
13|19:57:56:459|-0.06288147|-0.0049591064|9.663452 
14|19:57:56:509|-0.047302246|-0.015167236|9.665237 
15|19:57:56:563|-0.11026001|0.006500244|9.676056 

Код:

@Override 
public void onSensorChanged(SensorEvent event) { 

    float x = event.values[0]; 
    float y = event.values[1]; 
    float z = event.values[2]; 
    SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss:SSS"); 
    String s = time.format(new java.util.Date()); 
    try { 
     writer.write(i+"|"+s+"|"+x+"|"+y+"|"+z+"\n"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    i++; 
} 

ответ

0

На Android, результаты акселерометра от onSensorChanged в единицах м/сек^2, где постоянные тяготения G обычно известен, до 9,81 м/сек^2. Обратите внимание, что это отличается от iOS, где API-интерфейс ускорителя возвращает данные в единицах G. Итак, чтобы преобразовать ваши данные в единицы G, разделите ваши данные на 9,81 м/сек^2.

Обратите внимание, что если ваше устройство укладывается на ровную поверхность и не перемещается, тогда ось z будет всегда имеет силу, действующую на нее, а именно гравитацию. Это будет -9.81 или 9.81 в зависимости от того, находится ли ваше устройство вверх или вниз.

+0

Должен ли я делить всю ось или только Z? Thx – Mirko

+0

Разделите все оси, если хотите согласованные значения. Либо оставайтесь в единицах м/сек^2, либо в единицах G. Почему вы хотите, чтобы одна ось находилась в одной единице, а другие оси - в другом блоке? Кстати, выберите мой ответ, если вам это нравится. – stackoverflowuser2010

+0

спасибо Могу ли я сделать что-то вроде этого? float x1 = event.values ​​[0]; float y1 = event.values ​​[1]; float z1 = event.values ​​[2]; float x = (float) (x1/9.81); float y = (float) (y1/9.81); float z = (float) (z1/9.81); – Mirko

Смежные вопросы