Как можно преобразовать инклинометры (Pitch, Yaw and Roll) в гравитационное вытягивание, ожидаемое в системе в [X,Y,Z]
?
Система, покоящаяся в определенном уголке Pitch, Yaw и Roll, должна быть вытащена на Землю при некотором [X*g,Y*g,Z*g]
, скажем, это для целей симуляции. Я хочу, чтобы функция whoose вводила Pitch, Yaw и Roll, а выход - Vector3(X,Y,Z)
момента провала.
Значение объекта, находящегося в покое с ним назад, выдаст что-то вроде [0,-1,0]
из акселерометров и [pitch,yaw,roll]->[0,-1,0]
, где [0,-1,0]
минус [0,-1,0]
, что приведет к [0,0,0]
. или если мы потянем его на скорости 1g, у нас есть акселерометр, показывающий [1,-1,0]
, создавая новое значение [1,0,0]
.
С системой на задней панели [pitch, yaw, roll] → [0, -1,0] функция - это то, что я после
Vector3 OriToXYZ(float pitch, float yaw, float roll){
Vector3 XYZ = Vector.Zero;
//Simulate what the XYZ should be on a object in this orientation
//oriented against gravity
...
return XYZ;
}
Да, я знаю, как объяснение ниже показывает, что я не могу определить, перевернуты ли системы или нет на основе рулона, поскольку roll только дает (от -90 до 90), но это другая проблема).
Вот как выкладывается ориентация.
За дополнительной информацией о том, почему и как использовать эту информацию, читайте.
План состоит в том, чтобы использовать счетчик в качестве альтернативы гирометру для снятия гравитационной составляющей с данными акселерометра путем имитации/вычисления ожидаемого значения силы тяжести при ориентации (Pitch, Yaw, Roll).
Поскольку акселерометр (XYZ) представляет собой комбинацию силы тяжести двух компонентов (XYZ) и движения (XYZ), я предполагаю, что gravity(XYZ)-calc_g(XYZ) = 0,
позволяет мне выполнять accelerometer(XYZ)- calc_g(XYZ) =movement(XYZ)
чтобы показать, почему я думаю, что это возможно. когда я рисую значения с телефона и двигаю телефон в сторону в несколько маятниковом движении, линии, которые выглядят как синусоидальные движения, являются инклинометром, а другие - акселерометром XYZ:
- red = (Pitch and accell-X)
- green = (Yaw и accell-Y)
- blue = (Roll и accell-Z)
Значение ускорения умножается на 90, так как оно варьируется от (-2 до 2), так что оно на чертеже колеблется от -180 до 180, диапазонов поворота рыскания и рулона, как видно из приведенного выше инструктажа. Середина изображения Y = 0, слева - X = 0 (X = время)
решаемые Решение от Romasz
VectorX = Cos(Pitch)*Sin(Roll);
VectorY = -Sin(Pitch);
VectorZ = -Cos(Pitch)*Cos(Roll);
Результат
* Графики не от одного и того же измерения.