pub fn tumbling(
devices: Vec<Device>,
rocket: &Rocket,
assembly: &Assembly,
separations: &[Separation],
) -> Result<Vec<Device>, RecoveryRefused>Expand description
devices with a tumble added for each part of separations that needs one: the flight flies
a separated part as a point with no airframe drag of its own, so each part must have a device
open from the moment it flies alone (hpr_sim::Simulation::with_separations).
- Each dropped part, body
k + 1for separationk(the booster first), tumbles from its split (DeviceDrag::tumbling_stagesover its stages), until the first of its own devices, in list order, opens: that device releases the tumble, so a part under its parachute has the parachute’s drag alone, as OpenRocket flies a descent (its technical documentation v13.05, §4.2.5). - The sustainer, body 0, flies on as a rigid body with its own aerodynamics. Only when no device rides it is a tumble from its apogee added, so that it has a descent.
- The part that keeps the nose after a lone separation with nothing ahead of it left to
burn (
Separation::powered_at) flies on as a point too, from the split. A device of its own must be open by then, one whose trigger’s time, known before the flight, is at or before the split’s: else it would coast with no drag, and it is refused rather than tumbled, as nothing says how a part with no fins flies on its own (ADR-165).
The tumbles go after devices, so each device keeps its index. Each is named after its part’s
first stage, such as “Booster, tumbling”, or, for a stage with no name, “sustainer”,
“booster” or “stage 2” (counted from the nose’s, 1).
§Errors
RecoveryRefused::Tumbling when DeviceDrag::tumbling_stages refuses a part’s stages,
such as a part with tube fins, or more than eight fins in a set; RecoveryRefused::Coasts
when the part that keeps the nose would coast.