Преобразование ускорения с телефона на ось автомобиля
Сценарий:
- Пользователь размещает свой телефон и прикрепляет его непосредственно к машине. Допустим, с помощью ленты. (он может лежать в любом положении пользователя)
- Пользователь нажимает
Calibrate
которая хранит текущую информацию об ускорении в некоторой переменной. Позвольте сказать:calibrationAcc = double[]{0,0,9.81}
будут значения, когда телефон сталкиваетсяup
, - Пользователь ускоряется в своей машине, поэтому я получаю
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
а как это сделать.