Проект посвящен моделированию и управлению динамическим объектом. В нем реализованы эмулятор объекта, протокол обмена данными, ПИД-регулятор, фильтрация измерений и инструменты для идентификации модели по логам.
Основная цель работы - построить замкнутую систему управления, подобрать параметры регулятора и сравнить качество переходного процесса по экспериментальным данным.
Необходимо было разработать программную систему, которая:
- эмулирует дискретный динамический объект с шумом измерений;
- передает измерения через бинарный протокол;
- выполняет идентификацию объекта по логам эксперимента;
- рассчитывает управляющее воздействие в замкнутом контуре;
- фильтрует шумные измерения;
- сохраняет логи для последующего анализа в MATLAB;
- предоставляет простой графический интерфейс для запуска сценария и наблюдения за траекторией.
Решение состоит из Qt-приложения и набора MATLAB-скриптов.
В C++ реализованы:
- дискретная модель объекта в пространстве состояний;
- эмулятор объекта с таймером, шумом и логированием;
- кодирование и разбор кадров протокола;
- низкочастотный фильтр;
- ПИД-регулятор;
- фильтр Калмана для сглаживания измерений;
- модифицированный регулятор с производной по оценке скорости;
- QML-интерфейс с визуализацией текущего положения, задания и графиков.
В MATLAB реализованы:
- чтение логов эксперимента;
- идентификация передаточной функции методом наименьших квадратов;
- подбор коэффициентов ПИД-регулятора;
- расчет показателей качества;
- генерация Simulink-модели для проверки схемы управления.
- C++11
- Qt 5 / Qt Quick / QML
- Qt Charts
- Qt Test
- qmake
- MATLAB
- Simulink
.
├── code
│ ├── app
│ │ ├── controller # регуляторы, фильтры и логика сценариев
│ │ ├── emulator # дискретная модель объекта и эмулятор
│ │ ├── protocol # бинарный протокол обмена
│ │ ├── main.cpp # точка входа Qt-приложения
│ │ ├── main.qml # пользовательский интерфейс
│ │ └── ControllerUI.pro
│ └── tests
│ ├── test_*.h # модульные тесты
│ ├── testmain.cpp
│ └── tests.pro
├── logs # логи идентификации и замкнутого контура
├── matlab # скрипты анализа, идентификации и настройки
├── report.docx # отчет по работе
└── README.md
cd code/app
qmake ControllerUI.pro
make
./ControllerUIПосле запуска можно задать начальное положение, нажать Start и наблюдать движение объекта и график переходного процесса.
cd code/tests
qmake tests.pro
make
./testsТесты проверяют дискретную модель, протокол, низкочастотный фильтр, ПИД-регулятор и фильтр Калмана.
Приложение поддерживает запуск сценария через переменные окружения:
cd code/app
SCENARIO_SECONDS=60 LOG_PATH=../../logs/run.txt USE_FILTER=1 ./ControllerUIДоступные параметры:
SCENARIO_SECONDS- длительность сценария в секундах;LOG_PATH- путь для сохранения лога;USE_FILTER- включение фильтрации измерений;USE_MODIFIED- включение модифицированного регулятора;USE_CONSTREF- использование постоянного задания.
Основные скрипты находятся в каталоге matlab:
identify_lsm.m- идентификация модели объекта по логу;design_pid.m- подбор коэффициентов ПИД-регулятора;kalman_design.m- описание матриц фильтра Калмана;quality.m- расчет интегральной ошибки и среднеквадратичного отклонения;build_simulink.m- генерация Simulink-модели;read_log.m- чтение логов в матричный вид.
Пример запуска:
cd matlab
[a0, a1, b0] = identify_lsm('../logs/ident_log.txt');
[Kp, Ki, Kd, Tf] = design_pid(a0, a1, b0);
quality('../logs/closedloop_formula_filter.txt');Проект демонстрирует полный цикл разработки системы управления: от эмуляции и сбора данных до идентификации модели, настройки регулятора, фильтрации измерений и оценки качества управления по логам.