Кватернион, вычисляемый IMU (устройство с 6 степенями свободы), является в основном отношением устройства (3D-ориентация) по отношению к локальной системе координат Земли; поэтому его можно использовать для поворота измерения ускорения от локальной системы отсчета тела (значения, непосредственно измеренные IMU) к локальной системе отсчета Земли (система координат с плоскостью xy, касательной к земле). Вы можете использовать кватернионное умножение, чтобы сделать это
v '= q. против q *
, где q - кватернион, а v - вектор ускорения (пожалуйста, посмотрите умножение на кватернионный вектор для получения дополнительной информации *). Поскольку мы знаем, что гравитация является вектором u = ( 0,0, г ) в локальной системе координат Земли (где g ≈ 9,81 м / с ^ 2, предполагая, что IMU измерения также в м / с ^ 2), мы можем затем вычесть этот вектор из v '
v' '= v' - u
v '' - вектор с гравитационной компенсацией / удалением. Тем не менее, он не находится в локальной системе отсчета тела ИДУ (помните, что мы повернули его в локальной системе отсчета Земли) Таким образом, чтобы преобразовать его обратно, вы можете умножить его на обратный кватернион
v '' '= q-1. против q-1 *
v '' ' будет исходным измерением ускорения за вычетом силы тяжести. Чтобы убедиться в правильности результата, вы можете проводить измерения, пока устройство находится в неподвижном состоянии. Независимо от того, как устройство вращается, измерения ускорения должны быть близки к ( 0,0,0 ).
Если IMU не обеспечивал измерение кватернионов, он может были вычислены путем слияния показаний акселерометра и гироскопа (что в любом случае делает ИДУ). Если вы заинтересованы в этом, я предлагаю поискать алгоритмы Madgwick, Mahony или Extended Kalman Filter для оценки отношения.
* Полезные ресурсы
Умножение кватернионов: https://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/arithmetic/index.htm
Вращение вектора с кватернионом (особенно третий ответ, если вы хотите увидеть какой-то код): https://math.stackexchange.com/questions/40164/how-do-you-rotate-a-vector-by-a-unit-quaternion