Landing Gear Layout (vehicle-design/sizing/landing-gear-layout)
Use when the task is laying out a tricycle landing gear arrangement
against the center-of-gravity envelope: the tipback angle at the aft CG
limit, the tail strike clearance angle at rotation about the main gear
contact, the lateral turnover angle from the wheel track, and the nose
gear static load fraction band across the CG travel, closing with the
main gear position check that gates the configuration. This leaf
implements the arrangement geometry with deterministic stdlib
trigonometry and statics, with fixed rotation and station conventions so
the outputs are reproducible. It pairs with
vehicle-design/sizing/landing-gear-sizing, which sizes the strut loads
and landing energy once the layout is fixed, and takes the CG travel
limits as given inputs from
vehicle-design/mass-properties/cg-envelope.
Domain quick reference
Pinned conventions: stations x are measured in metres aft of a fuselage
datum, the ground plane is z = 0 at the tire contacts with the static
deflection, rotations are nose-up about the main gear contact point,
and all angles are returned in degrees. The aircraft is level on the
ground in the reference attitude, and the aft CG limit sits forward of
the main gear contact by the margin d = x_mg - x_cg_aft.
- Tipback angle: rotating nose-up about the main gear contact by the
tipback angle brings the aft CG onto the vertical through the
contact; beyond that attitude the vertical CG line passes aft of the
contact and gravity rolls the aircraft onto its tail. The rotation
obeys tan(theta_tip) = (x_mg - x_cg_aft) / h_cg, so theta_tip =
atan((x_mg - x_cg_aft) / h_cg). The angle grows with the aft-CG
margin and vanishes when the aft CG reaches the contact station.
This is the standard tipback check from common conceptual design
methodology (name and paraphrase only).
- Tail strike clearance: the tail cone lowest point at station x_tail
and height h_tail_contact above the ground descends during the
rotation as z(theta) = h_tail_contact * cos(theta) -
a * sin(theta) with the horizontal arm a = x_tail - x_mg, which
vanishes at tan(theta_ts) = h_tail_contact / a. The rotation attitude
is tail-strike limited when theta_ts sits below the tipback angle,
the transport-typical ordering.
- Lateral turnover, main gear pair: rolling about the line joining the
two main gear contacts, tan(theta_lat) = h_cg / (track / 2) =
2 * h_cg / track.
- Lateral turnover, tricycle diagonal: rolling about the diagonal line
joining the nose gear contact and the nearer main gear contact, the
perpendicular ground-plane distance from the CG vertical to the
diagonal is d_perp = (x_cg - x_ng) * (track / 2) /
sqrt(wheelbase^2 + (track / 2)^2) with wheelbase = x_mg - x_ng, and
theta = atan(d_perp / h_cg). The diagonal arm is shorter than the
half track, so the tricycle angle is the lower, binding lateral
check at a forward CG.
- Nose gear static load fraction: the moment balance about the main
gear contact gives P_n / W = (x_mg - x_cg) / (x_mg - x_ng); the nose
gear carries more when the CG is forward, so the aft CG limit gives
the lower fraction and the forward CG limit the upper one. The
fraction is dimensionless and layout-level only; strut loads are
never computed here.
- Typical bands used by the verdicts: nose gear fraction 5-20 % of the
total weight (NOSE_FRACTION_MIN to NOSE_FRACTION_MAX), lateral
turnover 40-50 deg for transports, and ROTATION_REF_DEG = 10.0 deg
as the typical transport unstick rotation reference.
- FAR-25 and CS-25 frame the transport landing gear arrangement
context; the relations above are standard engineering methodology,
summary-only.
Workflow
- Fix the arrangement geometry: the nose gear station x_ng, the main
gear station x_mg, the tail cone lowest point station x_tail and
contact height h_tail_contact, the CG height h_cg, the main gear
wheel track, and the CG travel limits with the aft limit x_cg_aft
forward of x_mg (otherwise the module raises ValueError).
- Tipback angle check at the aft CG limit: run tipback_angle(h_cg,
x_mg, x_cg_aft) and read the nose-up rotation about the main gear
contact at which the aircraft would tip onto its tail.
- Tail strike clearance at rotation: run
tail_strike_clearance_angle(h_tail_contact, x_tail, x_mg) and
compare it with the tipback angle; when the tail strike angle sits
below the tipback angle the rotation attitude is tail-strike
limited. Reference ROTATION_REF_DEG for the rotation margin print.
- Lateral turnover checks from the wheel track: run
lateral_turnover_angle(h_cg, track) for the simplified main gear
pair check, then lateral_turnover_tricycle_angle(h_cg, x_cg, x_mg,
x_ng, track) at the forward CG limit for the nose-to-main diagonal
refinement, which binds when it sits below the main-pair value.
- Nose gear load fraction band across the CG travel: run
nose_gear_static_load_fraction(x_cg, x_mg, x_ng) at the forward and
aft CG limits and compare each limit fraction against
NOSE_FRACTION_MIN and NOSE_FRACTION_MAX for the band verdicts.
- Main gear position check and close: confirm both CG travel limits
sit inside the nose-to-main station pair with a positive aft
margin, carry the angles and the fraction band verdicts into the
layout gate, and run the deterministic contract test
scripts/test_landing_gear_layout.py.
Worked example
Transport-class aircraft: W = 60000 kg, wheelbase 15 m with the nose
gear at x_ng = 3 m and the main gear at x_mg = 18 m from the datum, CG
travel from the forward limit x_cg_fwd = 14 m to the aft limit
x_cg_aft = 16.5 m, CG height h_cg = 2.8 m, main gear track = 6.5 m,
tail cone lowest point at x_tail = 30 m at h_tail_contact = 3.5 m
above the ground.
- Nose fractions: fwd = (18 - 14) / 15 = 0.266667 (26.6667 %) and aft
= (18 - 16.5) / 15 = 0.1 (10.0 %); on the 60000 kg weight the nose
gear carries 16000 kg at the forward CG limit and 6000 kg at the aft
CG limit.
- Tipback angle: the aft CG sits d = 1.5 m forward of the main gear
contact, so theta_tip = atan(1.5 / 2.8) = 28.1786 deg
(tipback_angle(2.8, 18.0, 16.5)).
- Tail strike clearance: arm a = 12 m, theta_ts = atan(3.5 / 12) =
16.2602 deg (tail_strike_clearance_angle(3.5, 30.0, 18.0)), giving a
6.2602 deg margin against the 10.0 deg unstick rotation reference.
Tail strike precedes tipback (16.2602 < 28.1786), so rotation is
tail-strike limited, matching transport practice.
- Lateral turnover: the simplified main gear pair check gives
theta_lat = atan(2 * 2.8 / 6.5) = 40.7462 deg
(lateral_turnover_angle(2.8, 6.5)), inside the 40-50 deg transport
band. The tricycle diagonal check at the forward CG gives d_perp =
11 * 3.25 / sqrt(15^2 + 3.25^2) = 2.32908 m and theta =
atan(2.32908 / 2.8) = 39.7567 deg
(lateral_turnover_tricycle_angle(2.8, 14.0, 18.0, 3.0, 6.5)),
marginally below the main-pair value as the binding lateral case.
- Verdicts: the aft CG fraction of 10.0 % sits inside the 5-20 %
typical band (True); the forward CG fraction of 26.6667 % sits above
it (False) and flags the arrangement, because with the forward CG
limit 4 m ahead of the main gear the nose gear is over-weighted and
the main gear station or the forward CG limit must move before the
layout closes. The lateral turnover angle sits inside the 40-50 deg
band (True).
Verification
- Confirm tipback_angle(2.8, 18.0, 16.5) returns 28.1786 deg and that
doubling the aft-CG margin at fixed h_cg doubles tan(theta_tip).
- Confirm tail_strike_clearance_angle(3.5, 30.0, 18.0) returns
16.2602 deg and that the rotation margin against ROTATION_REF_DEG is
6.2602 deg.
- Confirm lateral_turnover_angle(2.8, 6.5) returns 40.7462 deg and
lateral_turnover_tricycle_angle(2.8, 14.0, 18.0, 3.0, 6.5) returns
39.7567 deg, below the main-pair value.
- Confirm nose_gear_static_load_fraction returns 0.266667 at the
forward CG limit and 0.1 at the aft CG limit, that the two fractions
complement the main gear share to 1, and that the aft CG limit sits
inside the 5-20 % typical band while the forward CG limit sits above
it.
- Confirm repeated calls return identical scalars and that every
non-positive height, non-positive track, aft CG limit at or behind
the main gear station, tail station at or forward of the main gear
station, and CG station outside the nose-to-main pair raises
ValueError rather than returning a plausible number.
Pitfalls
- Using the aft CG at or behind the main gear station: the nose gear
fraction goes to zero or negative and the tipback arrangement is
statically tipped; the logic raises ValueError on x_cg_aft >= x_mg.
- Reading the simplified main-pair lateral angle as the binding check:
the tricycle diagonal arm is shorter than the half track, so at a
forward CG the diagonal angle (39.7567 deg in the worked example)
sits below the main-pair value (40.7462 deg) and is the binding
lateral case.
- Taking the mid-wheelbase fraction as the band check: the nose gear
carries more when the CG is forward, so the band verdict must be
taken at the forward and aft CG limits, not at a single station.
- Treating the layout geometry as the strut load split: the nose
fraction here is dimensionless and layout-level only; the strut
loads and landing energy for a given wheelbase belong to
vehicle-design/sizing/landing-gear-sizing.
- Using exact float equality on computed sums: tan and atan round-trip
only to machine precision, so verification uses tolerances
(assertAlmostEqual with a delta or math.isclose).
Related leaves
- vehicle-design/sizing/landing-gear-sizing: the strut weight split
and landing energy demand for a given wheelbase once the layout is
fixed.
- vehicle-design/sizing/landing-gear-retraction-sizing: the retraction
mechanism sized after the arrangement exists.
- vehicle-design/sizing/tire-sizing: tire selection from the per-tire
load.
- vehicle-design/mass-properties/cg-envelope: the CG travel band from
longitudinal stability, taken as a given input here.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_landing_gear_layout.py
The test covers the worked-example layout contract (tipback 28.1786
deg, tail strike 16.2602 deg with a 6.2602 deg rotation margin, lateral
40.7462 deg, tricycle diagonal 39.7567 deg at the forward CG limit,
nose gear load fraction 0.266667 forward and 0.1 aft), the tangent
doubling identities for the aft-CG margin, the tail contact height and
the wheel track, the vanishing-angle limits at the contact stations,
the nose fraction complement to 1 and the mid-wheelbase 0.5 identity,
the band verdicts against NOSE_FRACTION_MIN and NOSE_FRACTION_MAX, the
main gear position check, determinism of repeated calls, degree and
dimensionless return types, and ValueError rejection of every
non-physical input class.
Compliance
- Standards referenced, not reproduced: FAR-25 and CS-25 are transport
airworthiness standards (ecfr.gov and easa.europa.eu); the
arrangement relations above are standard conceptual design
methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: landing-gear-layout3description: Use when you must lay out the landing gear arrangement of an aircraft against its center-of-gravity envelope: compute the tipback angle at the aft CG limit about the main gear contact, the tail strike clearance angle at rotation, the lateral turnover angle from the wheel track at the forward CG limit, and the nose gear load fraction band across the CG travel. Produces the three layout angles in degrees, the nose gear load fraction at the forward and aft CG limits with band verdicts, and the main gear position check that gate the landing gear configuration. Trigger: landing gear layout, tipback angle, tail strike clearance, lateral turnover, nose gear load fraction, main gear position, wheel track, CG travel limits.4license: Apache-2.05---67# Landing Gear Layout (vehicle-design/sizing/landing-gear-layout)89Use when the task is laying out a tricycle landing gear arrangement10against the center-of-gravity envelope: the tipback angle at the aft CG11limit, the tail strike clearance angle at rotation about the main gear12contact, the lateral turnover angle from the wheel track, and the nose13gear static load fraction band across the CG travel, closing with the14main gear position check that gates the configuration. This leaf15implements the arrangement geometry with deterministic stdlib16trigonometry and statics, with fixed rotation and station conventions so17the outputs are reproducible. It pairs with18vehicle-design/sizing/landing-gear-sizing, which sizes the strut loads19and landing energy once the layout is fixed, and takes the CG travel20limits as given inputs from21vehicle-design/mass-properties/cg-envelope.2223## Domain quick reference2425Pinned conventions: stations x are measured in metres aft of a fuselage26datum, the ground plane is z = 0 at the tire contacts with the static27deflection, rotations are nose-up about the main gear contact point,28and all angles are returned in degrees. The aircraft is level on the29ground in the reference attitude, and the aft CG limit sits forward of30the main gear contact by the margin d = x_mg - x_cg_aft.3132- Tipback angle: rotating nose-up about the main gear contact by the33 tipback angle brings the aft CG onto the vertical through the34 contact; beyond that attitude the vertical CG line passes aft of the35 contact and gravity rolls the aircraft onto its tail. The rotation36 obeys tan(theta_tip) = (x_mg - x_cg_aft) / h_cg, so theta_tip =37 atan((x_mg - x_cg_aft) / h_cg). The angle grows with the aft-CG38 margin and vanishes when the aft CG reaches the contact station.39 This is the standard tipback check from common conceptual design40 methodology (name and paraphrase only).41- Tail strike clearance: the tail cone lowest point at station x_tail42 and height h_tail_contact above the ground descends during the43 rotation as z(theta) = h_tail_contact * cos(theta) -44 a * sin(theta) with the horizontal arm a = x_tail - x_mg, which45 vanishes at tan(theta_ts) = h_tail_contact / a. The rotation attitude46 is tail-strike limited when theta_ts sits below the tipback angle,47 the transport-typical ordering.48- Lateral turnover, main gear pair: rolling about the line joining the49 two main gear contacts, tan(theta_lat) = h_cg / (track / 2) =50 2 * h_cg / track.51- Lateral turnover, tricycle diagonal: rolling about the diagonal line52 joining the nose gear contact and the nearer main gear contact, the53 perpendicular ground-plane distance from the CG vertical to the54 diagonal is d_perp = (x_cg - x_ng) * (track / 2) /55 sqrt(wheelbase^2 + (track / 2)^2) with wheelbase = x_mg - x_ng, and56 theta = atan(d_perp / h_cg). The diagonal arm is shorter than the57 half track, so the tricycle angle is the lower, binding lateral58 check at a forward CG.59- Nose gear static load fraction: the moment balance about the main60 gear contact gives P_n / W = (x_mg - x_cg) / (x_mg - x_ng); the nose61 gear carries more when the CG is forward, so the aft CG limit gives62 the lower fraction and the forward CG limit the upper one. The63 fraction is dimensionless and layout-level only; strut loads are64 never computed here.65- Typical bands used by the verdicts: nose gear fraction 5-20 % of the66 total weight (NOSE_FRACTION_MIN to NOSE_FRACTION_MAX), lateral67 turnover 40-50 deg for transports, and ROTATION_REF_DEG = 10.0 deg68 as the typical transport unstick rotation reference.69- FAR-25 and CS-25 frame the transport landing gear arrangement70 context; the relations above are standard engineering methodology,71 summary-only.7273## Workflow74751. Fix the arrangement geometry: the nose gear station x_ng, the main76 gear station x_mg, the tail cone lowest point station x_tail and77 contact height h_tail_contact, the CG height h_cg, the main gear78 wheel track, and the CG travel limits with the aft limit x_cg_aft79 forward of x_mg (otherwise the module raises ValueError).802. Tipback angle check at the aft CG limit: run tipback_angle(h_cg,81 x_mg, x_cg_aft) and read the nose-up rotation about the main gear82 contact at which the aircraft would tip onto its tail.833. Tail strike clearance at rotation: run84 tail_strike_clearance_angle(h_tail_contact, x_tail, x_mg) and85 compare it with the tipback angle; when the tail strike angle sits86 below the tipback angle the rotation attitude is tail-strike87 limited. Reference ROTATION_REF_DEG for the rotation margin print.884. Lateral turnover checks from the wheel track: run89 lateral_turnover_angle(h_cg, track) for the simplified main gear90 pair check, then lateral_turnover_tricycle_angle(h_cg, x_cg, x_mg,91 x_ng, track) at the forward CG limit for the nose-to-main diagonal92 refinement, which binds when it sits below the main-pair value.935. Nose gear load fraction band across the CG travel: run94 nose_gear_static_load_fraction(x_cg, x_mg, x_ng) at the forward and95 aft CG limits and compare each limit fraction against96 NOSE_FRACTION_MIN and NOSE_FRACTION_MAX for the band verdicts.976. Main gear position check and close: confirm both CG travel limits98 sit inside the nose-to-main station pair with a positive aft99 margin, carry the angles and the fraction band verdicts into the100 layout gate, and run the deterministic contract test101 scripts/test_landing_gear_layout.py.102103## Worked example104105Transport-class aircraft: W = 60000 kg, wheelbase 15 m with the nose106gear at x_ng = 3 m and the main gear at x_mg = 18 m from the datum, CG107travel from the forward limit x_cg_fwd = 14 m to the aft limit108x_cg_aft = 16.5 m, CG height h_cg = 2.8 m, main gear track = 6.5 m,109tail cone lowest point at x_tail = 30 m at h_tail_contact = 3.5 m110above the ground.111112- Nose fractions: fwd = (18 - 14) / 15 = 0.266667 (26.6667 %) and aft113 = (18 - 16.5) / 15 = 0.1 (10.0 %); on the 60000 kg weight the nose114 gear carries 16000 kg at the forward CG limit and 6000 kg at the aft115 CG limit.116- Tipback angle: the aft CG sits d = 1.5 m forward of the main gear117 contact, so theta_tip = atan(1.5 / 2.8) = 28.1786 deg118 (tipback_angle(2.8, 18.0, 16.5)).119- Tail strike clearance: arm a = 12 m, theta_ts = atan(3.5 / 12) =120 16.2602 deg (tail_strike_clearance_angle(3.5, 30.0, 18.0)), giving a121 6.2602 deg margin against the 10.0 deg unstick rotation reference.122 Tail strike precedes tipback (16.2602 < 28.1786), so rotation is123 tail-strike limited, matching transport practice.124- Lateral turnover: the simplified main gear pair check gives125 theta_lat = atan(2 * 2.8 / 6.5) = 40.7462 deg126 (lateral_turnover_angle(2.8, 6.5)), inside the 40-50 deg transport127 band. The tricycle diagonal check at the forward CG gives d_perp =128 11 * 3.25 / sqrt(15^2 + 3.25^2) = 2.32908 m and theta =129 atan(2.32908 / 2.8) = 39.7567 deg130 (lateral_turnover_tricycle_angle(2.8, 14.0, 18.0, 3.0, 6.5)),131 marginally below the main-pair value as the binding lateral case.132- Verdicts: the aft CG fraction of 10.0 % sits inside the 5-20 %133 typical band (True); the forward CG fraction of 26.6667 % sits above134 it (False) and flags the arrangement, because with the forward CG135 limit 4 m ahead of the main gear the nose gear is over-weighted and136 the main gear station or the forward CG limit must move before the137 layout closes. The lateral turnover angle sits inside the 40-50 deg138 band (True).139140## Verification141142- Confirm tipback_angle(2.8, 18.0, 16.5) returns 28.1786 deg and that143 doubling the aft-CG margin at fixed h_cg doubles tan(theta_tip).144- Confirm tail_strike_clearance_angle(3.5, 30.0, 18.0) returns145 16.2602 deg and that the rotation margin against ROTATION_REF_DEG is146 6.2602 deg.147- Confirm lateral_turnover_angle(2.8, 6.5) returns 40.7462 deg and148 lateral_turnover_tricycle_angle(2.8, 14.0, 18.0, 3.0, 6.5) returns149 39.7567 deg, below the main-pair value.150- Confirm nose_gear_static_load_fraction returns 0.266667 at the151 forward CG limit and 0.1 at the aft CG limit, that the two fractions152 complement the main gear share to 1, and that the aft CG limit sits153 inside the 5-20 % typical band while the forward CG limit sits above154 it.155- Confirm repeated calls return identical scalars and that every156 non-positive height, non-positive track, aft CG limit at or behind157 the main gear station, tail station at or forward of the main gear158 station, and CG station outside the nose-to-main pair raises159 ValueError rather than returning a plausible number.160161## Pitfalls162163- Using the aft CG at or behind the main gear station: the nose gear164 fraction goes to zero or negative and the tipback arrangement is165 statically tipped; the logic raises ValueError on x_cg_aft >= x_mg.166- Reading the simplified main-pair lateral angle as the binding check:167 the tricycle diagonal arm is shorter than the half track, so at a168 forward CG the diagonal angle (39.7567 deg in the worked example)169 sits below the main-pair value (40.7462 deg) and is the binding170 lateral case.171- Taking the mid-wheelbase fraction as the band check: the nose gear172 carries more when the CG is forward, so the band verdict must be173 taken at the forward and aft CG limits, not at a single station.174- Treating the layout geometry as the strut load split: the nose175 fraction here is dimensionless and layout-level only; the strut176 loads and landing energy for a given wheelbase belong to177 vehicle-design/sizing/landing-gear-sizing.178- Using exact float equality on computed sums: tan and atan round-trip179 only to machine precision, so verification uses tolerances180 (assertAlmostEqual with a delta or math.isclose).181182## Related leaves183184- vehicle-design/sizing/landing-gear-sizing: the strut weight split185 and landing energy demand for a given wheelbase once the layout is186 fixed.187- vehicle-design/sizing/landing-gear-retraction-sizing: the retraction188 mechanism sized after the arrangement exists.189- vehicle-design/sizing/tire-sizing: tire selection from the per-tire190 load.191- vehicle-design/mass-properties/cg-envelope: the CG travel band from192 longitudinal stability, taken as a given input here.193194## Behavior contract (gate 3)195196Run the deterministic contract test (stdlib unittest, offline):197198 python3 scripts/test_landing_gear_layout.py199200The test covers the worked-example layout contract (tipback 28.1786201deg, tail strike 16.2602 deg with a 6.2602 deg rotation margin, lateral20240.7462 deg, tricycle diagonal 39.7567 deg at the forward CG limit,203nose gear load fraction 0.266667 forward and 0.1 aft), the tangent204doubling identities for the aft-CG margin, the tail contact height and205the wheel track, the vanishing-angle limits at the contact stations,206the nose fraction complement to 1 and the mid-wheelbase 0.5 identity,207the band verdicts against NOSE_FRACTION_MIN and NOSE_FRACTION_MAX, the208main gear position check, determinism of repeated calls, degree and209dimensionless return types, and ValueError rejection of every210non-physical input class.211212## Compliance213214- Standards referenced, not reproduced: FAR-25 and CS-25 are transport215 airworthiness standards (ecfr.gov and easa.europa.eu); the216 arrangement relations above are standard conceptual design217 methodology, summary-only per standards-map.yaml.218- compliance: STANDARDS-REF, gated: false.