Back to Projects
Control Systems

2026 One-person engineering team
Python + AeroSandboxNeuralFoilAVLMATLAB / SimulinkKiCadArduPilotFlightGear
3D model
Loading 3D model…
Figure 1. Three-view drawing generated from the measured geometry model.
01 / The starting point

The starting point

The Hugin arrived with nothing — no drawings, no specs, no manual. Everything here started with a tape measure: the airframe was measured part by part and rebuilt as a digital aircraft, and every number since is tagged as measured, simulated, or assumed.

Figure 2. Whole-aircraft drag polar and L/D — computed with AeroSandbox + NeuralFoil.
02 / How it flies

How it flies

The model predicts the real aircraft: a 16:1 best glide, stall at 9.8 m/s, and nearly two hours of flight at its best-endurance speed — cross-checked against a comparable production airframe. These curves are the aircraft's fingerprint; every decision below traces back to them.

Figure 3. Static margin vs CG from AVL — this plot sets the allowable payload envelope.
03 / Proving it stable

Proving it stable

Stability was computed twice, with two independent aerodynamics codes — and they agree. Where they disagreed, the disagreement pointed at real missing physics, and measuring the actual tail boom retired an early stability scare entirely.

Figure 4. 7 motors × 7 propellers, endurance evaluated for each — the installed combo vs the field.
04 / Finding the real bottleneck

Finding the real bottleneck

The stock setup felt underpowered, and the obvious suspect was the 40 A speed controller. Joining propeller data, motor limits, and the drag model proved the motor itself was the ceiling — and a 49-combination sweep found a swap that buys 15% more flight time on the same battery.

Figure 5. Estimator-in-the-loop: attitude, airspeed, and altitude errors, with gyro-bias states locking onto their true values.
05 / A simulator that doesn't cheat

A simulator that doesn't cheat

The 6-DOF simulator flies on estimated state, not perfect truth: a 9-state EKF works from noisy, biased virtual sensors in turbulence. It recovers injected gyro errors almost exactly and holds attitude to 0.2° — the mission barely notices the difference.

QtyPart
1Twin-boom EPO airframe "Hugin"
1Turnigy D3548/6 790 Kv outrunner
3APC propellers
65S 5000 mAh LiPo
140 A ESC
2APM 2.5 autopilot
1Custom STM32H743 FMU (Rev B)
Figure 6. Flight configuration — real bench inventory plus the custom flight controller in design.
06 / The flight controller it earned

The flight controller it earned

The program's findings became hardware requirements: a custom STM32H743 flight controller in KiCad — dual IMUs, CAN, SD logging, ArduPilot-ready. Spec written by the model, not guessed.

Appendix — Figures & Plots

6 figures · click to enlarge

Supporting imagery for this project — boards, plots, screenshots and build shots that did not make the narrative above. Click any figure to open it full-screen.

A1. Hugin twin-boom UAV rendered in the embedded Unreal (sim3d) viewer, flown by the MATLAB 6-DOF model.
A2. Dynamic thrust: APC published thrust vs airspeed, and ESC-current-capped in-flight thrust vs drag.
A3. Propeller performance maps — CT, CP, and efficiency versus advance ratio from APC PER3 data.
A4. V-n diagram — structural and stall boundaries with corner speed marked.
A5. Flight-mode identification — eigenvalues and control doublet responses from numerical linearization of the 6-DOF model.
A6. 3D chase-cam strobe of a coordinated turn — ghosted poses of the real Hugin mesh along the simulated trajectory.