Skip to main content

Thrust Model

The thrust system in Moonlander is modeled as a first-order dynamic system. The actual thrust approaches the target thrust exponentially, with a time constant representing the engine's response delay.

Assumptions:

The engine cannot change its thrust instantaneously. Instead, it behaves like a first-order system (PT1 / first-order lag) with time constant τ\tau.

This model class is the same as:
- RC circuits
- Thermal inertia
- Motor spin-up dynamics
- Low-pass filters

Physical / System Formulation:

The rate of change of thrust is proportional to the difference between commanded and actual thrust:

F˙(FcmdF)\dot{F} \propto (F_{cmd} - F)
Introducing the proportionality constant 1τ\frac{1}{\tau}:
F˙=1τ(FcmdF)\dot{F} = \frac{1}{\tau} (F_{cmd} - F)

Interpretation:
- FcmdF_{cmd}: commanded thrust [N]
- FF: actual thrust [N]
- τ\tau: engine response time / inertia [s]
Limited cases:
- τ0\tau \rightarrow 0: instantaneous response
- Large τ\tau: slow engine response

Discrete Form (from ODE)
Start from:

F˙=(FcmdF)τ\dot{F} = \frac{(F_{cmd} - F)}{\tau}
Assuming FcmdF_{cmd} is constant over a timestep Δt\Delta t, the solution is:
F(t+Δt)=F(t)eΔt/τ+Fcmd(1eΔt/τ)F(t + \Delta t) = F(t) e^{-\Delta t / \tau} + F_{cmd} (1 - e^{-\Delta t / \tau})
Rearranged:
Fk+1=Fk+(1eΔt/τ)(Fcmd,kFk)F_{k + 1} = F_k + (1 - e^{-\Delta t / \tau})(F_{cmd, k} - F_k)


Step-by-Step Solution of the Differential Equation

We solve the first-order ODE:

F˙=FcmdFτ\dot{F} = \frac{F_{cmd} - F}{\tau}

Step 1: Rearrange
Bring into standard linear form:

F˙+1τF=Fcmdτ\dot{F} + \frac{1}{\tau} F = \frac{F_{cmd}}{\tau}
Denote:
a=1τ,b=Fcmdτa = \frac{1}{\tau}, \quad b = \frac{F_{cmd}}{\tau}

Step 2: Homogeneous Solution
Solve

F˙h+aFh=0\dot{F}_h + a F_h = 0
Using exponential ansatz:
Fh(t)=Ceat=Cet/τF_h(t) = C e^{-a t} = C e^{-t/\tau}

Step 3: Particular Solution
Since the forcing term is constant, try Fp=kF_p = k.
Substitute into ODE:

0+ak=b    k=Fcmd0 + a k = b \implies k = F_{cmd}

Step 4: General Solution

F(t)=Fh(t)+Fp=Cet/τ+FcmdF(t) = F_h(t) + F_p = C e^{-t/\tau} + F_{cmd}

Step 5: Apply Initial Condition
At t=0t = 0, F(0)=F0F(0) = F_0:

F0=C+Fcmd    C=F0FcmdF_0 = C + F_{cmd} \implies C = F_0 - F_{cmd}

Step 6: Evaluate at t + Δt

F(t+Δt)=(F0Fcmd)eΔt/τ+FcmdF(t + \Delta t) = (F_0 - F_{cmd}) e^{-\Delta t/\tau} + F_{cmd}
Expanding using F0=F(t)F_0 = F(t):
F(t+Δt)=F(t)eΔt/τ+Fcmd(1eΔt/τ)F(t + \Delta t) = F(t) e^{-\Delta t / \tau} + F_{cmd} (1 - e^{-\Delta t / \tau})

Step 7: Intuition
- The system always moves toward FcmdF_{cmd}.
- The speed of convergence is governed by τ\tau.
- Smaller τ\tau → faster response.
- Larger τ\tau → slower response.


Illustration

The figure below shows the thrust approaching the target over time.

Thrust response curve

Fuel Consumption

Specific impulse is defined as:

Isp=Fm˙g0I_{sp} = \frac{F}{\dot{m} g_0}
Where:
- IspI_{sp} : specific impulse [s]
- FF : thrust [N]
- g09.81g_0 \approx 9.81 : standard gravity [m/s²]

Solving for mass flow rate:

m˙=FIspg0\dot{m} = \frac{F}{I_{sp} g_0}
Fuel mass decreases:
m˙f=FIspg0\dot{m}_f = -\frac{F}{I_{sp} g_0}

Typical values for common engines:

Engine TypeFuel / PropellantIsp[s]I_{sp} \, [s]
Liquid RocketLOX/LH2450–465
Liquid RocketLOX/Kerosene300–350
Solid RocketHTPB / Black Powder200–300
Ion / ElectricXenon, Hall / Electrostatic1500–4000
Hybrid RocketHTPB + N₂O250–300

Key Points

  • First-order exponential response to target thrust
  • Real-time fuel consumption derived from thrust and specific impulse
  • Time step update allows smooth and stable simulation