Интеграция показаний гироскопа и акселерометра [дублировать]

StackOverflow https://stackoverflow.com/questions/110804

Вопрос

Возможный Дубликат:
Объединение данных гироскопа и акселерометра

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

У меня есть система, содержащая трехосевой акселерометр и один гироскоп, измеряющий вращение вокруг одной из осей акселерометра.Система рассчитана на то, чтобы ее держал человек, и большую часть времени гироскоп будет измерять вращение вокруг вектора силы тяжести или близко к нему.(Люди, работающие в той же отрасли, скорее всего, поймут, о чем я говорю, исходя из этого ;)) Я понимаю, что это недостаточно ограниченно.

Гироскопы, по-видимому, имеют почти постоянное смещение, которое немного отличается для каждого экземпляра системы.Как бы я мог закодировать фильтр, чтобы использовать показания акселерометра для калибровки гироскопа в моменты, когда система наклонена так, что ось гироскопа не коллинеарна силе тяжести и вращается вокруг оси гироскопа?Кажется, что для этого должно быть достаточно информации, но если вам скажут, что ее нет и почему, это тоже будет ответом :)

Это было полезно?

Решение

nBot, двухколесный балансировочный робот
Совсем немного информации и ссылок о том, как этот автор решил решить проблему баланса для своего двухколесного робота.

Другие советы

Похоже, у вас здесь две (или три) отдельные проблемы.

1.Вы на самом деле не разбираетесь в фильтрах Калмана и / или математике, стоящей за ними.Это очень затруднит его правильную реализацию и использование.

2.Похоже, вы не понимаете основ физики, связанных с этой проблемой.(Базовая физика означает лежащую в основе физику, а не простую физику, потому что она не проста.)

Я бы посоветовал вам попробовать использовать гораздо более простой интегратор, такой как Runga-Kutta 4, для которого вы можете найти множество книг с примерами как реализации, так и использования.Этого должно быть достаточно для решения этой проблемы.(Если клиент указал Kalman, спросите, почему.)

Что касается того, почему проблема ограничена, мне кажется, что у нее нет способа гарантировать, что устройство удерживается вертикально, и нет способа измерить фактическую ориентацию.Забудьте на данный момент о гироскопе и предположите, что устройство нельзя вращать вокруг вертикальной оси.У вас есть три акселерометра, предположительно для оценки положения в 3D.Таким образом, если вы видите ускорение в направлении X, вы увеличиваете оценку того, где вы находитесь в направлении X.Аналогично, если вы видите ускорение в направлении Z (которое, я предполагаю, "вверх"), вы увеличиваете оценку того, где вы находитесь в направлении Z.Теперь слегка поверните устройство, скажем, на 30 градусов вокруг оси Y.Теперь, когда устройство думает, что вы ускоряетесь в направлении X, на самом деле устройство ускоряется немного меньше, чем указано в X и он также ускоряется в направлении Z.Таким образом, ваша оценка положения теперь неверна.

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

Возможно, вам нужно нанять консультанта (нет, я не ищу работу), который помог бы вам сформулировать математические расчеты.

Учитывая ваш интерес к фильтру Калмана, возможно, вы намерены дополнить данные GPS инерциальными измерениями.По поводу вашего вопроса:

"Как бы я мог закодировать фильтр чтобы использовать показания акселерометра для калибровки гироскопа в моменты, когда система наклонена так, что ось гироскопа не коллинеарна силе тяжести и равна вращается вокруг оси гироскопа? Кажется, что для этого должно быть достаточно информации "

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

Если вы хотите обновлять gyro drift "на лету", то вам понадобится фильтр Калмана.

Что касается реализации, я рекомендую главу 7, Интеграция GPS и инерциальной системы из Теория и приложения глобальной позиционной системы том 2 обладает отличным опытом работы по данной теме.В нем есть теория и математика, но нет исходного кода.

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

Вы также найдете общие ресурсы по фильтрации по Калману по адресу http://academic.csuohio.edu/simond/publications.html.Статья , упомянутая в (8) это хорошее, не слишком пугающее введение в математику, лежащую в основе фильтров Калмана.

Джентльмен из Дании только что отправил сообщение отработанный пример вывода фильтра Калмана для решения почти именно этой задачи.

Если вам посчастливилось разрабатывать для Propeller uController, то обмен объектами Параллакса имеет какой-то код.Отличный вопрос ;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top