2016-06-28 6 views
0

У меня есть плата, которая обеспечивает значения ускорения трехмерного акселерометра (X, Y, Z: Y - вектор вверх). Я хочу получить направление ускорения в плоскости XZ. Но плата может быть установлена ​​с наклоном. Могу ли я компенсировать наклон и как я это сделаю? Я ценю любой намек. Было бы хорошо, если бы кто-то мог указать мне в правильном направлении.Коррекция наклона трехосного акселерометра

+1

простой триггер: если вы устанавливаете наклон, вы получите ускорение в любых осях, которые НЕ ортогональны направлению ускорения. –

+0

Если вы выполняете «достаточно долго» среднее значение трех результатов акселерометров, вы должны иметь вектор, который составляет 9,8 м/с «вниз» (среднее ускорение должно быть 0 во всех направлениях, кроме, в основном, вниз). Вычитайте «вниз» из ваших «мгновенных» результатов (возможно, «достаточно короткое» среднее значение для фильтрации шума), а затем поверните остаток, чтобы он соответствовал единичному вектору «вниз». Это должно дать «истинное» ускорение. Я бы поставил это как ответ, но часть вращения немного выше моего случайного математического отзыва, но, надеюсь, это некоторые идеи, которые помогут вам двигаться. –

+0

@RussSchultz Звучит как проблемное решение. Я применил один подход к такой «адаптивной» системе, но думаю, что это окажется слишком сложным. И, естественно, вы не можете сделать «достаточно долгое скользящее среднее», это очень наивный цифровой фильтр, средние расчеты вообще не будут иметь смысла. Разумеется, в зависимости от случая использования, но нет причин, по которым вы должны делать скользящее среднее даже в том случае, когда акселерометр остается в основном «покоящимся». Для начала вы можете отфильтровать все образцы, которые не близки к 1G. – Lundin

ответ

1

Вам необходимо выполнить калибровку всех продуктов акселерометра, чтобы они знали, что обычно находится в направлении вниз. Основываясь на вашей калибровке, вы получаете истинные (x, y, z) координаты относительно гравитационной составляющей. Значения калибровки должны быть добавлены/вычтены из каждого считываемого акселерометра.

В качестве альтернативы (и менее профессионально) вы можете создать какую-то адаптивную систему, которая постоянно сохраняет координаты (x, y, z) всякий раз, когда происходит полное ускорение полей 1G +/-. Затем вы можете применить медианный фильтр к отсортированным образцам и, надеюсь, вы получите реальные координаты (x, y, z), соответствующие компоненту силы тяжести. Чтобы это было надежным, вам нужно будет реализовать какой-то ИИ, чтобы программа училась со временем и сохраняла вероятные координаты в NVM. В противном случае программа всегда терпит неудачу каждый раз, когда вы получаете прецедент, когда общее ускорение равно 1G в любом направлении.

+0

Этот ответ мне полезен. Это указывало на то, что я не понял первоначальную проблему, и поэтому мне нужно будет еще подумать. Спасибо, в любом случае. – peq