Я пытаюсь рассчитать приблизительное положение телефона Android в комнате. Я пробовал разные методы, такие как местоположение (что ужасно в помещении) и гироскоп + компас. Мне нужно знать только примерное положение после ходьбы в течение 5-10 секунд, поэтому я думаю, что интегрирования линейного ускорения может быть достаточно. Я знаю, что ошибка ужасна из-за распространения ошибки, но, возможно, это сработает в моей настройке. Мне нужно только приблизительное положение, чтобы направить камеру на телефон Android.
Я закодировал двойную интеграцию, но я делаю что-то неправильно. ЕСЛИ телефон статичен на столе, позиция (x, y, z) всегда увеличивается. В чем проблема?
static final float NS2S = 1.0f / 1000000000.0f;
float[] last_values = null;
float[] velocity = null;
float[] position = null;
float[] acceleration = null;
long last_timestamp = 0;
SensorManager mSensorManager;
Sensor mAccelerometer;
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_LINEAR_ACCELERATION)
return;
if(last_values != null){
float dt = (event.timestamp - last_timestamp) * NS2S;
acceleration[0]=(float) event.values[0] - (float) 0.0188;
acceleration[1]=(float) event.values[1] - (float) 0.00217;
acceleration[2]=(float) event.values[2] + (float) 0.01857;
for(int index = 0; index < 3;++index){
velocity[index] += (acceleration[index] + last_values[index])/2 * dt;
position[index] += velocity[index] * dt;
}
}
else{
last_values = new float[3];
acceleration = new float[3];
velocity = new float[3];
position = new float[3];
velocity[0] = velocity[1] = velocity[2] = 0f;
position[0] = position[1] = position[2] = 0f;
}
System.arraycopy(acceleration, 0, last_values, 0, 3);
last_timestamp = event.timestamp;
}
Вот такие позиции я получаю, когда телефон лежит на столе (без движения). Значения (x, y, z) увеличиваются, но телефон остается неподвижным.
И это позиции после расчета скользящего среднего для каждой оси и вычитания из каждого измерения. Телефон тоже пока.
Как улучшить код или другой способ получить примерное положение внутри комнаты?