1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/RT-Thread-Mirror-ukal

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

μKal: библиотека микрофильтра Калмана

Библиотека микрофильтров Калмана (μKal) — это библиотека для фильтрации Калмана, оценки состояния и объединения датчиков в системах с ограниченными ресурсами памяти микроконтроллеров и встраиваемых систем. Библиотека построена на основе μLAPack — микропакета линейной алгебры, оптимизированного для систем с ограниченной памятью, и может работать на любой цели, для которой можно скомпилировать C.

μKal представляет собой полную библиотеку дискретного времени фильтрации Калмана. Библиотека может фильтровать линейные и нелинейные системы с помощью расширенного фильтра Калмана (EKF) или фильтра второго порядка (SOF).

Функции

Все функции μKal являются «безопасными», поскольку операции с матрицами и векторами проверяются на инициализацию и математическую законность перед выполнением операции. Библиотека содержит различные операции и манипуляции, которые можно настроить под свои нужды. Библиотеку можно безопасно настроить для работы даже в самых ограниченных средах, где выделение памяти вызывает беспокойство.

Включённая функциональность

  • Создание модели пространства состояний фильтра:
    • установка типа фильтра: линейный, EKF или SOF;
  • Прогнозирование значений состояния (прогнозы Калмана);
  • Фильтрация измерений датчиков (обновления Калмана);
  • Функции обновления — ukal_set_fx и ukal_set_hx:
    • для нелинейных систем можно задать нелинейный вектор состояния и динамику наблюдения;
  • Безопасные геттеры и сеттеры для вектора состояния, ковариационной матрицы и т. д.!

Если у вас есть модель, которая выглядит так:

или так:

и у вас есть измерительная модель, которая выглядит следующим образом:

или так:

И вы знаете свои ковариационные матрицы:

Тогда вы можете сразу же начать фильтрацию после создания фильтра и инициализации значений матрицы/вектора:

ukal_filter_create(&my_filter, <linear, ekf, or sof>, n_states, n_measurements,
                   &Phi, &gamma, &x, &Q,
                   &P,
                   &H, &R);

Не хотите использовать систему, которая похожа на эту? Хотите узнать, как сделать вашу систему подходящей для этой формы? См. пример использования μKal для EKF, чтобы узнать больше о моделировании системы и использовании μKal для фильтрации зашумлённых измерений датчиков для линейных и нелинейных систем.

Хотите предсказать текущий вектор состояния и значение ковариационной матрицы?

ukal_model_predict(&my_filter);

Получили измерение датчика и хотите обновить оценку состояния и ковариационную матрицу?

ukal_update(&my_filter, &y);

Сборка

Пример сборки см. в tests/Makefile, где показано, как скомпилировать проект с правильными настройками параметров и компоновкой.

Параметры сборки

Некоторые основные параметры сборки настроены в проекте, но любой параметр μLAPack можно настроить по желанию.

Статическое распределение памяти

Библиотека реализована на основе [μLAPack], и настроена для работы только со статически выделенной памятью. Эта библиотека безопасна и готова к использованию во встраиваемой системе, где динамическое выделение памяти невозможно.

Выберите тип контейнера входа

В библиотеке используется контейнер типа std::vector для хранения данных. Вы можете выбрать другой тип контейнера, если это необходимо. Пользователь этой библиотеки может установить тип данных элементов матрицы/вектора на желаемый с помощью #define ULAPACK_MATRIX_ENTRY_TYPE в файле ukal.h.

Очистка при инициализации

Все новые созданные объекты матрицы/вектора можно инициализировать нулями, если во время компиляции определено ULAPACK_INITIALIZE_MEMORY.

Опции инверсии матрицы

Определите ULAPACK_INVERSE_VIA_LU, чтобы использовать LU-разложение для инверсии матриц.

Модульные тесты

μLAPack был разработан с использованием практик, основанных на тестировании. Модульные тесты и Makefile для сборки и запуска модульных тестов находятся в каталоге tests/. В нём также есть реализация расширенного фильтра Калмана в качестве примера.

Коды ошибок

Следующие коды ошибок могут быть возвращены функциями библиотеки. См. документацию внутри файла для функции, чтобы проверить её коды возврата типа FilterError_t.

  • ukal_error — общий код ошибки;
  • ukal_invalid_argument — плохой аргумент, переданный функции;
  • ukal_uninit_obj — неинициализированный объект, переданный в функцию;
  • ukal_success — общий успешный код.

Лицензирование и поддержка

μKal можно свободно использовать в личных и/или образовательных целях без прибыли и для разработки в ваших проектах, чтобы определить, подходит ли вам μKal.

Для разработчиков и для производного коммерческого использования (с правами на распространение): заполните форму запроса лицензии, и я оперативно отвечу с ответом и предложенным лицензионным соглашением.

Обратитесь к документу LICENSE для получения подробной информации о лицензировании.

TODO

  • Сделать файл README более привлекательным.
  • Добавить примеры в сам файл README, а не только в каталог примеров.

Есть предложение по новой функции/возможности? Создайте проблему в этом репозитории со своими запросами.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека микрофильтра Калмана. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/RT-Thread-Mirror-ukal.git
git@api.gitlife.ru:oschina-mirror/RT-Thread-Mirror-ukal.git
oschina-mirror
RT-Thread-Mirror-ukal
RT-Thread-Mirror-ukal
master