В общем, акселерометр, обнаруженный на устройствах Android, слишком зашумлен, чтобы можно было интегрировать сигнал и получить скорость. Кроме того, вам также нужна почти идеальная оценка ориентации устройства и даже использование гироскопа (который имеет несколько устройств), как правило, слишком шумно.
Основная проблема заключается в вычитании силы тяжести из сигнала акселерометра, поскольку сила тяжести обычно является очень большой составляющей сигнала. С оценкой ориентации телефона, которая слегка выключена, гравитация вычитается в неправильном направлении. Это оставляет компоненты ускорения в неправильном направлении, и ваша скоростная оценка быстро становится бесполезной.
Нужно в основном способ сброса оценки скорости регулярно (один раз в секунду или около того), когда вы знаете, что устройство не движется. Один из способов сделать это при условии, что пользователь устройства идет, - это установить устройство на ногу и попытаться определить, когда нога находится на земле (скорость равна нулю во всех направлениях). Однако установка устройства у подножия пользователя обычно является слишком сложной для практического использования.
Есть и другие подходы, которые можно предпринять для отслеживания движения. Например, используя детекцию шагов и гироскоп, я смог проследить за ходячим человеком минуту или две, с точностью до нескольких метров.
Еще интереснее (и забавно) просто оставить устройство на столе на полминуты, вычесть гравитацию и интегрировать то, что осталось дважды, чтобы получить изменение позиции. Оценка будет заключаться в том, что устройство переместилось на несколько сотен метров. –
Hah OK, это намного хуже, чем я думал ... –
Я пытался это сделать. Я добавил фильтр низких частот к скорости, чтобы избежать получения ... в этом случае у меня нет значимого движения с неподвижным устройством. Но перемещая его, даже движение в несколько сантиметров дает результаты, которые кажутся случайными. Конечная скорость часто сильно отличается от 0. – ARLabs