Skip to content

12. Single-stage orbital insertion in polar coordinates

Reaching orbit requires more than altitude: a vehicle also needs enough horizontal speed to keep falling around Earth. How should thrust turn from upward to horizontal to deliver the greatest mass to orbit?

ItemDefinition
StatesRadius RR, angle θ\theta, radial and tangential velocities Vr,VtV_r,V_t, mass mm
ControlsRadial and tangential thrust Tr,TtT_r,T_t
ObjectiveMaximize final mass
PhasesOne phase, 30 nodes, free final time
New conceptsPolar dynamics, two thrust components, multiple path constraints

A 100 t rocket starts at rest and must enter a 400 km circular orbit. At arrival it needs the target altitude, zero radial velocity, and circular speed about 7.67 km/s. The dry vehicle is 1 t and propellant accounts for 99% of initial mass. Maximizing final mass measures how much propellant can remain. Earth rotation is neglected. Thrust and the acceleration felt by the vehicle are limited.

  • RR is distance from Earth’s center; altitude is h=R−Reh=R-R_e.
  • θ\theta is angular distance from the launch site; downrange distance is ReθR_e\theta.
  • VrV_r is outward radial (vertical) velocity; VtV_t is tangential (local horizontal) velocity.
  • Tr,TtT_r,T_t are thrust components. Magnitude is ∣T∣=Tr2+Tt2|T|=\sqrt{T_r^2+T_t^2} and elevation is arctan⁡(Tr/Tt)\arctan(T_r/T_t) in this nonnegative quadrant.

Components avoid introducing a steering angle that becomes undefined at zero thrust and adds trigonometric nonlinearities.

R˙=Vr,θ˙=Vt/R,V˙r=(Tr−Dr)/m−μ/R2+Vt2/R,V˙t=(Tt−Dt)/m−VrVt/R,m˙=−Tr2+Tt2/(g0Isp).\begin{aligned} \dot R&=V_r, &\dot\theta&=V_t/R,\\ \dot V_r&=(T_r-D_r)/m-\mu/R^2+V_t^2/R,\\ \dot V_t&=(T_t-D_t)/m-V_rV_t/R,\\ \dot m&=-\sqrt{T_r^2+T_t^2}/(g_0I_{sp}). \end{aligned}

The centrifugal term Vt2/RV_t^2/R balances gravity on a circular orbit. The term −VrVt/R-V_rV_t/R expresses conservation of angular momentum: without tangential force, RVtRV_t stays constant as radius changes.

V=Vr2+Vt2,Dr=12ρ(h)VrVCDA,Dt=12ρ(h)VtVCDA,V=\sqrt{V_r^2+V_t^2},\qquad D_r=\tfrac12\rho(h)V_rVC_DA,\qquad D_t=\tfrac12\rho(h)V_tVC_DA, ρ(h)=1.225e−h/8500,g(R)=μ/R2.\rho(h)=1.225e^{-h/8500},\qquad g(R)=\mu/R^2.

Drag opposes velocity. The same gravitational parameter μ\mu is used for the dynamics and target circular speed.

R(0)=Re,θ(0)=0,Vr(0)=Vt(0)=0,m(0)=100 t,R(tf)=Re+400 km,Vr(tf)=0,Vt(tf)=μ/R(tf).\begin{aligned} R(0)&=R_e,&\theta(0)&=0,&V_r(0)&=V_t(0)=0,&m(0)&=100\ \mathrm t,\\ R(t_f)&=R_e+400\ \mathrm{km},&V_r(t_f)&=0,&V_t(t_f)&=\sqrt{\mu/R(t_f)}. \end{aligned}

Target speed is about 7672.6 m/s. Final angle and time are free.

R≥Re,0≤Tr,Tt≤Tmax⁡,Tr2+Tt2≤Tmax⁡,1 t≤m≤100 t,∣T−Dm∣≤8g0.\begin{aligned} R&\ge R_e,\\ 0&\le T_r,T_t\le T_{\max},\\ \sqrt{T_r^2+T_t^2}&\le T_{\max},\\ 1\ \mathrm t&\le m\le100\ \mathrm t,\\ \left|\frac{\boldsymbol T-\boldsymbol D}{m}\right|&\le8g_0. \end{aligned}

Thrust cannot point downward or backward. Its magnitude is limited to 1.5 times initial weight, about 1471 kN. The 8 G limit is non-gravitational acceleration, as measured by an accelerometer. All constraints apply at nodes.

J=−m(tf)/m(0).J=-m(t_f)/m(0).
ParameterValue
ReR_e6371 km
g0g_09.80665 m/s²
μ\mu3.986×10143.986\times10^{14} m³/s²
Initial / dry mass100 t / 1 t
CD,AC_D,A0.6, 4 m²
IspI_{sp}300 s
Thrust-to-weight ratio1.5
Acceleration limit8 G

Scale radius by ReR_e, speed by μ/Re\sqrt{\mu/R_e}, and mass by initial mass (scaling).

Use time 0 to 200 s. Radius rises cubically to the target, angle rises cubically to 25°, radial velocity is zero, and tangential velocity grows linearly to target speed. Mass decreases cubically from 100 t to 1 t. Both thrust components decrease cubically from Tmax⁡/2T_{\max}/2 to zero.

Final altitude is 400.0 km (target 400.0 km), and speed is 7,672.6 m/s (target 7,672.6 m/s).

Altitude versus downrange distance, with altitude exaggerated. Dots are nodes; orange arrows show thrust direction and relative magnitude at selected powered nodes.
Altitude versus downrange distance, with altitude exaggerated. Dots are nodes; orange arrows show thrust direction and relative magnitude at selected powered nodes.
Altitude, tangential and radial velocity, mass, thrust magnitude, thrust elevation, and non-gravitational acceleration. Elevation is hidden when the engine is off; red lines mark thrust and acceleration limits.
Altitude, tangential and radial velocity, mass, thrust magnitude, thrust elevation, and non-gravitational acceleration. Elevation is hidden when the engine is off; red lines mark thrust and acceleration limits.
Ascent beside velocity, thrust magnitude, and elevation histories. Coasting is played faster.
  • The first burn ends around 263 s.
  • After coasting upward, a second burn from about 886 to 901 s circularizes the orbit.
  • Final mass is 4,370 kg, about 4% of initial mass: 1 t of structure plus remaining propellant.
  • Insertion occurs 5,105 km downrange.
  • Maximum node acceleration is 8.00 G, below the inactive 8 G limit.

Thrust starts nearly upward, around 80°, then turns toward horizontal. Early climbing escapes dense air and drag. Turning too late wastes propellant against gravity. The optimum balances these effects, resembling a gravity turn.

The first burn creates a trajectory with apogee near 400 km. Coasting raises altitude without consuming propellant. A final horizontal burn at apogee creates the circular orbit, similar to a Hohmann transfer. Tangential speed decreases during the outward coast because angular momentum is conserved.

Constraints hold at nodes; interpolating curves may exceed limits between them. A single polynomial spans both engine switches, so fine details depend on the node count (multiple phases, checking results).

  • Change the 30 nodes or the 200 s time guess and compare convergence and final mass.
  • Lower MaxG from 8 to 4 and inspect throttling when the acceleration constraint becomes active.
  • Change Htarget to 300 or 600 km and compare coast duration and final mass.
Terminal window
uv run python examples/12_rocket_ascent_polar_ssto.py

View the Python source on GitHub.