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

Я получаю трехмерные значения модуля Grove Pi, acc_vector = (accX, accY, accZ) каждые 100 миллисекунд. Я хочу, используя java, отображать движение, которое я делаю с модулем... но моя проблема не в том, как его отобразить:p

Для этого мне нужно вычислить значение position_vector = (x, y, z), соответствующее значениям ускорения. Но я понятия не имею, как это сделать.

Вот что я пробовал, но это всегда дает странные результаты (начальная позиция, скорость и ускорение (0,0,0)):

  • position_vector = 0.5f*acc_vector*t;
  • position_vector += acc_vector;
  • position_vector = acc_vector*(t-t_just_before);

1 ответ

Решение

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

position[0] += velocity[0] * timeStep + 0.5 * acceleration[0] * timeStep * timeStep;
velocity[0] += acceleration[0] * timeStep;

Вы должны сделать то же самое для y а также z компоненты.

Чтобы получить более точные результаты, вам могут понадобиться более сложные методы. Вы можете посмотреть численные методы, такие как Рунге-Кутта.

Другие вопросы по тегам