Controls research · First-author paper

Quadrotor Trajectory Tracking

A controller for multirotor position and attitude tracking. I took an existing SO(3) sliding-mode controller, which only converged asymptotically, and extended it so that every tracking error reaches zero in finite time. The results are from MATLAB/Simulink simulation. The paper was accepted to IFAC 2026.

Role
Research Assistant · First author
Advisor
Prof. Jen-te Yu
Builds on
C.-C. Chuang’s SO(3) controller (master’s thesis, 2025)
Methods
Sliding-mode control, logarithmic map of SO(3)
Validation
MATLAB/Simulink; also run in PX4 SITL
Status
Accepted to IFAC 2026

A multirotor moves by tilting its thrust. The position controller decides which way the thrust should point, and the attitude controller has to rotate the body there fast enough for the position loop to keep up. The attitude lives on SO(3), the group of 3D rotations, so ordinary vector errors do not describe it cleanly.

This project starts from a controller in Cheng-Che Chuang’s 2025 master’s thesis at CYCU. It measured attitude error with the logarithmic map of SO(3) and used integral terminal sliding surfaces. It was only asymptotically stable: the errors shrink toward zero with no guaranteed time to get there, and convergence was slow near equilibrium.

My goal was to keep the geometric attitude error and make position, velocity, attitude, and angular-velocity errors all reach zero in finite time.

Chuang had already graduated when I started, so I worked from his thesis. The finite-time extension was my own work, with guidance from my advisor, Prof. Jen-te Yu. Chuang is a co-author because the paper builds on his controller.

What I did

  • Derived the position (outer-loop) and attitude (inner-loop) control laws on a linear-nonlinear sliding surface.
  • Worked out the stability analysis: each sliding variable reaches zero in finite time, and from there each tracking error does too.
  • Built the MATLAB/Simulink simulation and ran the figure-eight tracking study.
  • Wrote the paper as first author. Accepted to IFAC 2026.

Beyond the paper

  • Ran the controller in PX4 software-in-the-loop simulation with Gazebo and ROS 2. It tracked the trajectory there as well. This run is not part of the paper.

What this builds on

  • Chuang’s SO(3) controller: logarithmic attitude error with integral terminal sliding surfaces.
  • The linear-nonlinear finite-time sliding structure introduced by Yogi et al. (2021).

Two loops run in cascade. The outer loop turns the desired trajectory into a thrust vector, and that vector sets the reference attitude. The inner loop drives the body to that attitude on SO(3) and outputs a torque command.

Geometric attitude error and finite-time sliding surfaceeR = LOG(RTRref)   ·   sR = β2ėR + eR + eRα₂

Two terms

Each sliding surface has a linear term and a fractional-exponent term, with 0 < α < 1. When the error is large, the linear term dominates and the error decays smoothly. Near zero, the fractional term dominates and brings the error the rest of the way in finite time. The position loop uses the same form: sp = β1ev + ex + exα₁.

Log map

LOG turns the rotation error RTRref into a 3-vector, so the sliding surface can treat attitude error like any other vector error. Because SO(3) is curved, the rate of eR is not the angular-velocity error itself. It is that error multiplied by the inverse left Jacobian, and the torque law accounts for this.

Thrust link

The design assumes the motors produce the commanded thrust magnitude immediately, so only the thrust direction has to be tracked. The inner loop’s job is to line up the body z-axis with the direction the outer loop asks for.

The paper’s results come from MATLAB/Simulink with the nominal model: no wind, no sensor noise, no parameter error. The reference is a figure-eight with a slow change in altitude, run for 20 seconds. The vehicle starts about 10 m from the reference on each axis, so every error starts large.

Simulation parameters (Table 1 in the paper)
ParameterValue
Mass m2 kg
Inertia Jdiag(0.03, 0.03, 0.05) kg·m²
Outer-loop gainsβ1 = 0.8, α1 = 0.6, ε1 = 0.6
Inner-loop gainsβ2 = 0.4, α2 = 0.6, ε2 = 0.6
Referencexref(t) = [25 sin(0.32t) cos(0.32t), 25 sin(0.32t), −10 − 1.5 sin(0.1t)] m
Duration20 s, nominal dynamics
Two plots of the figure-eight trajectory. Left, top view in x and y from minus 50 to 50 meters: the dashed reference and the solid vehicle path overlap after a short approach from the vehicle's start point near x equals minus 10, y equals 10. Right, a 3D view showing the vehicle descending from its start point and joining the reference loop.
Figure-eight tracking, top view and 3D view. Dashed: reference. Solid: vehicle. The vehicle starts away from the reference and joins it.
Two plots over 20 seconds. Left, position error in x, y, and z: starting near minus 10, 10, and 10 meters, all three reach zero, x last at about 8 seconds. Right, velocity error in x, y, and z: peaks of about 7 and minus 11 meters per second in the first second, then all three settle at zero.
Position error (left) and velocity error (right). Position errors start near 10 m and are close to zero by about 8 s.
Two plots over 20 seconds. Left, the three components of the logarithmic attitude error, starting between about minus 1.3 and 1.25 radians and reaching zero by about 2.5 seconds. Right, angular-velocity error components, within about plus or minus 2 radians per second, also settling at zero by about 2.5 seconds.
Attitude error from the logarithmic map (left) and angular-velocity error (right). Both settle within about 2.5 s.
Two plots over 20 seconds. Left, thrust components in x, y, and z, with large swings in the first second and then smooth variation within about plus or minus 12 newtons as the vehicle follows the figure-eight. Right, torque components, with a short spike at the start and near 2 seconds, then close to zero.
Thrust (left) and torque (right) commands from the two loops.

In the paper, all four error signals reach zero in finite time and stay there for the rest of the run.

Separately from the paper, I ran the controller in PX4 software-in-the-loop simulation with Gazebo and ROS 2, and it tracked the trajectory.

The paper was accepted to IFAC 2026, with me as first author. It gives a cascaded controller in which position and attitude errors both reach zero in finite time while the attitude error stays on SO(3).

Nominal model only

The paper models no wind, sensor noise, or parameter error. The results show finite-time convergence for that model, not robustness to disturbances.

Simulation only

Results are from MATLAB/Simulink, plus the PX4 software-in-the-loop run. The controller has not been flown on a physical vehicle.

Ideal thrust

The design assumes the motors deliver the commanded thrust magnitude instantly. Motor and ESC lag are not modeled.