Аппроксимация модели БПЛА High-Fidelity с блоком модели руководства БПЛА

Модели симуляции часто нуждаются в разных уровнях точности на разных этапах разработки. На этапе быстрого прототипирования мы хотели бы быстро экспериментировать и настройки параметров, чтобы протестировать различные автономные алгоритмы. На этапе разработки производства мы хотели бы подтвердить наши алгоритмы в соответствие с моделями повышения точности. В этом примере мы демонстрируем метод аппроксимации высокоточной модели с блоком 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')

Figure contains an axes. The axes with title Roll Angle Step Response contains an object of type line.

Масштабируя результат симуляции выше, вы видите характеристики контроллера угла крена, встроенного в высокоточную модель. Значение времени урегулирования угла крена близко к 2,5 секундам.

xlim([75 80])
ylim([-0.1 0.548])

Figure contains an axes. The axes with title Roll Angle Step Response contains an object of type line.

Для контроллер второго порядка, для достижения этого времени урегулирования с критически демпфированной системой, следующие усиления должны использоваться, чтобы сконфигурировать блок модели руководства БПЛА внутри варианта с низкой точностью модели БПЛА. В данном примере блок 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');

Figure contains an axes. The axes with title Roll Angle Step Response contains 2 objects of type line. These objects represent High-Fidelity Response, Low-Fidelity Response.

Модель с низкой точностью достигает аналогичной переходной характеристики. Точно так же мы можем настроить два других канала управления: 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])

Figure contains an axes. The axes with title Air Speed Step Response contains 2 objects of type line. These objects represent Low-Fidelity Response, High-Fidelity Response.

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])

Figure contains an axes. The axes with title Height Step Response contains 2 objects of type line. These objects represent Low-Fidelity Response, High-Fidelity Response.

Тестовый алгоритм навигации с низкоточной моделью

Теперь, когда мы аппроксимировали модель высокой точности с блоком БПЛА 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);

Figure contains an axes. The axes contains 204 objects of type patch, line.

Валидация с помощью высокоточной модели

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);

Figure contains an axes. The axes contains 204 objects of type patch, line.

Заключение

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

discardChanges(plantDataDictionary);
clear plantDataSet
clear plantDataDictionary
close_system(uavModel, 0);
close_system(stepModel, 0);
close_system(navigationModel, 0);

См. также

| |

Похожие темы