Аппроксимированная модель High-Fidelity UAV с блоком Model Руководства UAV

Имитационным моделям часто нужны разные уровни точности во время различных стадий разработки. Во время этапа быстрого прототипирования мы хотели бы быстро экспериментировать и настройки параметров, чтобы протестировать различные автономные алгоритмы. Во время производственной стадии разработки мы хотели бы подтвердить наши алгоритмы против моделей увеличивающейся точности. В этом примере мы демонстрируем метод, чтобы аппроксимировать высокочастотную модель блоком Model Руководства UAV и использовать его, чтобы моделировать и настроить waypoint после системы навигации. Смотрите Настройку Последователь Waypoint для Fixed-Wing UAV. Та же система навигации тестируется против высокочастотной модели, чтобы проверить ее производительность.

Модель в качестве примера использует высокочастотную модель беспилотного воздушного транспортного средства (UAV), состоящую из модели объекта управления и встроенного автопилота среднего уровня. Эта модель содержит близко к тысяче блоков, и она является вполне сложной, чтобы работать с. Как первый шаг в процессе разработки, мы создали вариантную систему, которая может переключиться между этой высокочастотной моделью и блоком Model Руководства UAV. Высокочастотная модель извлечена из записи Обмена файлами, Примера готовых узлов Беспилотника Simulink.

Модель UAV различной точности

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
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
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.
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
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
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
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
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
figure
visualizeSimStates(simStates);

Заключение

В этом примере показано, как мы можем аппроксимировать высокочастотную модель абстракцией низкого качества фиксированного крыла UAV. Противоположный подход может использоваться также, чтобы помочь с выбором усилений управления автопилотом для высокочастотной модели. Можно сначала решить приемлемые характеристики ответа управления автопилотом путем симуляции модели низкого качества в различных тестовых сценариях и затем настроить высокочастотный автопилот модели соответственно.

discardChanges(plantDataDictionary);

Смотрите также

| |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте