Можно ли вычислить скорость, интегрируя данные акселерометра с течением времени?

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

Будет ли это работать?

Теоретически вы могли бы это сделать; На практике нет.

Вы должны были бы предположить, что знаете начальную скорость, но если предположить, что вы начинаете с 0 скорости, это не так плохое предположение.

Вы также должны знать фактическую ориентацию устройства в течение всего периода. В противном случае вы не можете отличить изменения в ускорении из-за фактического ускорения и просто поворота устройства.

(Помните, что вы должны вытащить ускорение из-за силы тяжести из показаний!)

Наконец, ошибки будут складываться в течение некоторого времени не только потому, что мера ускорения несовершенна, но и потому, что вы получаете только дискретные образцы с течением времени.

Кроме всех этих вещей, конечно, это работает! API сообщает вам, в каких единицах находятся показания (m / s ^ 2). Вы можете запросить датчик для очень быстрых обновлений. Я думаю, было бы интересно посмотреть, как (точнее) это написать приложение, которое делает это, а затем положить телефон в квартиру, а затем идти вперед и останавливаться с ним. Как близко к 0 это чтение?

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

Основная проблема заключается в вычитании силы тяжести из сигнала акселерометра, поскольку сила тяжести обычно является очень большой составляющей сигнала. С оценкой ориентации телефона, которая слегка отключена, гравитация вычитается в неправильном направлении. Это оставляет компоненты ускорения в неправильном направлении, и ваша скоростная оценка быстро становится бесполезной.

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

Существуют другие подходы, которые можно предпринять для отслеживания движения. Например, используя детекцию шагов и гироскоп, я смог отследить гуляющего человека минуту или две, с точностью до нескольких метров.

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