Имитационным моделям часто нужны разные уровни точности во время различных стадий разработки. Во время этапа быстрого прототипирования мы хотели бы быстро экспериментировать и настройки параметров, чтобы протестировать различные автономные алгоритмы. Во время производственной стадии разработки мы хотели бы подтвердить наши алгоритмы против моделей увеличивающейся точности. В этом примере мы демонстрируем метод, чтобы аппроксимировать высокочастотную модель с блоком Model Руководства UAV и использовать его, чтобы моделировать и настроить 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
, 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); 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.
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);
### Successfully updated the model reference simulation target for model: FixedWingModel
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); lowFidelityAirSpeed = AirSpeed.Data(:); lowFidelityTime = AirSpeed.Time; assignin(plantDataSet, 'useHighFidelity', 1); sim(stepModel);
### Successfully updated the model reference simulation target for model: FixedWingModel
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);
### Successfully updated the model reference simulation target for model: FixedWingModel
lowFidelityHeight = Height.Data(:);
lowFidelityTime = Height.Time;
assignin(plantDataSet, 'useHighFidelity', 1);
sim(stepModel);
### Successfully updated the model reference simulation target for model: FixedWingModel
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);
### Successfully updated the model reference simulation target for model: FixedWingModel
figure visualizeSimStates(simStates);
assignin(plantDataSet,'useHighFidelity',1);
sim(navigationModel);
### Successfully updated the model reference simulation target for model: FixedWingModel
figure visualizeSimStates(simStates);
Этот пример показывает, как мы можем аппроксимировать высокочастотную модель с абстракцией низкого качества фиксированного крыла UAV. Противоположный подход может использоваться также, чтобы помочь с выбором усилений управления автопилотом для высокочастотной модели. Можно сначала решить приемлемые характеристики ответа управления автопилотом путем симуляции модели низкого качества в различных тестовых сценариях и затем настроить высокочастотный образцовый автопилот соответственно.