Как использовать данные об ускорении движущегося объекта для расчета расстояния?

Я прочитал пару подобных вопросов на этом форуме и несколько блогов в Интернете, хотя я все еще сбит с толку, я полон решимости рассчитать смещение объекта, используя данные акселерометра.

Итак, я попытался использовать www.freescale.com/files/sensors/doc/app_note/AN3397.pdf, что дает ошибку почти 20-50%.

Я также попробовал это уравнение на данных и получил несколько лучших результатов.

V1 = V0 + ((a1) * t)
X2 = abs((V1 * t) + (((a1)/2)*t*t))
X2 = X0 + X2
V0 = V1
X0 = X2

Здесь t — разница во времени между двумя выборками. X0 - конечное перемещение. V1,a1 текущие значения. V0 предыдущее значение.

Вот мои графики движения по показаниям датчиков Android.

1) Из графика оси Z линейного ускорения, как рассчитать расстояние? 2) Какие значения я должен брать, а какие нет? сколько образцов данных я должен использовать для расчета. Только для положительного ускорения или для всего положительного отрицательного цикла данных ускорения? 3) Что означает график линейного ускорения. Пожалуйста, объясните его значения на основе движения объекта.

Немного полезной информации на странице developer.android.com/guide/topics/sensors/sensors_motion.html .
Ваша ссылка на Dropbox не работает, замените ее.

Ответы (1)

Вы не можете рассчитать смещение таким образом. В примечаниях по применению четко сказано: «При реализации позиционирования по трем осям требуется дополнительная обработка, чтобы свести на нет эффект земного притяжения», и это преуменьшение месяца!

Обнуление гравитации — огромная проблема, если только ваш акселерометр не будет идеально перпендикулярен вектору гравитации Земли! Ускорения, которые вы хотите измерить, вероятно, порядка 1 м / с 2 или меньше, верно? Это перекрывается г "=" 9,81 м / с 2 г . Прежде чем вы сможете даже оценить смещение, вызывающее интересующее вас ускорение, вы должны определить углы ваших трех каналов акселерометра относительно г , затем вычтите г . К счастью, эта процедура даст вам направление к полу ... однако вы все еще не знаете, в какую сторону Икс и у топоры указывают! Ваш акселерометр может поворачиваться на 180 градусов во время ускорения... и реальное смещение может оказаться в направлении, противоположном тому, куда вы думали. Теперь идеальный датчик ускорения не будет даже чувствителен к этому вращению, для этого вам понадобится другой датчик, который может обнаруживать вращения! Такой гироскоп может быть встроен или не встроен в ваше устройство. Учитывая то, как реализовано большинство чипов акселерометров, гироскопы и акселерометры даже не будут производить синхронную выборку, а это означает, что вам необходимо иметь цифровой фильтр передискретизации, чтобы сопоставить показания обоих датчиков, чтобы получить надежный вектор положения/ориентации по шести осям. Я не думаю, что платформа Android дает вам достаточно информации, чтобы сделать это прямо сейчас. iOS может...

Сказав это, если вы хотите упростить вещи до уровня, на котором вы находитесь, прямо сейчас вы можете (теоретически) установить свой мобильный телефон на прямой рельс, осторожно поворачивая его, пока вектор движения не укажет точно в направлении одного из оси акселерометра, и эта ось перпендикулярна г а затем вы можете применить хороший алгоритм численного интегрирования к тому, что он измеряет по одной оси, например, один из интеграторов более высокого порядка, описанный http://mathworld.wolfram.com/NumericalIntegration.html .

Я полагаю, это был ваш первоначальный вопрос, верно? Приношу свои извинения за то, что испортил вам день описанием реальной проблемы, и обещаю не утомлять вас другими плюшками вроде калибровки смещений, дрейфа усиления, перекрестных помех (смещенных осей) и нелинейностей.

+1 за испорченный день ОП. Это описывает (некоторые) 99% пота, которые нужно добавить к 1% вдохновения, чтобы найти реальные решения. Я не думаю, что в этом должна заключаться интеграция более высокого порядка, пока не будут решены более простые вопросы ориентации, смещения и усиления. Обратите внимание, что данные датчика (см. ссылку) действительно включают информацию о гироскопе...
@Floris: Вы абсолютно правы. Точно так же, как и ОП, я попробовал наивный подход на своем телефоне ... и в течение 10 минут я был по колено в вопросе о том, как определить ориентацию моего акселерометра без полезных данных гироскопа. Между реальной инерциальной навигационной системой и датчиками смартфонов, конечно, есть огромная разница: в реальности гироскоп — это не просто электронный датчик, а вращающийся элемент, сохраняющий постоянное направление в пространстве. Акселерометры находятся внутри гироскопа, так что компенсация вращения не нужна даже в первом порядке!
@CuriousOne: Спасибо за ответ. Из вашего ответа есть много вещей, которые я не мог полностью понять. куда направлены оси x⃗ и y⃗? -> У меня есть акселерометр и гироскоп, которые показывают мне направление вниз. У меня есть магнитометр, то есть компас, который показывает мне север. (Оба с очень небольшой точностью, как вы упомянули.) Должен быть способ рассчитать оси X, Y и Z устройства по этим данным. Верно?
@Sunil: В своем ответе я выбирал ось z в направлении силы тяжести, а x и y - перпендикулярно этому. Гравитация не определяет направления оставшихся двух направлений, поэтому нам нужен, например, компас (который также является частью многих устройств, просто он не очень надежен). Да, можно вычислить эти направления... с очень небольшой точностью, как вы сказали. Будут ли результаты «достаточно хорошими», зависит от вашей цели. Использование камеры и подходящего шаблона, вероятно, даст гораздо лучшие результаты для измерения смещения (то есть, если вы можете навести его на тестовый шаблон).