Преобразование ускорения с телефона на ось автомобиля

Сценарий:

  1. Пользователь размещает свой телефон и прикрепляет его непосредственно к машине. Допустим, с помощью ленты. (он может лежать в любом положении пользователя)
  2. Пользователь нажимает Calibrate которая хранит текущую информацию об ускорении в некоторой переменной. Позвольте сказать: calibrationAcc = double[]{0,0,9.81} будут значения, когда телефон сталкивается up,
  3. Пользователь ускоряется в своей машине, поэтому я получаю currectAccочевидно вместе с гравитационными силами.

Насколько я понимаю, чтобы получить грубое ускорение (без гравитации), единственное, что мне нужно сделать, это вычесть форму currentAcceleration значения из калибровки. Так было бы:

roughAcc = currentAcc - calibrationAcc

А теперь мой roughAcc содержит вектор со значениями, связанными только с чистым ускорением автомобиля. Но так как я не знаю положение, в котором телефон находится внутри автомобиля (скажем, его можно поместить как камеру), я не знаю, как преобразовать мой roughAcc в систему координат автомобиля. Я хочу иметь значения в форме:

carAcc {
    x // left or right car, increased in corners
    y // front or back car, increased when accelerating
    z // up or down, increased on bumps
}

Я что-то здесь упускаю. Самая простая проблема, которую я не смог решить с помощью имеющихся у меня данных (используя только вектор калибровки), - это ситуация, когда пользователь помещает телефон в машину (чтобы calibration = {0,0,9.8}, Даже в этой ситуации я не могу понять, какая часть ускорения carAcc.x и который carAcc.y, так как я не знаю положение телефона внутри автомобиля (если он x ось к передней части автомобиля, или yили если оно косо.

Итак, с точки зрения математических и векторных операций, что мне нужно повернуть roughAcc в carAcc а как это сделать.

0 ответов

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