2013-08-15 7 views
3

При использовании акселерометра с 9 степенями свободы (акселерометр, гироскоп и магнитометр) я хочу удалить/компенсировать эффект силы тяжести в показаниях акселерометра (акселерометр может вращаться свободно). Датчик дает ориентацию в представлении кватернионов по отношению к (магнитный) север, запад и до опорного кадра.Компенсация силы тяжести в акселерометре Данные

Я нашел это http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus , но не смог понять основы для данного уравнения.

Как я могу достичь этой приведенной выше информации?

ответ

8

Вам необходимо повернуть показания акселерометра кватернионом в кадр Земли (в систему координат комнаты, если хотите), а затем вычесть гравитацию. Оставшееся ускорение - это ускорение датчика в системе координат Земли, часто называемое линейным ускорением или ускорением пользователя.

В псевдо-коде, что-то вроде этого

acceleration = [ax, ay, ay] // accelerometer reading 

q       // quaternion corresponding to the orientation 

gravity = [0, 0, -9.81]  // gravity on Earth in m/s^2 

a_rotated = rotate(acceleration, q) // rotate the measured acceleration into 
            // the Earth frame of reference 

user_acceleration = a_rotated - gravity 

Вы говорите, что вы можете получить q через API. Единственный нетривиальный шаг - реализовать функцию rotate().

Чтобы вычислить образ вектора v при повороте на q, следующая формула должна быть применена: v повернуты = д v д -1. Чтобы вычислить его с помощью чисел с плавающей запятой, вам нужно сами разработать формулы; они доступны по адресу Using quaternion rotations.

Насколько я могу судить, ссылка, которую вы предоставили, делает именно это, вы видите расширенные формулы там, и теперь вы знаете, откуда они пришли. Кроме того, связанное содержимое, по-видимому, измеряет гравитацию в g, т. Е. Гравитация равна [0,0, -1].

Следите за условными обозначениями (считаете ли вы гравитацию [0,0, -1] или [0,0,1]) и handedness of your coordinate systems!

+0

очень информативно .. спасибо – dragsu

+0

@dragsu Я рад, что это помогло! – Ali

0

Предполагаю, что ваше показание акселерометра находится в корпусе корпуса датчика. Сначала нам нужно представить данные акселерометра относительно инерциальной рамки, а затем вычесть гравитацию. Если вы непосредственно с помощью углов Эйлера, а не кватернион, то вам необходимо вычислить матрицу вращения

R = [ctheta CPSI, -cphi SPSI + SphI stheta CPSI, SphI SPSI + CPhI stheta CPSI ; ctheta SPSI, CPhI CPSI + SphI stheta SPSI, -sphi CPSI + CPhI stheta SPSI; -stheta, sphi ctheta, cfi ctheta]

(Это указано с обозначением MATLAB). Здесь phi обозначает угол наклона рулона, theta for pitch и psi для рыскания. Эта матрица R от тела к инерциальной системе отсчета. Я думаю, что в динамике полета он также известен как транспонирование Direction Cosine Matrix (DCM).

Когда вы применяете операцию умножения матрицы, теперь вам нужно вычесть гравитацию из направления z, чтобы исключить статическое ускорение, то есть гравитацию.

Смежные вопросы