Tune Control Design for VTOL UAV in Transition
This example shows how to tune the transition controller of a tilt-rotor VTOL UAV. When transitioning from hover mode to fixed-wing mode, the VTOL UAV tilts the front two rotors horizontally, and gradually shuts down the rear two motors. Conversely, when it transitions back into hover mode, the VTOL UAV tilts the front two rotors vertically and engages the rear two motors.
Getting Started
To access the Simulink model, supporting files, and project shortcuts that this example uses, you must open the VTOLRefApp.prj project file.
% Open the Simulink project prj = openProject("VTOLApp/VTOLRefApp.prj");
To set up the VTOL UAV plant and enable the hover configuration, on the Project tab of the MATLAB® Toolstrip, in the Shortcuts section, select Set up Plant. Alternatively, use the setupPlant helper function.
setupPlant
Initialized VTOL model. Enabled hover configuration. Enabled hover guidance mission.
Load the VTOL UAV controller gains from the previous hover and fixed-wing mode tuning examples.
load tunedHoverGains_BW50 load tunedFixedWingGains_BW10.mat
Effect of Transition Controller Parameters
The Tilt Scheduler subsystem calculates the tilt angle of the front two motors during forward and backward transitions. The Tilt Scheduler subsystem consists of the Forward Transition Scheduler and Back Transition Scheduler subsystems.
Open the Forward Transition Scheduler subsystem.
blockpath = Simulink.BlockPath(["VTOLTiltrotor/Autopilot/Controller", ... "VTOLAutopilotController/Low level controller/Tilt Scheduler/Forward Transition Scheduler"]); open(blockpath)

During forward transition, the VTOL UAV tilts the front two rotors forward, and gradually shuts down the rear two motors. These parameters affect the tilt scheduler in the forward transition phase:
Tilt schedule rate — The rate at which the front motors tilt forward before reaching the critical tilt angle, specified in radians per second. A higher value results in the front motors tilting faster.
Critical tilt angle — The tilt angle at which the front motors start to tilt with maximum angular velocity, specified in radians. A higher value causes the front motors to tilt with maximum velocity at an angle closer to the horizontal position.
Wind down rate — The rate at which back rotors gradually wind down until stopping completely, specified in revolutions per second squared. A higher value causes the rear rotor to shut down faster during the forward transition. This results in lower battery consumption at the expense of reduced VTOL UAV pitch control authority.
Open the Back Transition Scheduler subsystem.
blockpath = Simulink.BlockPath(["VTOLTiltrotor/Autopilot/Controller", ... "VTOLAutopilotController/Low level controller/Tilt Scheduler/Back Transition Scheduler"]); open(blockpath)

During backward transition, the VTOL UAV tilts the front two rotors backward to slow down. Once the speed of the VTOL UAV falls below the transition threshold, the VTOL UAV transitions to hover mode and lands. The proportional gain of the Vx Controller affects the backward transition, where a higher value results in more aggressive braking during the backward transition.
Set Up Short Transition Guidance Mission
This example focuses on tuning the forward transition parameters using a short guidance mission that consists of hover, transition, and fixed-wing flight components. To set up the mission, click the Set Up Transition Sensitivity Experiment shortcut. Alternatively, use the setupTransitionSensitivityMission helper function.
setupTransitionSensitivityMission
Enabled transition sensitivity mission.
To improve performance during the mission, disable the visualization
Visualization = 0;
Tune Tilt Schedule Rate
Represent the data dictionary entry TiltScheduleRate with a Simulink.data.dictionary.Entry object, tiltRateParam. The VTOLDynamicsData.sldd data dictionary defines TiltScheduleRate.
tiltRateParam = getEntry(dDataSectObj,"TiltScheduleRate");Run the simulation with tilt schedule rates of 15, 30, and 45 degrees per second, and store the output of each simulation in the variables outTR15, outTR30, and outTR45, respectively.
setValue(tiltRateParam,deg2rad(15)) outTR15 = sim(mdl); setValue(tiltRateParam,deg2rad(30)) outTR30 = sim(mdl); setValue(tiltRateParam,deg2rad(45)) outTR45 = sim(mdl);
Plot the simulation outputs to compare the altitude, pitch, tilt, and airspeed at each tilt schedule rate by using the exampleHelperPlotTransitionResults function. The plot shows that a tilt schedule rate of 15 degrees per second enables the VTOL UAV to achieve minimal pitch oscillation without excessive time spent in the transition velocity of 14 meters per second.
tLayout = tiledlayout(4,1);
exampleHelperPlotTransitionResults(tLayout,outTR15)
exampleHelperPlotTransitionResults(tLayout,outTR30)
exampleHelperPlotTransitionResults(tLayout,outTR45)
leg = legend({'Tilt Schedule Rate 15 deg/sec','Tilt Schedule Rate 30 deg/sec','Tilt Schedule Rate 45 deg/sec'});
leg.Layout.Tile = "north";
Tune Critical Tilt Angle
Represent the data dictionary entry CriticalTiltAngle with a Simulink.data.dictionary.Entry object, criticalAngleParam. The VTOLDynamicsData.sldd data dictionary defines CriticalTiltAngle.
criticalAngleParam = getEntry(dDataSectObj,"CriticalTiltAngle");Run the simulation with critical tilt angles of 90, 60, and 30 degrees, and store the output of each simulation in the variables outTC90, outTC60, and outTC30, respectively.
setValue(criticalAngleParam,deg2rad(90)) outTC90 = sim(mdl); setValue(criticalAngleParam,deg2rad(60)) outTC60 = sim(mdl); setValue(criticalAngleParam,deg2rad(30)) outTC30 = sim(mdl);
Plot the simulation outputs to compare the altitude, pitch, tilt, and airspeed at each tilt schedule rate by using the exampleHelperPlotTransitionResults function. The plot shows that a critical tilt angle of 60 degrees enables the VTOL UAV to transition to fixed-wing mode with minimal pitch oscillation and airspeed reduction.
tLayout = tiledlayout(4,1);
exampleHelperPlotTransitionResults(tLayout,outTC90)
exampleHelperPlotTransitionResults(tLayout,outTC60)
exampleHelperPlotTransitionResults(tLayout,outTC30)
leg = legend({'Critical Tilt Angle 90 deg','Critical Tilt Angle 60 deg','Critical Tilt Angle 30 deg'});
leg.Layout.Tile = "north";
Tune Wind Down Rate
Represent the data dictionary entry WindDownRate with a Simulink.data.dictionary.Entry object, windRateParam. The VTOLDynamicsData.sldd data dictionary defines WindDownRate.
windRateParam = getEntry(dDataSectObj,"WindDownRate");Run the simulation with wind down rates of 10, 20, and 45 revolutions per second squared, and store the output of each simulation in the variables outTW10, outTW20, and outTW45, respectively.
setValue(windRateParam,10) outTW10 = sim(mdl); setValue(windRateParam,20) outTW20 = sim(mdl); setValue(windRateParam,45) outTW45 = sim(mdl);
Plot the simulation outputs to compare the altitude, pitch, tilt, and airspeed at each wind down rate by using the exampleHelperPlotTransitionResults function. The plot shows that the wind down rate has minimum impact to the altitude, pitch, and airspeed of the VTOL UAV. Thus, you can use the default value of the wind down rate of 10 revolutions per second squared.
tLayout=tiledlayout(4,1);
exampleHelperPlotTransitionResults(tLayout,outTW10)
exampleHelperPlotTransitionResults(tLayout,outTW20)
exampleHelperPlotTransitionResults(tLayout,outTW45)
leg=legend({"Wind Down 10 rev/sec2","Wind Down 20 rev/sec2","Wind Down 45 rev/sec2"});
leg.Layout.Tile="north";
Simulate Full Mission
Run the full transition guidance mission with the transition controller parameters that you have obtained.
Set the tilt schedule rate to 15 degrees per second.
setValue(tiltRateParam,deg2rad(15))
Set the critical tilt angle to 60 degrees.
setValue(criticalAngleParam,deg2rad(60))
Set the wind down rate to 10 revolutions per second squared.
setValue(windRateParam,10)
Set up the transition guidance mission with the tuned transition parameters.
setupTransitionGuidanceMission
Enabled transition guidance mission.
Run the simulation.
out = sim(mdl);

Before proceeding to other examples in this example series, you must close the VTOLRefApp.prj Simulink project by running this command in the Command Window:
close(prj)
References
[1] Pavan, N. “Design of Tiltrotor VTOL and Development of Simulink Environment for Flight Simulations.” Indian Institute of Space Science and Technology, 2020
[2] Mathur, Akshay, and Ella M. Atkins. “Design, Modeling and Hybrid Control of a QuadPlane.” Paper presented at AIAA Scitech 2021 Forum, VIRTUAL EVENT. AIAA Scitech 2021 Forum, American Institute of Aeronautics and Astronautics, January 11, 2021. https://doi.org/10.2514/6.2021-0374.
[3] Ducard, Guillaume, and Minh-Duc Hua. “Modeling of an Unmanned Hybrid Aerial Vehicle.” 2014 IEEE Conference on Control Applications (CCA), IEEE, October 2014, 1011–16. https://doi.org/10.1109/CCA.2014.6981467.