Имитационным моделям часто нужны разные уровни точности во время различных стадий разработки. Во время этапа быстрого прототипирования мы хотели бы быстро экспериментировать и настройки параметров, чтобы протестировать различные автономные алгоритмы. Во время производственной стадии разработки мы хотели бы подтвердить наши алгоритмы против моделей увеличивающейся точности. В этом примере мы демонстрируем метод, чтобы аппроксимировать высокочастотную модель блоком Model Руководства и использовать его, чтобы моделировать и настроить waypoint после системы навигации. Смотрите Настройку Последователь Waypoint для Fixed-Wing UAV. Та же система навигации тестируется против высокочастотной модели, чтобы проверить ее эффективность.
Модель в качестве примера использует высокочастотную модель беспилотного воздушного транспортного средства (UAV), состоящую из модели объекта управления и встроенного автопилота среднего уровня. Эта модель содержит близко к тысяче блоков, и она является вполне сложной, чтобы работать с. Как первый шаг в процессе разработки, мы создали вариантную систему, которая может переключиться между этой высокочастотной моделью и блоком Model Руководства UAV. Высокочастотная модель извлечена из записи Обмена файлами, Примера готовых узлов Беспилотника Simulink.
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);
Чтобы аппроксимировать высокочастотную модель блоком Model Руководства UAV, создайте управляющие сигналы шага питаться в модель и наблюдать переходной процесс к RollAngle
высота
, и 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])
Для контроллера PD второго порядка, чтобы достигнуть этого времени урегулирования с критически ослабленной системой, следующие усиления должны использоваться, чтобы сконфигурировать блок Model Руководства UAV в варианте низкого качества модели UAV. В данном примере блок Model Руководства UAV симулирован с помощью генерации кода, чтобы увеличить скорость для нескольких запусков. Смотрите параметры блоков.
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®, чтобы выполнить последующий анализ высокочастотного поведения модели UAV.
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])
Теперь, когда мы аппроксимировали высокочастотную модель блоком Model Руководства UAV, мы можем попытаться заменить его на блок Model Руководства UAV в Настройке Последователь Waypoint для примера Fixed-Wing UAV. Протестируйте воздействие предварительного расстояния и возглавляющий усиления управления против этих моделей различной точности.
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);
В этом примере показано, как мы можем аппроксимировать высокочастотную модель абстракцией низкого качества фиксированного крыла UAV. Противоположный подход может использоваться также, чтобы помочь с выбором усилений управления автопилотом для высокочастотной модели. Можно сначала решить приемлемые характеристики ответа управления автопилотом путем симуляции модели низкого качества в различных тестовых сценариях и затем настроить высокочастотный автопилот модели соответственно.
discardChanges(plantDataDictionary); clear plantDataSet clear plantDataDictionary close_system(uavModel, 0); close_system(stepModel, 0); close_system(navigationModel, 0);
fixedwing
| multirotor
| UAV Guidance Model