Акселерометр гравитационных компонентов - PullRequest
7 голосов
/ 07 июня 2010

Я знаю, что этот вопрос определенно уже решен где-то много раз, пожалуйста, просветите меня, если вы знаете об их существовании, спасибо.

Краткое описание: Я хочу вычислить из трехосевого акселерометра гравитационную составляющую на каждой из этих трех осей. Я использовал 2-х осевые диаграммы тел для расчета гравитационной составляющей акселерометра в мировых осях X-Z, Y-Z и X-Y. Но решение кажется слегка отклоненным, оно приемлемо для экстремальных случаев, когда гравитация воздействует только на одну ось акселерометра, но для шага и крена обоих 45 градусов общая суммарная величина больше силы тяжести (полученной Xa ^ 2 + Ya ^ 2 + Za ^ 2 = g ^ 2; Xa, Ya и Za - показания акселерометра по осям X, Y и Z).

Более подробно: Это устройство Nexus One, в дополнение к 3-осевому акселерометру, у него есть датчик магнитного поля для определения азимута, шага и крена.

На оси мира (где Z в том же направлении, что и гравитация, а X или Y указывают на северный полюс, не думаю, что это имеет большое значение?), Я предположил, что мое устройство имеет шаг (P) на Ось YZ и рулон (R) на оси XZ. С этим я использовал простой триг, чтобы получить: Sin (R) = Ах / Gxz Cos (R) = Az / Gxz Tan (R) = Ax / Az

Существует еще один набор высоты тона, P.

Теперь я определил гравитацию, чтобы иметь 3 компонента на мировой оси, Gxz, который можно измерить только на оси X-Z, Gyz для Y-Z и Gxy для оси X-Y. Gxz ^ 2 + Гыз ^ 2 + Gxy ^ 2 = 2 * G ^ 2 2G - потому что гравитация фактически включена дважды в это определение.

Да, и ось X-Y производит нечто более экзотическое ... Я объясню, если потребуется позже.

Из этих уравнений я получил формулу для Az и удалил операции tan, потому что не знаю, как обрабатывать tan90 (это бесконечность?).

Итак, мой вопрос: кто-нибудь знает, правильно ли я сделал это или неправильно или смог указать мне правильное направление?

Спасибо! Dvd

Ответы [ 5 ]

5 голосов
/ 07 июня 2010

Насколько я понимаю ваш вопрос, вы знаете высоту и отклонение вашего устройства (от магнитометра) и хотите использовать эту информацию для вычисления компонента гравитации вдоль каждой из ваших (координат устройства) координатных осей?

Как физик, я воспитан с углами Эйлера вместо шага-рысканья, но, глядя на http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll, я бы рассчитал это следующим образом: Предположим, что ваше устройство изначально ориентировано вдоль глобальной системы координат, так что гравитация составляет gvec:={0,0,-g} (в локальной системе координат). Теперь нам нужно вычислить локальные координаты gvec, когда мы проходим через шаг рыскания рыскания (yaw ничего не делает, как вы упомянули). Для меня это проще всего с матрицами вращения: мы должны изменить знак углов, так как gvec остается на месте. Я сделаю это с Mathematica, потому что это мой молоток, а это гвоздь

yaw = RotationMatrix[-yawangle,{0,0,1}];
pitch = RotationMatrix[-pitchangle, {0,1,0}];
roll = RotationMatrix[-rollangle,{1,0,0}];
gvec={0,0,-g}
yaw.gvec
pitch.yaw.gvec
roll.pitch.yaw.gvec

Выходные данные - это локальные координаты для gvec до рыскания, а также после рыскания, тангажа и крена (поэтому последняя строка ниже должна быть вашим ответом):

{0,0,-g}
{0,0,-g}
{g Sin[pitchangle],0,-g Cos[pitchangle]}
{g Sin[pitchangle],-g Cos[pitchangle] Sin[rollangle],-g Cos[pitchangle] Cos[rollangle]}
1 голос
/ 10 января 2014

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

1 голос
/ 07 июня 2010

Хотел бы я знать, потому что меня тоже интересует эта проблема.

Хорошее место для начала исследования - http://www.diydrones.com/.Люди уже решили эту проблему в контексте автопилотов самолетов.С этого сайта связана тонна высококачественного открытого исходного кода, а также обсуждения математики.

0 голосов
/ 24 января 2012

Получить вектор гравитации от датчика ускорения нелегко, вам нужен другой датчик, такой как гироскоп (если имеется), для получения правильной части гравитации из показаний акселерометра.

С уважением, Навигатор

0 голосов
/ 11 июня 2010

Спасибо, Янус! Ваше объяснение просветило меня относительно матрицы вращения. И последняя строчка действительно решила мою проблему!

Теперь мне просто нужно переделать мои диаграммы свободных тел, чтобы выяснить, что я сделал неправильно ... Я уже обнаружил, что у меня не должно быть XY-компонента гравитации, поскольку гравитация ортонормирована оси XY .. .

Еще раз спасибо!

Редактировать: проследите за этой последней строкой: {g Sin [pitchangle], - g Cos [pitchangle] Sin [rollangle], - g Cos [pitchangle] Cos [rollangle]}

Я нашел вместо -g Cos [pitchangle] Sin [rollangle] Грех [откат] от моей диаграммы свободного тела больше напоминает фактическое ускорение.

Что я не могу понять сейчас, так это последний компонент -g Cos [pitchangle] Cos [rollangle] теперь он идеально подходит для небольших углов тангажа и крена, и отлично работает как для угла тангажа, так и для угла тангажа, в то время как другой остается равным 0, но отклонение становится значительным, когда и тангаж, и крен больше не малы (например, 40 градусов) , На самом деле я также понял, что для достижения 45 кренов и 45 тонов на нексусах, телефон будет иметь показание оси 0 Z, а X и Y - на ускорении 6,8. В то время как полученная формула умножения матрицы вращения при 45 кренах и 45 шагах будет 0,5 гравитации.

Что-то не так с выходом датчика ориентации? или это то, как должны работать тональность и крен?

Кто-нибудь знает, как объяснить это?

Спасибо!

...