← All projectsGitHub
Digital twins & sim-to-real

What does a 1:N model of a cargo UAV tell you about the 1:1 aircraft?

research/aerolog-scaling

Research programme (proposal stage): per-quantity error budget for a Froude-scaled cargo aircraft model, with a stdlib scaling calculator; first-order result: at 1:10 the model needs 17 to 35% more power than Froude scaling predicts

8 tests

What it found

An open research programme on sub-scale flight testing of cargo and delivery aircraft. Dynamic (Froude) scaling keeps trim, mode frequencies and gust response, but Reynolds number falls as n1.5, so skin friction rises, and cell, motor and propeller performance do not scale with the airframe. The programme asks how large each error is for 1:2 to 1:20 models of an electric cargo aircraft, and whether a corrected model can recover it. Milestone 1 is a stdlib calculator (9 tests; exponent table dimensionally checked, ISA and Sutherland values checked) and a first-order flat-plate result for a 1,000 kg, aspect-ratio-10 airframe: at 1:10 the model needs 1.27× the Froude-scaled power (1.17 to 1.35 across form-factor, wetted-area and aspect-ratio sweeps) and L/D falls from 22.8 to 18.0. An untripped laminar-flow variant makes small models look better than full size, which is a modelling artefact and the reason the next milestones use XFOIL polars measured against UIUC data. The airframe constants are design choices, not a specific aircraft; the Froude exponents and the NASA TP-1435 and other citations are from memory and were not machine-checked (registries returned 403). Preliminary. Milestone 6a: on 134 measured cruise flights of a DJI Matrice 100 (Rodrigues et al. 2022 data, CC BY 4.0), electrical power scales with takeoff mass to the power 1.54 (95% bootstrap interval 1.41 to 1.67 over flights), consistent with the m1.5 behind Froude power n3.5, within one airframe and a 13.6% mass range; electrical cruise power is 1.85× the ideal induced power at every payload, and falls 10% from 4 to 12 m/s. Payload is partly confounded with flight day (density not logged). Milestone 7a: at n = 0.2 the uncorrected model needs 1.157× the Froude power; a search of 178 section and boundary-layer cases (NACA 4-digit and low-Reynolds sections, CL within 6%, lift-curve slope within 5%) reaches at best 1.086, so no section restores it to within 5% (H5 refuted in this space; NeuralFoil polars, similarity kept).

Research log

Ongoing: each run adds a batch and an entry, newest first. Source: LOG.md.

2026-10-31 · Milestone 9o: can the output-error fit estimate the noise correlation itself and still recover 9n's gain? (planned before running)

### Outcome of 9o (experiments/estimated_rho/: run.py, results.txt; about 25 min wall)

2026-10-31 · Milestone 9n: does fitting 9m's coloured-noise record with AR(1)-whitened residuals recover the loss? (planned before running)

### Outcome of 9n (experiments/whitened_noise/: run.py, results.txt; about 17 min wall)

2026-10-31 · Milestone 9m: does coloured (AR(1)) sensor noise break the output-error fit that white noise did not? (planned before running)

### Outcome of 9m (experiments/coloured_noise/: run.py, results.txt; about 15 min wall)

2026-10-31 · Milestone 8f: paper draft catches up with milestones 2a to 2c and 9j to 9l (no new simulation)

2026-10-31 · Milestone 9l: what does estimating the initial state cost the output-error fit at 10% noise? (planned before running)

### Outcome of 9l (experiments/estimated_x0/: run.py, results.txt; 8.5 min wall, 34 min CPU)

2026-10-31 · Milestone 9k: does starting the output-error fit by continuation from a 1-period fit fix 9j's 4-period failures at 10% noise? (planned before running)

### Outcome of 9k (experiments/output_error_start/: run.py, results.txt; about 3 h of CPU)

2026-10-31 · Milestone 2c: how much of the Matrice 100's fixed flight energy is set by cruise altitude (25 vs 50 m), and what does that do to range? (predictions fixed before the run)

### Outcome of 2c (experiments/altitude_energy/: run.py, results.txt)

2026-10-31 · Milestone 2b: how much of a measured Matrice 100 flight is not cruise, and what one-way range does a battery buy? (predictions fixed before the run)

### Outcome of 2b (experiments/mission_energy/results.txt)

2026-10-31 · Milestone 2a: energy per package from measured flights against a diesel truck (predictions fixed before the run)

2026-10-31 · Milestone 9j: does the output-error fit survive 10% sensor noise, where 9h's least squares was unusable? (planned before running)

### Outcome of 9j (experiments/output_error_10pct/: run.py, results.txt; about 1 h of CPU)

2026-10-30 · Milestone 9i: does an output-error fit beat 9h's equation-error least squares on the same noisy free response? (planned before running)

### Outcome of 9i (experiments/output_error_fit/: run.py, results.txt; about 58 min of CPU)

2026-10-29 · Milestone 9h: what mode errors does a real time-domain fit of a noisy free response give, and what do they do to the adjustable tail? (planned before running)

### Outcome of 9h (experiments/doublet_fit/: run.py, results.txt; about 25 min)

2026-10-29 · Milestone 9f: how much noise in the identified modes can the adjustable tail (9d, 9e) tolerate? (planned before running)

### Outcome of 9f (experiments/noisy_identification/: run.py, results.txt; about 20 min)

2026-10-29 · Milestone 9g: the same question as 9f (PR #11443) when only the short-period frequency is identified (planned before running)

### Outcome of 9g (experiments/identification_noise/: run.py, results.txt; about 20 min)

2026-10-29 · Milestone 9e: does the tail-area multiplier that recovers the modes also recover the gust peaks? (planned before running)

### Outcome of 9e (experiments/adjustable_gust/: run.py, results.txt; about 4 min)

2026-10-29 · Milestone 9d: can an adjustable tail area recover the modes if the true tail slope is 0.75 to 1.0 of NeuralFoil's? (planned before running)

### Outcome of 9d (experiments/adjustable_tail/: run.py, results.txt; about 2 min)

2026-10-28 · Milestone 9c: do the gust peaks of the 24 gust-matched tails survive a tail slope 0.75 to 1.0 of NeuralFoil's? (planned before running)

### Outcome of 9c (experiments/tail_gust_robust/: run.py, results.txt; about 3 min)

2026-10-28 · Milestone 9b: do the tails that restore the modes also restore the gust response? (planned before running)

### Outcome of 9b (experiments/tail_gust/: run.py, results.txt; about 3 min)

2026-10-28 · Milestone 9a: does the Froude model keep the gust response (H1 proper)? (planned before running)

### Outcome of 9a (experiments/gust_response/: run.py, results.txt; about 2 min)

2026-10-28 · Milestone 8e: does any tail restore the modes if the true tail slope is 0.75 to 1.0 of NeuralFoil's? (planned before running)

### Outcome of 8e (experiments/robust_tail/: run.py, results.txt; about 2 min)

2026-10-28 · Milestone 8d: does NeuralFoil's lift slope for the 14 to 15% thick UIUC sections match measurement at Re 1e5 to 2e5, the range of the tail? (planned before running)

### Outcome of 8d (experiments/uiuc_naca241x/: run.py, results.txt; about 1 min; data fetched at run time, not committed)

2026-10-28 · Milestone 8c: does NeuralFoil's NACA 0009 lift slope match measured UIUC data at Re 4e4 to 1e5? (planned before running)

### Outcome of 8c (experiments/uiuc_tail_slope/: run.py, results.txt; 3 s; data fetched at run time from the UIUC host and not committed, since they are GPL-licensed)

2026-10-28 · Milestone 8b: figures for the paper (no new simulation)

2026-10-28 · Milestone 8a: first draft of the paper (no new simulation)

2026-10-28 · Milestone 7h: what does the sub-scale demonstrator look like in millimetres, and how tight is its CG? (arithmetic on 7d to 7g, no new simulation)

### Outcome (experiments/demonstrator_spec/results.txt)

2026-10-27 · Milestone 7g: does a tail fixed at its 7d (h = 0) design keep the modes within 5% when the built CG is off? (hypothesis written before the run)

### Outcome (experiments/fixed_tail/results.txt, about 1 min)

2026-10-27 · Milestone 7f: how far can the model's CG sit from the full-size CG before 7d's tail search stops finding a match? (hypothesis written before the run, no numeric predictions)

### Outcome (experiments/cg_margin/results.txt, about 1 min)

2026-10-27 · Milestone 7e: do 7d's passing tails survive the pitch inertia a tail of that size and arm adds? (planned before running)

### Outcome (experiments/tail_mass/results.txt; 17 wings x 270 tails x 4 values of mu, about 12 min with /usr/bin/python3.13)

2026-10-27 · Milestone 7d: can a tail redesign at n = 0.2 bring the power-matched wings' short period and damping within 5% of the n = 1 aircraft? (planned before running)

### Outcome (experiments/tail_search/results.txt; 17 wings x 270 tails, 4,474 stable designs, about 3 min)

2026-10-27 · Milestone 7c: do the 7b matches keep the longitudinal modes (H1 proper) at n = 0.2? (planned before running)

### Outcome (experiments/nonsimilar_modes/results.txt; 17 power-matched cases, about 4 min)

2026-10-27 · Milestone 7b: do non-similar corrections (wing area, aspect ratio) restore H2 to within 5% at n = 0.2? (planned before running)

### Outcome (experiments/nonsimilar_search/results.txt; 144 cases of 2 sections x 9 area factors x 8 aspect ratios, about 4 min)

2026-10-27 · Milestone 6b: does the m^1.5 exponent survive a day-clustered bootstrap and date fixed effects? (planned before running)

### Outcome (experiments/rodrigues_energy/results_days.txt, run_days.py 71 s; 134 flights, 16 days, 13 days with more than one payload)

2026-10-27 · Milestone 7a: can a different airfoil or trip restore H2 to within 5% at n = 0.2? (planned before running; the search ran once, with the low-Reynolds list added before I looked at the first result's ranking)

### Outcome (experiments/correction_search/results.txt)

2026-10-27 · Milestone 6a: does measured electrical power on a real multirotor scale as mass^1.5, the exponent behind Froude power n^3.5? (planned before running)

### Outcome (experiments/rodrigues_energy/: run.py 21 s, results.txt; 134 of 209 flights kept: R-routes with at least 5 s of cruise samples; 46 / 42 / 45 flights at 0 / 250 / 500 g and one at 750 g)

2026-10-27 · Milestone 2: open TP-1435 and check every reference (a check, not an experiment)

2026-10-27 · Milestone 5a: how much peak propeller efficiency does a Froude model lose to Reynolds number? (predictions fixed before the final numbers)

### Outcome (experiments/propeller_efficiency/results.txt)

2026-10-27 · Milestone 3a: do trim speed and the longitudinal modes survive Reynolds-dependent aerodynamics? (predictions written after a first exploratory run, so not blind)

### Outcome (experiments/longitudinal_modes/results.txt)

2026-10-27 · Milestone 4a: do airfoil polars keep H2 (power) and H3 (CLmax)? (predictions fixed before the run)

### Outcome (experiments/airfoil_polars/results.txt)

2026-10-27 · Milestone 1: how much power does a Froude model need beyond the Froude prediction? (planned before running)

### Outcome

Paper, code and results

More in Digital twins & sim-to-real

All 164 Digital twins & sim-to-real projects →

Other research topics

Proper scoring & elicitation28Effort & peer prediction9Verification games & slashing19Detection & tolerances14Markets as routers13Prediction-market design9Paying contributors8Decentralised training systems23Digital twins & sim-to-real164LLM chip design loops40Robot manufacturing loops53Ambient AI assistant46Self-replicating manufacturing34Simulation-first design64Engineered clothing45Task-specific AI accelerators40Algorithmic chip-design loops42Open-source purpose-built robots44The software-engineering loop43Adversarial human imitation41Open-source residential construction41Autonomous multi-angle capture34Sensing, imaging and 3D31Energy supply and dense energy storage39Robot societies among people31Agentic co-design of low-cost robots27Laundry-hanging robots25Machine learning on qualitative data23Robots on the building site27Civilizations & group psychology1History & human sciences1

Produced with AI assistance (Claude). Results are from the code in this repository and are simulated or stylised unless the abstract says otherwise; nothing here implies affiliation with or endorsement by any lab, researcher or company cited. MIT licensed.