Revisiting an older quadcopter video

I made the video below while trying to understand how four rotor speeds become lift, yaw, pitch, roll, and eventually motion through space. This written version gives me room to slow down the explanation, redraw the important relationships, and correct a notation mistake that viewers caught in the original video.

A quadcopter looks mechanically simple: four motors, four propellers, a frame, a battery, and a controller. The interesting part begins when I try to describe it mathematically. The motors create rotor speed. Rotor speed produces thrust and reaction torque. Those forces rotate and accelerate the body, while the controller keeps measuring the result and adjusting the motors again.

I am not trying to derive a complete production flight controller in one article. I want to follow the forward path carefully: given four rotor speeds, what forces and torques do they create, and how do those become motion?

Diagram showing motor commands becoming rotor speed, thrust and drag, body motion, and world state, with sensor feedback returning to the controller.
This is the complete loop at a useful level of abstraction. The article follows the top row from motor command to motion; state estimation and control close the loop afterward.

One correction before the math

A few viewers correctly pointed out that I used the word acceleration in places where the equations contained velocity. A single dot above a variable means velocity or rate, not acceleration. So \(\dot{x}\), \(\dot{y}\), and \(\dot{z}\) are translational velocities. \(\dot{\phi}\), \(\dot{\theta}\), and \(\dot{\psi}\) are angular rates. Acceleration would use double-dot notation: \(\ddot{x}\), \(\ddot{y}\), \(\ddot{z}\), etc.

Similarly, \(\omega\) is angular velocity. Angular acceleration is usually written as \(\dot{\omega}\). When kinetic energy uses \(v^2\) or \(\omega^2\), that is velocity squared or angular velocity squared, not acceleration. The formulas in the energy section are intended to use velocities; my verbal explanation called them accelerations in a few places, which was wrong.

Starting With Four Rotor Speeds

Each rotor produces thrust along the vehicle's vertical body axis. If all four produce the right total thrust, the vehicle can hover. Increasing them together makes it climb. Changing one side relative to the other creates roll or pitch. Changing one rotation-direction pair relative to the other creates yaw.

Top-view quadcopter diagram showing how four rotor-speed combinations create climb, yaw, pitch, and roll.
One possible motor numbering and spin convention. The exact signs can change, but the physical idea remains the same: collective speed controls total thrust, while differences create torque.

The first important design fact is rotation direction. A typical quadcopter uses two clockwise rotors and two counterclockwise rotors. If all four rotors spun in the same direction, the airframe would experience a strong reaction torque and would tend to rotate in the opposite direction. By pairing clockwise and counterclockwise rotors, the reaction torques can cancel during hover. When we intentionally unbalance those pairs, the vehicle yaws.

Motion Intuitive control idea What changes?
Hover / climb / descend Change total thrust Increase or decrease all four rotor speeds together
Yaw Change net reaction torque around the vertical axis Speed up one rotation pair relative to the opposite pair
Pitch Tilt forward or backward Create a thrust imbalance between front and rear rotors
Roll Tilt left or right Create a thrust imbalance between left and right rotors

Before The Equations, I Need To Label Everything

Before writing equations, it helps to define the coordinate frame and motor naming convention. A large amount of confusion in quadcopter modeling comes from mixing coordinate systems or changing motor numbering halfway through the derivation. A clean model starts with three explicit choices.

  1. Choose the body frame. Decide which direction is body \(x\), body \(y\), and body \(z\).
  2. Choose the rotor layout. Decide whether the vehicle is modelled as an X configuration or a plus configuration.
  3. Label the motors. Decide which rotor is \(M_1\), \(M_2\), \(M_3\), and \(M_4\), and record whether each spins clockwise or counterclockwise.

This looks like bookkeeping, but most sign mistakes begin here. For a plus configuration, one rotor may sit directly on the forward axis. For an X configuration, the vehicle direction lies between two rotor arms. The control mixing equations change depending on that geometry. The same physical vehicle can be described in either style, but the math must be internally consistent.

Hover Is The Simplest Place To Start

Hover is the simplest physical condition. The total upward thrust produced by the four rotors must equal the weight of the quadcopter. If the total thrust is smaller than weight, the vehicle descends. If the total thrust is larger than weight, it accelerates upward.

\[ u = \sum_{i=1}^{4} T_i \]

\(u\) is total thrust and \(T_i\) is the thrust from rotor \(i\). In ideal hover, \(u = mg\).

\[ \vec{F}_{body} = \begin{bmatrix} 0 \\ 0 \\ u \end{bmatrix} \]

In the body frame, the ideal rotor thrust vector points along the vehicle's vertical thrust axis.

This is also where I make the first large simplification. In the early model, I pretend motor command maps cleanly to thrust. In a real vehicle, motor electrical input becomes shaft rotation, shaft rotation drives the propeller, the propeller accelerates air, and aerodynamic conditions determine how much thrust is actually produced. That propeller layer is not free. It depends on blade geometry, air density, propeller speed, inflow, and drag.

How The Rotor Pairs Create Yaw

Every spinning rotor produces reaction torque. If rotor \(M_1\) spins clockwise, the airframe feels an equal and opposite reaction. Pairing clockwise and counterclockwise rotors lets those reaction torques cancel in steady hover. To yaw, the controller deliberately breaks that cancellation.

In one common simplified form, yaw torque is proportional to a signed combination of squared rotor angular velocities:

\[ \tau_{\psi} = k_{\tau} \left( \omega_1^2 + \omega_3^2 - \omega_2^2 - \omega_4^2 \right) \]

The exact signs depend on the motor numbering and spin-direction convention. The key idea is that yaw comes from unbalanced reaction torque between opposite spin pairs.

This is where one of the YouTube comments was exactly right. \(\omega\) is angular velocity. The squared term \(\omega^2\) appears because many rotor thrust and drag approximations scale with angular speed squared. It is not angular acceleration. If the rotor is accelerating or decelerating, that would involve \(\dot{\omega}\).

Pitch And Roll Turn Upward Thrust Sideways

A quadcopter does not usually move sideways by producing a direct sideways thrust vector from the motors. It tilts. When the vehicle pitches forward, part of the thrust vector points forward. When it rolls left or right, part of the thrust vector points sideways. This is why the quadcopter is underactuated: we want six degrees of motion, but the direct controls are the four rotor speeds.

A simplified torque model uses the arm length \(l\), the distance from the center of mass to each rotor. The further a rotor is from the center of mass, the more torque it can generate for the same thrust difference.

\[ \tau_{\phi} \approx l(T_{right} - T_{left}) \qquad \tau_{\theta} \approx l(T_{front} - T_{rear}) \]

This is a conceptual form. The exact motor grouping depends on whether the frame is X configuration or plus configuration.

The relationship I keep in mind is: thrust imbalance creates torque, torque changes attitude, attitude changes the direction of the total thrust vector, and that produces horizontal motion. This is why motor mixing matters so much. The controller is not directly commanding "move left" as a simple translation. It is commanding rotor speed changes that create the attitude needed to move left.

The Propeller Is Doing More Than This Model Shows

Propeller used in the quadcopter presentation.
The propeller is not a decorative part of the model. It is where motor rotation becomes air momentum and thrust.

The video intentionally kept the propeller model simple, but it also pointed out that this simplification hides a lot. The motor does not magically create thrust. Electrical energy becomes mechanical rotation. Mechanical rotation becomes aerodynamic work on the air. The propeller geometry decides how efficiently that rotation becomes thrust.

A very simple drag relationship starts from the dynamic pressure style term:

\[ \tau_{drag} \propto \frac{1}{2}\rho A V^2 \]

\(\rho\) is air density, \(A\) is a reference area, and \(V\) is a characteristic blade speed.

For a point on a rotating blade:

\[ V = \omega r \]

Linear speed increases with radius. A blade tip moves much faster than a point close to the hub.

Substituting rotational speed into the drag approximation produces the common idea that rotor drag and thrust-like terms scale with \(\omega^2\), with constants absorbing geometry and air-density terms:

\[ \tau_{drag} = k_{drag}\omega^2 \]

\(k_{drag}\) is not universal. It depends on propeller geometry, air density, and the modeling assumptions.

Propeller design therefore deserves its own discussion. Blade element theory and momentum theory try to model how different blade sections interact with airflow. For now I can treat thrust coefficients as constants. A more useful physical model eventually has to measure or calculate the rotor and propeller behavior more carefully.

Where Velocity Enters The Energy Model

In the video, I introduced the generalized velocity vector using translational velocities and angular rates. This is exactly where the dot-notation correction matters. The vector below is a velocity/rate vector. It is not an acceleration vector.

\[ \dot{q} = \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{z} \\ \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix} = \begin{bmatrix} u \\ v \\ w \\ p \\ q \\ r \end{bmatrix} \]

\(u,v,w\) are body-frame translational velocities. \(p,q,r\) are body-frame angular rates.

One way to organize the dynamics is through the Lagrangian:

\[ L = T - V \]

The Lagrangian is kinetic energy minus potential energy.

A simplified quadcopter energy model can be written as:

\[ L(\dot{q}, q) = \frac{1}{2}m(u^2 + v^2 + w^2) + \frac{1}{2}I_{xx}p^2 + \frac{1}{2}I_{yy}q^2 + \frac{1}{2}I_{zz}r^2 - mgz \]

The first term is translational kinetic energy, the next three terms are rotational kinetic energy, and \(mgz\) is gravitational potential energy.

Notice the squared terms. Kinetic energy uses velocity squared. That is why the single-dot notation and angular-rate notation must be interpreted correctly. If we accidentally call these accelerations, the physical meaning breaks.

Turning Body-Frame Thrust Into Motion In The World

The quadcopter has a body frame, but the world has an inertial frame. To understand where thrust points in the world, we need to know the vehicle's attitude: how the body frame is rotated relative to the inertial frame. Euler angles describe this orientation using roll \(\phi\), pitch \(\theta\), and yaw \(\psi\).

\[ R = \begin{bmatrix} \cos\theta\cos\psi & \sin\phi\sin\theta\cos\psi - \cos\phi\sin\psi & \cos\phi\sin\theta\cos\psi + \sin\phi\sin\psi \\ \cos\theta\sin\psi & \sin\phi\sin\theta\sin\psi + \cos\phi\cos\psi & \cos\phi\sin\theta\sin\psi - \sin\phi\cos\psi \\ -\sin\theta & \sin\phi\cos\theta & \cos\phi\cos\theta \end{bmatrix} \]

One common Euler-angle rotation matrix. The exact convention depends on rotation order and frame convention.

Rotation matrices are powerful, but they can feel unintuitive at first because they compress geometry into algebra. The practical question is: if the quadcopter is tilted, where does its thrust vector point in the inertial frame? That mapping is what the rotation matrix gives us.

Euler angles are not the only representation. Quaternions are often preferred in flight-control systems because they avoid gimbal lock and behave better numerically. Direction cosine matrices are another option. For a beginner model, Euler angles are easier to visualize. For the later flight-controller work, I use quaternions and independently compare their physical rotations against SciPy. I explained the underlying geometry in Quaternions, Axis-Angle, And Vector Rotation.

The Order I Would Build This Model Today

If I were turning this video into a clean modeling checklist, I would write it like this:

  1. Define the inertial frame and body frame.
  2. Choose X configuration or plus configuration.
  3. Label motors \(M_1\) through \(M_4\).
  4. Record each motor's spin direction.
  5. Define rotor thrust \(T_i\) as a function of rotor speed \(\omega_i\).
  6. Define total thrust \(u = \sum_i T_i\).
  7. Define roll, pitch, and yaw torques from thrust and reaction-torque imbalances.
  8. Use attitude representation to map body thrust into inertial motion.
  9. Add rotor drag, propeller model, and motor dynamics as the model becomes more realistic.
  10. Only then move toward control design, simulation, and experiments.

What I Would Change In The Original Video

I would slow down the transition from rotor speed to thrust, define the coordinate frames before writing any torque equations, and be much more careful with velocity and acceleration language. I would also draw the complete chain from motor command to world motion near the beginning instead of asking the viewer to assemble it gradually from equations.

I am leaving the original video in place because it shows where my understanding was at the time. This article is the updated version: the notation is corrected, the diagrams are clearer, and the comments become part of the record rather than disappearing below an old video.

Related Flight-Control Work