Модели симуляции часто нуждаются в разных уровнях точности на разных этапах разработки. На этапе быстрого прототипирования мы хотели бы быстро экспериментировать и настройки параметров, чтобы протестировать различные автономные алгоритмы. На этапе разработки производства мы хотели бы подтвердить наши алгоритмы в соответствие с моделями повышения точности. В этом примере мы демонстрируем метод аппроксимации высокоточной модели с блоком Guidance Model и используем его для прототипа и настройки путевой точки после навигационной системы. См. раздел Тюнинг путевой точки для БПЛА с фиксированным крылом. Та же навигационная система проверяется на соответствие высокоточной модели, чтобы проверить ее эффективность.
В качестве примера в модели используется высокоточная модель беспилотного летательного транспортного средства (БПЛА), состоящая из модели объекта управления и встроенного автопилота среднего уровня. Эта модель содержит около тысячи блоков и с ней довольно сложно работать. В качестве первого шага в процессе разработки мы создали вариантную систему, которая может переключаться между этой высокоточной моделью и блоком UAV Guidance Model. Высокоточная модель извлекается из записи File Exchange, Simulink Drone Reference Application.
uavModel = 'FixedWingModel.slx';
open_system(uavModel);
Можно переключаться между моделями с низкой и высокой точностью путем изменения значения переменных MATLAB ®, хранящегося в словаре данных, сопоставленном с этой моделью.
plantDataDictionary = Simulink.data.dictionary.open('pathFollowingData.sldd'); plantDataSet = getSection(plantDataDictionary,'Design Data'); % Switch to high-fidelity model assignin(plantDataSet,'useHighFidelity',1);
% Switch to low-fidelity model assignin(plantDataSet,'useHighFidelity',0);
Чтобы аппроксимировать модель высокой точности с блоком BAV Guidance Model, создайте сигналы управления шагом, чтобы подать в модель и наблюдать переходную характеристику на RollAngle
, Height
, и AirSpeed
команды.
stepModel = 'stepResponse';
open_system(stepModel)
Сначала задайте изменение угла крена.
controlBlock = get_param('stepResponse/Step Control Input','Object'); controlBlock.StepControl = 'RollAngle Step Control'; assignin(plantDataSet,'useHighFidelity',1); sim(stepModel);
### Starting serial model reference simulation build ### Successfully updated the model reference simulation target for: PlantModel ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason ======================================================================================== PlantModel Code generated and compiled PlantModel_msf.mexa64 does not exist. FixedWingModel Code generated and compiled FixedWingModel_msf.mexa64 does not exist. 2 of 2 models built (0 models already up to date) Build duration: 0h 1m 34.86s
highFidelityRollAngle = RollAngle.Data(:); highFidelityTime = RollAngle.Time; figure() plot(highFidelityTime, highFidelityRollAngle,'--r'); title('Roll Angle Step Response')
Масштабируя результат симуляции выше, вы видите характеристики контроллера угла крена, встроенного в высокоточную модель. Значение времени урегулирования угла крена близко к 2,5 секундам.
xlim([75 80]) ylim([-0.1 0.548])
Для контроллер второго порядка, для достижения этого времени урегулирования с критически демпфированной системой, следующие усиления должны использоваться, чтобы сконфигурировать блок модели руководства БПЛА внутри варианта с низкой точностью модели БПЛА. В данном примере блок BAV Guidance Model моделируется с помощью генерации кода, чтобы увеличить скорость для нескольких запусков. Смотрите параметры блоков.
zeta = 1.0; % critically damped ts = 2.5; % 2 percent settling time wn = 5.8335/(ts*zeta); newRollPD = [wn^2 2*zeta*wn];
Установите новые коэффициенты усиления и моделируйте переходную характеристику для модели с низкой точностью. Сравните его с исходным ответом.
load_system(uavModel) set_param('FixedWingModel/FixedWingModel/LowFidelity/Fixed Wing UAV Guidance Model',... 'PDRollFixedWing',strcat('[',num2str(newRollPD),']')) save_system(uavModel) assignin(plantDataSet, 'useHighFidelity', 0); sim(stepModel);
### Starting serial model reference simulation build ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason =========================================================================================== FixedWingModel Code generated and compiled Model or library FixedWingModel has changed. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 19.476s
lowFidelityRollAngle = RollAngle.Data(:); lowFidelityTime = RollAngle.Time; hold on; plot(lowFidelityTime, lowFidelityRollAngle,'-b'); legend('High-Fidelity Response', 'Low-Fidelity Response', 'Location','southeast');
Модель с низкой точностью достигает аналогичной переходной характеристики. Точно так же мы можем настроить два других канала управления: Height
и AirSpeed
. Здесь могут использоваться более сложные методы для оптимизации коэффициентов усиления управления вместо визуального контроля контрольной характеристики. Рассмотрите использование System Identification Toolbox ®, чтобы выполнить последующий анализ поведения высокоточной модели БПЛА.
controlBlock.StepControl = 'AirSpeed Step Control'; assignin(plantDataSet, 'useHighFidelity', 0); sim(stepModel);
### Starting serial model reference simulation build ### Model reference simulation target for FixedWingModel is up to date. Build Summary 0 of 1 models built (1 models already up to date) Build duration: 0h 0m 2.8818s
lowFidelityAirSpeed = AirSpeed.Data(:);
lowFidelityTime = AirSpeed.Time;
assignin(plantDataSet, 'useHighFidelity', 1);
sim(stepModel);
### Starting serial model reference simulation build ### Model reference simulation target for PlantModel is up to date. ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason ========================================================================================================================= FixedWingModel Code generated and compiled Variant control useHighFidelity == 0 value has changed from true to false. 1 of 2 models built (1 models already up to date) Build duration: 0h 0m 31.251s
highFidelityAirSpeed = AirSpeed.Data(:); highFidelityTime = AirSpeed.Time; figure() plot(lowFidelityTime, lowFidelityAirSpeed,'-b'); hold on; plot(highFidelityTime, highFidelityAirSpeed,'--r'); legend('Low-Fidelity Response', 'High-Fidelity Response', 'Location','southeast'); title('Air Speed Step Response') xlim([70 80]) ylim([17.5 19.2])
controlBlock.StepControl = 'Height Step Control'; assignin(plantDataSet, 'useHighFidelity', 0); sim(stepModel);
### Starting serial model reference simulation build ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason ========================================================================================================================= FixedWingModel Code generated and compiled Variant control useHighFidelity == 1 value has changed from true to false. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 17.761s
lowFidelityHeight = Height.Data(:);
lowFidelityTime = Height.Time;
assignin(plantDataSet, 'useHighFidelity', 1);
sim(stepModel);
### Starting serial model reference simulation build ### Model reference simulation target for PlantModel is up to date. ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason ========================================================================================================================= FixedWingModel Code generated and compiled Variant control useHighFidelity == 0 value has changed from true to false. 1 of 2 models built (1 models already up to date) Build duration: 0h 0m 33.54s
highFidelityHeight = Height.Data(:); highFidelityTime = Height.Time; figure() plot(lowFidelityTime, lowFidelityHeight,'-b'); hold on; plot(highFidelityTime, highFidelityHeight,'--r'); legend('Low-Fidelity Response', 'High-Fidelity Response', 'Location','southeast'); title('Height Step Response') xlim([70 150]) ylim([49 56])
Теперь, когда мы аппроксимировали модель высокой точности с блоком БПЛА Guidance Model, мы можем попытаться заменить его блоком BAV Guidance Model в примере Tuning Waypoint Follower для БПЛА с неподвижным крылом. Протестируйте эффект усиления расстояния и управления курсом по сравнению с этими моделями различных точностей.
navigationModel = 'pathFollowing';
open_system(navigationModel);
assignin(plantDataSet,'useHighFidelity',0);
sim(navigationModel);
### Starting serial model reference simulation build ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason ========================================================================================================================= FixedWingModel Code generated and compiled Variant control useHighFidelity == 1 value has changed from true to false. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 15.825s
figure visualizeSimStates(simStates);
assignin(plantDataSet,'useHighFidelity',1);
sim(navigationModel);
### Starting serial model reference simulation build ### Model reference simulation target for PlantModel is up to date. ### Successfully updated the model reference simulation target for: FixedWingModel Build Summary Simulation targets built: Model Action Rebuild Reason ========================================================================================================================= FixedWingModel Code generated and compiled Variant control useHighFidelity == 0 value has changed from true to false. 1 of 2 models built (1 models already up to date) Build duration: 0h 0m 34.524s
figure visualizeSimStates(simStates);
Этот пример показывает, как мы можем аппроксимировать высокоточную модель с низкоточной абстракцией фиксированного БПЛА. Противоположный подход может также использоваться, чтобы помочь с выбором коэффициентов усиления автопилота для высокоточной модели. Можно сначала решить приемлемые характеристики отклика автопилота путем симуляции модели низкой точности в различных тестовых сенариях, а затем соответствующим образом настроить автопилот высокой точности модели.
discardChanges(plantDataDictionary); clear plantDataSet clear plantDataDictionary close_system(uavModel, 0); close_system(stepModel, 0); close_system(navigationModel, 0);
fixedwing
| multirotor
| UAV Guidance Model