Вопрос

Я строю балансирующего робота, используя систему NXT Lego Mindstorm. Я использую два датчика из Hitechnic, первым из которых является акселерометр, а второй - гироскоп. Я успешно отфильтровал шум от обоих датчиков и полученных углов для обоих в диапазоне от -90 до 90 градусов, причем 0 градусов идеально сбалансировано.

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

enter image description here

Наиболее часто используемый подход, который я видел, чтобы сделать объединение этих датчиков сплошными, - это использование фильтра Калмана. Тем не менее, я не эксперт в исчислении, и я действительно не понимаю математических символов, я действительно понимаю математику в исходном коде.

Я использую ROBOTC (что похоже на любое другое CRIVATION) и очень признателен, если кто -то сможет привести мне примеры того, как это сделать в C.

Спасибо за помощь!

Результаты решения:

Хорошо, Керсни решил мою проблему, познакомив меня с дополнительными фильтрами. Это график, иллюстрирующий мои результаты:

Результат № 1

enter image description here

Результат № 2

enter image description here

Как вы можете видеть, фильтр исправляет гироскопический дрейф и объединяет оба сигнала в один гладкий сигнал.

Редактировать: Поскольку я все равно исправлял разбитые изображения, я подумал, что было бы весело показать установку, которую я использовал для генерации этих данных:

enter image description here

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

Решение

Фильтры Калмана великолепны и все, но я нахожу дополнительный фильтр намного проще в реализации с аналогичными результатами. Лучшие статьи, которые я нашел для кодирования дополнительного фильтра, - это это вики (вместе с эта статья о преобразовании датчиков в инженерные единицы) и PDF в файле ZIP на эта страница (В соответствии с технической документацией, я считаю, что имя файла в ZIP IS filter.pdf);

Пса Если вы застряли на фильтре Калмана, здесь является некоторым кодом C-Syntax для Arduino, который его реализует.

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

Gamasutra.com пробег Статья об использовании фильтров Калмана для фильтрации Wiimote.

В конце статьи есть некоторые ссылки на исходный код C ++.

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