Учитывая ускорение от акселерометра, как смоделировать положение в пространстве модуля?
Я получаю трехмерные значения модуля 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
компоненты.
Чтобы получить более точные результаты, вам могут понадобиться более сложные методы. Вы можете посмотреть численные методы, такие как Рунге-Кутта.