Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Modelo UAV aproximado de alta fidelidad con bloque UAV Guidance Model

Los modelos de simulación a menudo necesitan diferentes niveles de fidelidad durante las diferentes etapas de desarrollo. Durante la etapa de prototipado rápido, nos gustaría experimentar y ajustar rápidamente los parámetros para probar diferentes algoritmos autónomos. Durante la etapa de desarrollo de producción, nos gustaría validar nuestros algoritmos contra modelos de fidelidades crecientes. En este ejemplo, se muestra un método para aproximar un modelo de alta fidelidad con el bloque y usarlo para crear prototipos y ajustar un waypoint después del sistema de navegación.UAV Guidance Model Ver.Ajuste de Waypoint Seguidor para El UAV de Ala Fija El mismo sistema de navegación se prueba con un modelo de alta fidelidad para verificar su rendimiento.

El modelo de ejemplo utiliza un modelo de vehículo aéreo no tripulado (UAV) de alta fidelidad que consta de un modelo de planta y un piloto automático integrado de nivel medio. Este modelo contiene cerca de mil bloques y es bastante complicado trabajar con él. Como primer paso en el proceso de desarrollo, creamos un sistema de variantes que puede cambiar entre este modelo de alta fidelidad y el bloque UAV Guidance Model. El modelo de alta fidelidad se extrae de una entrada de intercambio de archivos, .Aplicación de referencia de drones Simulink

Modelo UAV de diferente fidelidad

uavModel = 'FixedWingModel.slx'; open_system(uavModel);

Puede cambiar entre los modelos de baja y alta fidelidad cambiando un valor de variable MATLAB® almacenado en el diccionario de datos asociado a este modelo.

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

Modelo aproximado de ala fija de alta fidelidad con modelo de guía de baja fidelidad

Para aproximar el modelo de alta fidelidad con el bloque Modelo de orientación UAV, cree señales de control de pasos para alimentar el modelo y observar la respuesta de paso a , y comandos.RollAngleHeightAirSpeed

stepModel = 'stepResponse'; open_system(stepModel)

En primer lugar, ordene un cambio en el ángulo de giro.

controlBlock = get_param('stepResponse/Step Control Input','Object'); controlBlock.StepControl = 'RollAngle Step Control';  assignin(plantDataSet,'useHighFidelity',1);  sim(stepModel);
### Successfully updated the model reference simulation target for model: PlantModel ### Successfully updated the model reference simulation target for model: FixedWingModel 
highFidelityRollAngle = RollAngle.Data(:); highFidelityTime = RollAngle.Time;  figure() plot(highFidelityTime, highFidelityRollAngle,'--r'); title('Roll Angle Step Response')

Al acercarse al resultado de la simulación anterior, verá las características del controlador de ángulo de giro integrado en el modelo de alta fidelidad. El tiempo de sedimentación para el ángulo de balanceo es cercano a 2,5 segundos.

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

Para un controlador PD de segundo orden, para lograr este tiempo de sedimentación con un sistema amortiguado críticamente, se deben utilizar las siguientes ganancias para configurar el bloque UAV Guidance Model dentro de la variante de baja fidelidad del modelo UAV.

zeta = 1.0; % critically damped ts = 2.5; % 2 percent settling time wn = 5.8335/(ts*zeta); newRollPD = [wn^2 2*zeta*wn];

Establezca las nuevas ganancias y simule la respuesta de paso para el modelo de baja fidelidad. Compárelo con la respuesta original.

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

El modelo de baja fidelidad logra una respuesta de paso similar. Del mismo modo, podemos ajustar los otros dos canales de control: y .HeightAirSpeed Aquí se pueden utilizar métodos más sofisticados para optimizar las ganancias de control en lugar de la inspección visual de la respuesta de control. Considere la posibilidad de usar System Identification Toolbox® para realizar un análisis más disemitalo del comportamiento del modelo UAV de alta fidelidad.

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

Algoritmo de navegación de prueba con modelo de baja fidelidad

Ahora que hemos aproximado el modelo de alta fidelidad con el bloque UAV Guidance Model, podemos intentar reemplazarlo con el bloque UAV Guidance Model en el ejemplo.Ajuste de Waypoint Seguidor para El UAV de Ala Fija Pruebe el efecto de las ganancias de control de distancia y rumbo con respecto a estos modelos de diferentes fidelidades.

navigationModel = 'pathFollowing'; open_system(navigationModel);
assignin(plantDataSet,'useHighFidelity',0);  sim(navigationModel);
### Successfully updated the model reference simulation target for model: FixedWingModel 
 figure visualizeSimStates(simStates);

Validar con un modelo de alta fidelidad

assignin(plantDataSet,'useHighFidelity',1);  sim(navigationModel);
### Successfully updated the model reference simulation target for model: FixedWingModel 
 figure visualizeSimStates(simStates);

Conclusión

Este ejemplo muestra cómo podemos aproximar un modelo de alta fidelidad con una abstracción de baja fidelidad de un UAV de ala fija. El enfoque opuesto también se puede utilizar para ayudar a elegir las ganancias de control de piloto automático para el modelo de alta fidelidad. En primer lugar, puede decidir las características aceptables de una respuesta de control de piloto automático simulando un modelo de baja fidelidad en diferentes senarios de prueba y, a continuación, ajustar el piloto automático del modelo de alta fidelidad en consecuencia.