Differential thrust

Wed 27 July 2022
Differential thrust (Photo credit: GE)

Principle overview

The basic principle is to create a torque offsetting the total thrust. This offset is done by throttling thrust of multiple engines whose thrust is not align with gravity center.

On the drawing, the thrust is aligned with CG for the left engine and not for the right one. If both engines were mounted like the right one, torque produced by all engine would cancelled out.

Basic torque illustration

Note that some rockets (Ariane 4, Long March 5B,...) have there engines mounted like the left one, partially to minimize torque in case of engine out capability.

Mathematical approach

This section sum up what I think is true and is not based on any sources.

Torque authority is maximal when one engine is at its minimal power setting and the opposite one is at its maximal power setting. But, in this case, the total thrust is not modular.

For the following of this article, let's note:

  • \(T \in [0, 1]\): setpoint value for thrust level
  • \(D \in [-1, 1]\): setpoint value for direction (from full left (-1) to full right (+1))
  • \(F_l\) (resp. \(F_r\)) : setpoint for thrust for left (resp. right) engine.
  • \(T_{min} (\in [0, 1])\): minimal thrust achievable (hopefully low)
  • \(T_{max} = 1\): maximal thrust

Those conventions are made without loss of generality over possible thrusts values (simple multiplication by rated thrust)

Without any limitation, thrust would be:

\begin{align*} F_l = T + D\\ F_r = T - D \end{align*}

But in real life, it would look like:

\begin{align*} F_l = \max(\min(T + D, T_{max}), T_{min})\\ F_r = \max(\min(T - D, T_{max}), T_{min}) \end{align*}

Now let's go to python implementation and let's consider functions taking as input direction and thrust setpoint values.

T_MAX = 1
T_MIN = .1

def basic_thrust(d, t):
    fl = max(min(t + d, T_MAX), T_MIN)
    fr = max(min(t - d, T_MAX), T_MIN)
    return fl, fr

And now let's consider both cases where direction authority is prioritized (modulate thrust to allow the required thrust difference) and where thrust authority is prioritized (modulate thrust to have the required total thrust even if difference between both engines is low). At least one engine's thrust will be modulate to achieve direction (resp. thrust) setpoint value, i.e. have the required thrust difference (resp. total thrust).

T_MAX = 1
T_MIN = .1

def thrust_priority(d, t):
    fl = t + d
    fr = t - d

    # ensure fr + fl = 2 * t
    if fl > T_MAX:
        fl = T_MAX
        fr = T_MAX * (1 - t / 2)

    elif fr > T_MAX:
        fl = T_MAX
        fl = T_MAX * (1 - t / 2)

    elif fl < T_MIN:
        fl = T_MIN
        fr = max(T_MIN, t / 2)

    elif fr < T_MIN:
        fr = T_MIN
        fl = max(T_MIN, t / 2)

    return fl, fr

def direction_priority(d, t):
    fl = t + d
    fr = t - d

    # ensure abs(fl - fr) = 2 * d
    if fl > T_MAX:
        fl = T_MAX
        fr = max(T_MIN, T_MAX - 2 * d)
    elif fr > T_MAX:
        fr = T_MAX
        fl = max(T_MIN, T_MAX - 2 * d)
    elif fl < T_MIN:
        fl = T_MIN
        fr = min(T_MAX, T_MIN + 2 * d)
    elif fr < T_MIN:
        fr = T_MIN
        fl = min(T_MAX, T_MIN + 2 * d)

    return fl, fr

Real life example

The differential thrust mechanism to control direction (roll, pitch) has been used in real life. The most famous example is the soviet rocket N-1. Using this on the first stage is courageous as usually this stage require full thrust during the first part of its flight, leaving almost no thrust marge for direction authority. This is even more surprising as liquid propellant rocket engines with preburner or gas generator <https://en.wikipedia.org/wiki/NK-33c>_ takes time to throttle (time to change velocity of heavy turbines).

Another more mature example is the Space X crew dragon escape system's engines. The goal here is to control the orientation of the capsule during emergency separation event. Given the aerodynamic provided by the trunk, this application seems less critical than the N-1 rocket. Moreover, the pressure fed engines are more reactive.

Also it may not be obvious, this kind of reasoning is also applicable to differential braking (e.g. for taxiing a DC-3) and to flight control surfaces for which bot sides obey both a simultaneous deflection and a differential one. I thin of flaperon (flap setpoint for \(t\), aileron setpoint for \(d\)) and of spoilers when used both for airbrake function (setpoint for \(t\)) and roll function (setpoint for \(d\))

Category: aviation Tagged: aviation Fight dynamics rocket science

Voting method reflections

Fri 28 January 2022
Transparent voting box (Photo credit: Wikipedia)

This article presents personal thoughts on voting methods. More specifically, it presents guarantees offer by the traditional non-electronic voting method and won’t elaborate on electronic voting.


First, let’s define few specifications I’d like to develop.

  • any voter can understand how …

Category: reflections Tagged: geopolitics reflection vote

Read More

Mobile OS alternatives and european sovereignty

Tue 04 May 2021
Sailfish (not OS) (photo credit: wikipedia)

OS for mobile devices has evolved over the pasts years. Once, European actors (e.g. Nokia) were in lead position. Now it's hard to find non-android mobile OS. Each OS mobile comes with its software and hardware environements, and its geopolitical considerations.

Here is …

Category: tools Tagged: smartphone geopolitics

Read More

Cache implementation using weakref

Fri 30 April 2021
Bird's cache (Photo credit: Wikipedia)

This article presents a quick example of how to use weakref to implement a home-made cache mechanism.

Let's use the following use case:

  • Let's consider items:
    • items can be stored on a storage
    • items can be retrieved from storage
    • items are identify by an ID …

Category: how to Tagged: python cache weakref

Read More

Tkinter and Asyncio

Thu 18 February 2021
Asynchronous process results waiting (Photo credit: Wikipedia)

Graphical interfaces are typically the kind of object that can take advantage of asynchrounous programming as a GUI spend lot of time waiting for user input.

Tkinter <https://docs.python.org/3/library/tkinter.html#module-tkinter>_ is a kind of standard for graphical …

Category: how to Tagged: python asyncio

Read More

Latex generator using Jinja

Wed 11 November 2020
Kawasukune-jinja (Photo creadit: Wikipedia)

The goal is to generate a PDF file using python. I decided to generate \(\LaTeX\).


I decided to use jinja as its documentation mention it.

\begin{equation*} \boxed{\text{Jinja template}} \xrightarrow[\text{python}]{} \boxed{\LaTeX} \xrightarrow[\text{pdflatex}]{} \boxed{\text{PDF}} \end{equation*}

The …

Category: LaTeX Tagged: python LaTeX Jinja

Read More
Page 1 of 12

Next »