INTERCEPT — первый вариант программного обеспечения компьютерного моделирования квадрокоптера в среде MATLAB.
Проект предназначен для чтения данных бортовой системы регистрации ArduPilot, подготовки данных, идентификации параметров компьютерной модели, расчета компьютерной модели на отложенных участках и формирования отчета оценки адекватности.
Текущий уровень: оценка адекватности компьютерной модели по данным бортовой системы регистрации.
Данная проверка выполнена по данным бортового журнала и не является полной независимой валидацией реального изделия по внешним средствам измерений.
PR №2 расширяет препроцессор: добавляет анализ состава реальных бортовых журналов ArduPilot DataFlash .BIN и подготовку адаптера чтения. Полноценная идентификация по .BIN будет следующим этапом после подтверждения состава каналов.
Основная среда разработки и расчета — MATLAB. Расчетное ядро отделено от препроцессора и постпроцессора, чтобы подготовить последующий перенос в Simulink.
В MATLAB выполните:
run('matlab/startup.m')
run('matlab/run_all_tests.m')Для анализа состава сообщений DataFlash выполните:
run('scripts/analyze_bin_logs.m')Файл scripts/07_analyze_bin_logs.m сохранен как номерной сценарий проекта. Для командного запуска в MATLAB используется технический wrapper scripts/analyze_bin_logs.m, так как имя файла сценария, начинающееся с цифры, не является допустимым именем исполняемого сценария MATLAB.
Для PR №3 добавлен сценарий подготовки обработанных наборов данных, выделения участков-кандидатов ВБ и первой идентификации ModelRate:
run('scripts/extract_segments_and_fit_rate_model.m')Номерной файл этапа сохранен как scripts/08_extract_segments_and_fit_rate_model.m. Команда ниже приведена как идентификатор этапа в структуре проекта, но для фактического командного запуска MATLAB используется wrapper с техническим именем:
run('scripts/08_extract_segments_and_fit_rate_model.m')Сценарий формирует локальные расчетные выходы в result/rate_identification/ и несекретные сводные отчеты в docs/review/.
Для PR №4 добавлен сценарий инженерной фильтрации участков ВБ, диагностики причин провала первой идентификации и сравнения непрерывной и дискретной постановок ModelRate:
run('scripts/curate_segments_and_refit_rate_model.m')Номерной файл этапа сохранен как scripts/09_curate_segments_and_refit_rate_model.m. Команда ниже является идентификатором этапа в структуре проекта, но для фактического запуска в MATLAB используется wrapper с техническим именем:
run('scripts/09_curate_segments_and_refit_rate_model.m')Сценарий формирует локальные расчетные выходы в result/rate_identification_curated/ и несекретные отчеты PR №4 в docs/review/.
В PR №4 невыполнение предварительных критериев ModelRate не скрывается. Отчеты фиксируют причины: перекрывающиеся окна, малая информативность части участков, насыщение RCOU, ограничения FIT при малой изменчивости эталонного сигнала и ограниченность модели первого уровня.
Для PR №5 добавлен визуальный демонстратор бортовых журналов и демонстрационного полета Model6DOF:
run('scripts/visual_demo_and_model6dof_flight.m')Номерной файл этапа сохранен как scripts/10_visual_demo_and_model6dof_flight.m. Команда ниже является идентификатором этапа в структуре проекта, но для фактического запуска MATLAB используется wrapper с техническим именем:
run('scripts/10_visual_demo_and_model6dof_flight.m')После запуска локальные результаты находятся здесь:
result/visual_demo/
Replay по журналу показывает зарегистрированные или оцененные бортовой системой состояния. Model6DOF demo показывает работу расчетной модели, примитивного регулятора и постпроцессора. Это пока не полная независимая валидация.
Для первичного сопоставления Model6DOF с реальными бортовыми журналами используется команда:
run('scripts/model6dof_log_replay_and_fit.m')Номерной файл этапа сохранен как scripts/11_model6dof_log_replay_and_fit.m. В MATLAB фактический запуск выполняется через wrapper с техническим именем, потому что исполняемые имена сценариев не должны начинаться с цифры.
Сценарий выбирает короткие replay-окна, строит начальные условия по журналу, использует RCOU.C1...RCOU.C4 как входы двигателей, выполняет расчет компьютерной модели и формирует overlay-графики журнал / расчет.
Локальные результаты сохраняются в result/model6dof_log_replay/ и не добавляются в Git. Этот режим является этапом первичной настройки и оценки пригодности Model6DOF к последующей валидации по ВБ, а не полной независимой валидацией.
Сценарий ищет локальные журналы:
data/raw/ardupilot/bin/VB-01.alt_50m.BIN;data/raw/ardupilot/bin/full_fly_1.BIN;data/raw/ardupilot/bin/full_fly_2.BIN.
Если файлы отсутствуют, сценарий формирует понятный отчет result/bin_analysis/missing_logs_report.md и указывает, куда нужно положить журналы. Содержимое result может быть локальным расчетным результатом и по умолчанию не предназначено для обычного Git.
Рабочими форматами остаются CSV, MAT, table MATLAB и timetable MATLAB. Для .BIN на PR №2 реализованы анализ структуры, чтение сообщений FMT и декодирование ключевых сообщений, необходимых для последующей подготовки данных.
Сырые журналы ArduPilot DataFlash нужно размещать локально в:
data/raw/ardupilot/bin/
Сырые журналы могут содержать координаты, время полета, параметры изделия и другую чувствительную информацию. Их не следует добавлять в обычный Git. Если принято решение хранить журналы в репозитории, используйте Git LFS или закрытый репозиторий.
Документ валидационного базиса нужно разместить локально:
docs/validation_basis/ValidationBasis_v0.pdf
Формализованный реестр случаев хранится в config/validation_basis_v0.json. Реестр локальных журналов и связи с предполагаемыми случаями ВБ хранится в config/log_manifest_v0.json.
Конфигурация изделия хранится в config/vehicle_qc_ardupilot_v0.json.
В конфигурации явно отражены предупреждения:
- оси CAD не считаются автоматически совпадающими со связанной системой координат изделия;
- по умолчанию используется диагональная матрица инерции;
- произведения инерции CAD сохраняются, но по умолчанию не применяются;
- в исходном описании указаны винты Gemfan 8060, а в CAD-выгрузке присутствуют винты APC 7x11E.
- PR №5 не является этапом полной независимой валидации реального изделия.
- Проверка выполняется по данным бортового журнала, а не по внешним средствам измерений.
- Визуальный replay не заменяет формальную матрицу валидации.
- Демонстрационный полет
Model6DOFпроверяет работоспособность решателя и постпроцессора. - Инженерная фильтрация участков не превращает автоматическую разметку в окончательный валидационный базис.
ModelRateостается моделью первого уровня и не заменяет полную модель движения изделия.Model6DOFи параметры винтомоторной группы будут уточняться на следующих этапах.- Расчетное ядро предназначено для подготовки к переносу в Simulink, но модель Simulink в этом PR не создается.
PR №7 добавляет диагностический этап для проверки базовой физической конфигурации Model6DOF:
- порядок каналов
RCOU.C1...RCOU.C4относительно физических моторов; - знаки вращения моторов и знак момента рыскания;
- матрица распределения QUAD/X;
- преобразование
CAD -> body; - нормирование
RCOUпо параметрам ArduPilotPARM; - согласованность
FRAME_CLASS,FRAME_TYPE,MOT_*иSERVO*с конфигурацией изделия.
Команда запуска:
run('scripts/calibrate_motor_map_and_frame.m')Номерной файл этапа сохранен как scripts/12_calibrate_motor_map_and_frame.m. Фактический запуск выполняется через wrapper с техническим именем.
Локальные результаты сохраняются в result/motor_map_frame_calibration/ и не добавляются в Git. PR №7 не выполняет перенос в Simulink: это преждевременно до фиксации мотор-маппинга, знаков вращения и преобразования систем координат.
Выбранный мотор-маппинг и преобразование CAD -> body являются расчетной гипотезой, сформированной по бортовым журналам. Для окончательного подтверждения требуется физическая проверка подключения моторов, направления вращения и системы координат изделия.