Intereting Posts

Как удалить коэффициент силы тяжести с показаний акселерометра на 3-осевом акселерометре Android

Может ли кто-нибудь помочь в снятии g-фактора с показаний акселерометра. Я использую SensorEventListener с методом onSensorChanged () для получения данных Sensor.TYPE_ACCELEROMETER. Мне нужны только чистые значения ускорения во всех направлениях. Поэтому в любом состоянии, если устройство стабильно (или в постоянной скорости), оно должно давать (0,0,0,0,0,0) примерно. В настоящее время, в зависимости от его высоты и валка, он дает переменную мощность в зависимости от сил g, действующих на каждую ось.

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

Любая помощь, пожалуйста?

Solutions Collecting From Web of "Как удалить коэффициент силы тяжести с показаний акселерометра на 3-осевом акселерометре Android"

Взгляните на следующую ссылку.

http://developer.android.com/reference/android/hardware/SensorEvent.html

Вы можете использовать фильтр нижних частот.

Сделайте это для каждого из ваших значений датчика:

g = 0.9 * g + 0.1 * v 

Где v – текущее значение датчика, а g – глобальная переменная, первоначально установленная на ноль. Имейте в виду, что вам понадобится столько же переменных, сколько у вас есть оси.

С v = v - g вы можете исключить коэффициент силы тяжести из значения вашего датчика.

Используйте Sensor.TYPE_LINEAR_ACCELERATION вместо Sensor.TYPE_ACCELEROMETER

Дифференцируя по времени, функция времени избавляет вас от констант.

Таким образом, взяв производную от сигнала акселерометра, вы получите «Jerk», который затем можно повторно интегрировать, чтобы получить непостоянную часть ускорения, которое вы ищете.

В терминах Лаймана, возьмите образец с акселерометра каждые 1 секунду и вычтите его из предыдущего образца. Если ответ (очень близко к нулю), вы не ускоряетесь относительно земли. Если результат отличен от нуля, интегрируйте его (в этом случае умножьте на одну секунду), у вас есть ускорение.

Две вещи, хотя: -Посмотрите на шум в сигнале, закруглите ваш вход. -Не ожидайте сверхточных результатов от встроенных акселерометров. Вы можете использовать их для обнаружения тряски, изменения ориентации, но не для того, чтобы знать, сколько G вы испытываете, делая резкие повороты в своем автомобиле.

Одним из способов (для устройств только с акселерометром) является удаление гравитационного вектора из данных акселерометра путем вычитания значений, которые приходили бы в статическом случае для такой же ориентации. Но по мере того, как ориентация снова рассчитывается, принимая показания ускорения, а не независимо, ее не очень точно.

Гироскоп может помочь в этом случае. Но у немногих андроидов все еще есть настоящий гироскоп. И использование его сырых чтений не так просто.

Просто вычтите g (~ 9.8m / s ^ 2) раз в направлении z матрицы вращения. Или, чтобы быть более откровенным в этом, пусть

 a = your accelerometer reading, R = your rotation matrix (as a 9-long vector). 

Тогда то, что вы хотите, это

 (a[0]-g*R[6], a[1]-g*R[7], a[2]-g*R[8]).