Skip to content

Simulated flights

These films show TerraHawk flying in ArduPilot's software-in-the-loop simulator (SITL), on this repo's flight model and parameters. They show what a card's steps look like before anyone flies them. They do not show how the real aircraft flies: the model is built from calculations, CFD and estimates, and the first flights check it.

Each film says which model and parameter files it flew, at which commit. When those files change, the film is out of date until it is flown again, and the release notes say so.

The first hover

Steps 38 to 40 of the first-flight card in the simulator on Fuselage C, a QLOITER takeoff to 8 m, the card's full 60 s hover in 4 m/s of gusty wind, and a landing with the stick fully down.

Simulated in ArduPilot SITL

Soundtrack, off until you unmute the player: Satie, Gymnopédie No. 1 (Robin Alciatore, piano; Musopen, public domain), from Wikimedia Commons.

Flown
2026-10-20
Length
1:38
Camera
Chase
Repeatable
No
Model
Fuselage C v2.4B, our wing with its fence, Gemfan F8041 3-blade lift props
Wind
4 m/s from 240°, SITL's own Dryden gusts (seed 7)
Firmware
ArduPlane V4.8.0-dev (4c98c922)
SITL build
bd782d740932
Repo commit
a6f7307
Model and parameter files
sim/presets/terrahawk.jsonsim/terrahawk.parmparams/terrahawk-common.parmsim/terrahawk-c24b-w78.json

The aircraft arms in QLOITER, climbs to 8 m, holds its position for the card’s full 60 s, and lands with the stick fully down, as step 40 says. The HUD’s EAS figure is the airspeed sensor’s reading, what ArduPilot flies on, not the true EAS. In this gusty wind the pitot reads the wind, so the hover’s airspeed is not step 42’s check, which is for calm air.

Flown on Fuselage C through the test battery’s launch, with the gusts seeded. It is not an exact step program, so a second flight is close but not bit for bit (th-simulator, th-testpilot, 2026-10-20).

Since the flight, TRIM_THROTTLE went from 58 to 65 (th-avionics 822d1202). It sets the cruise throttle in forward flight and does not act in QLOITER, so it does not change this hover.

On Fly the first flights.

The first transition

Steps 47 to 51 of the first-flight card in the simulator on Fuselage C, a climb to 50 m in QHOVER, the transition in FBWA at full throttle, 30 s straight and level on 65 % throttle, and the return to hover.

Simulated in ArduPilot SITL

Soundtrack, off until you unmute the player: Grieg, Morning Mood (Musopen Symphony, 2012; public domain), from Wikimedia Commons.

Flown
2026-10-20
Length
2:49
Camera
Chase
Repeatable
No
Model
Fuselage C v2.4B, our wing with its fence, Gemfan F8041 3-blade lift props
Wind
4 m/s from 240°, SITL's own Dryden gusts (seed 7)
Firmware
ArduPlane V4.8.0-dev (4c98c922)
SITL build
bd782d740932
Repo commit
822d120
Model and parameter files
sim/presets/terrahawk.jsonsim/terrahawk.parmparams/terrahawk-common.parmsim/terrahawk-c24b-w78.json

The aircraft climbs to about 52 m in QHOVER, turns its nose into the 240° wind with about 2.6 s of left yaw stick, and switches to FBWA at full throttle, as step 48 says. The airspeed passes 20 m/s (“Transition airspeed reached 20.2”) about 8 s after the switch, and the pilot sets the 65 % cruise throttle. It then flies step 50’s 30 s straight and level, the pilot holding the height with the pitch stick, at 21.3 to 24.5 m/s indicated, a mean of about 22.8 (roughly 26 m/s true at ARSPD_RATIO 2.3), with no Q-assist and no height lost after the transition airspeed is reached. It switches back to QHOVER for step 51 and lands with the stick fully down, to a pilot disarm (th-testpilot, from the log).

Flown on the filed TRIM_THROTTLE 65 (th-avionics 822d1202): on the earlier 58 % the airspeed fell into Q-assist on Fuselage C. The HUD’s EAS figure is the airspeed sensor’s reading, what ArduPilot flies on and the indicated figures above; the true airspeed was roughly 26 m/s.

Two things differ from the earlier film: the level leg is flown in FBWA with the pitch stick holding the height, as on the card, not in CRUISE, and the descent is the card’s stick fully down (Q_PILOT_SPD_DN 1.5) to a pilot disarm, not QLAND. Flown through the test battery’s launch with the gusts seeded; it is not an exact step program, so a second flight is close but not bit for bit.

On Fly the first flights.

The stall test: the 1 g point

th-testpilot's SITL rehearsal of the stall card's wings-level point on Fuselage C, from FBWA entry to the break and the QHOVER recovery.

Simulated in ArduPilot SITL

Soundtrack, off until you unmute the player: Dvořák, Symphony No. 9, Largo (Musopen; public domain), from Wikimedia Commons.

Flown
2026-10-20
Length
2:21
Camera
Chase
Repeatable
No
Model
Fuselage C v2.4B, our wing with its fence, Gemfan F8041 3-blade lift props; CG 268 mm (the model)
Wind
no wind
Firmware
ArduPlane V4.8.0-dev (4c98c922)
SITL build
bd782d740932
Repo commit
9e1e451
Model and parameter files
sim/presets/terrahawk.jsonsim/terrahawk.parmparams/terrahawk-common.parmparams/test-stall.parmsim/terrahawk-c24b-w78.json

This is row T1-0 of th-testpilot’s stall rehearsal on Fuselage C, flown on the stall test’s own parameters (test-stall.parm, Q_ASSIST_SPEED 12) with LCK_ENABLE 0 and the stall cue script, and rendered from its log. The aircraft enters FBWA at about 25 m/s indicated and decelerates level. One second before the break it is at 13.9 m/s indicated (true EAS 16.9 m/s), a true angle of attack of 12.1°, 8.8° nose up, with 12.9° of up elevon. The break comes when ArduPilot’s own estimate of the angle of attack passes the harness’s 15° trigger (the true angle is then 14.7°), at 13.6 m/s indicated (true EAS about 16.6 m/s); QHOVER takes over at that instant, and the lift motors carry it with 3.4 m lost (th-testpilot, from the log). The stall card’s table quotes 14.2 m/s, the harness’s HUD airspeed 1 s before the trigger.

The model flies at a CG of 268 mm; the card flies the test at 267 mm or forward. The HUD’s EAS figure is the airspeed sensor’s reading, what ArduPilot flies on and what these labels call indicated; on the side ports at ARSPD_RATIO 2.3 it reads below the true EAS near the stall. The angle of attack is not on the HUD; the labels carry it from the log.

The climb to the test height plays at 4x (0:13 to 0:44 of the film), with an amber “4× SPEED” mark beside the flight clock. The transition, the deceleration, the break and the recovery play at real speed. A rehearsal row is not an exact flight: flying it again gives the same result to the card’s resolution, not the same bits.

Flown before TRIM_THROTTLE 65 (th-avionics 822d1202). It acts only in the CRUISE entry before the test point, where TECS holds its own level (th-testpilot 7fcfe781); the FBWA deceleration and the break are flown on the pilot’s throttle.

On Fly the stall test.

Lift props: 3-blade against 2-blade

The first-hover program flown twice on Fuselage C in the same gusts, on the 3-blade lift props and, as a ghost, on the 2-blade.

Simulated in ArduPilot SITL

Soundtrack, off until you unmute the player: Debussy, Clair de lune (Laurens Goedhart, piano, 2011; public domain), from Wikimedia Commons.

Flown
2026-10-20
Length
1:08
Camera
Chase
Repeatable
No
Model
Fuselage C v2.4B, our wing with its fence, Gemfan F8041 3-blade (aircraft) and 2-blade (ghost) lift props
Wind
4 m/s from 240°, SITL's own Dryden gusts (seed 7)
Firmware
ArduPlane V4.8.0-dev (4c98c922)
SITL build
bd782d740932
Repo commit
a6f7307
Model and parameter files
sim/presets/terrahawk.jsonsim/terrahawk.parmparams/terrahawk-common.parmsim/terrahawk-c24b-w78.jsonsim/terrahawk-c24b-w78-2blade.json

The solid aircraft flies Fuselage C on the 3-blade lift props (Q_M_SPIN_MAX 0.82, Q_M_THST_EXPO 0.33). The translucent ghost flies th-aeronautics’ 2-blade model of the same aircraft (a6f7307e, with 0.95 and 0.43). Both fly the same program and seed and arm at the same moment; they are not bit for bit the same, since the flights go through the test battery’s launch rather than an exact step program.

The ghost stays on the aircraft for the whole flight: position control holds both on the same path. The difference is in the motors’ work, which a picture cannot show. On Fuselage C the 2-blade is the cheaper hover: its hover throttle output is 0.265 against the 3-blade’s 0.314, it draws 7.5 % less current (28.85 A against 31.2 A, mean from 45 to 60 s of the logs), and it uses 7.0 % less energy over the 20 s hover (3.74 Wh against 4.02 Wh; th-simulator, th-testpilot, 2026-10-20). These are SITL estimates from th-aeronautics’ prop scaling and the two parameter sets, not measurements; the thrust stand measures the real props.

Since the flight, TRIM_THROTTLE went from 58 to 65 (th-avionics 822d1202). It sets the cruise throttle in forward flight and does not act in a hover, so it does not change this film.

On Propulsion.

The dock: final leg in gusts

The real dock approach on Fuselage C, seen from the ground by the pad, in 3 m/s of gusty wind through the box's wake, from the GUIDED leg and the brake to the QRTL descent and the touchdown.

Simulated in ArduPilot SITL

Soundtrack, off until you unmute the player: Grieg, In the Hall of the Mountain King (Musopen Symphony, 2012; public domain), from Wikimedia Commons.

Flown
2026-10-20
Length
2:53
Camera
Ground, by the pad
Repeatable
No
Model
Fuselage C v2.4B, our wing with its fence, Gemfan F8041 3-blade lift props
Wind
3 m/s from 353°, SITL's own Dryden gusts (seed 21), through the box's CFD wake
Firmware
ArduPlane V4.8.0-dev (4c98c922)
SITL build
bd782d740932
Repo commit
4d7beb2
Model and parameter files
sim/presets/terrahawk.jsonsim/terrahawk.parmparams/terrahawk-common.parmsim/terrahawk-c24b-w78.jsonsim/box.json

One landing from th-testpilot’s dock band set on Fuselage C (D1x-band-3, the arrival along the box), rendered from its log with the camera standing at the pad. The aircraft comes in on the GUIDED leg at 80 m and 21 m/s. The dock’s approach brake starts 98 m from the axis point, 1 m off the axis, at 25.7 m/s over the ground, and stops it 7 m from the point. It switches to QRTL, descends through the box’s wake from the CFD wind table, and touches down at 0.31 m/s.

The dock’s verdict: at the descent decision the gust excess was 0.71 m/s, under the 0.9 m/s limit, so the dock cleared the landing. It landed inside the capture window for the fixed pusher: 27 mm aft of the aim point, 45 mm sideways, 0.8° of yaw, with 187.5 mm of sideways margin left (th-simulator, th-testpilot, 2026-10-20).

Unlike the earlier film, which hopped to the axis point in VTOL, this one flies the real approach, so it is longer and the brake is part of it. The flight out plays at 4x (0:14 to 0:36 of the film), with an amber “4× SPEED” mark; the approach, the brake, the descent and the touchdown play at real speed. The flight clock counts from the arming. The HUD’s EAS figure is the airspeed sensor’s reading, what ArduPilot flies on. Not an exact step program: the flight went through the test battery’s launch with the gusts seeded.

Flown before TRIM_THROTTLE 65 (822d1202). The same cell flown again on 65 (th-testpilot, run band3-65) gave the same captures and clearances, and this case cleared again within about 10 cm of the same touchdown.

On Hangar.

A lift motor fails, with and without lift_check

Lift motor 1 dies in cruise 700 m out; with lift_check the aircraft circles home on the wing and lands on the lane, without it (the ghost) RTL tries to hover on three motors and hits the ground.

Simulated in ArduPilot SITL

Soundtrack, off until you unmute the player: Wagner, Ride of the Valkyries (American Symphony Orchestra, Edison 1921; public domain), from Wikimedia Commons.

Flown
2026-10-20
Length
4:32
Camera
Chase
Repeatable
No
Model
Fuselage C v2.4B, our wing with its fence, Gemfan F8041 3-blade lift props
Wind
no wind
Firmware
ArduPlane V4.8.0-dev (4c98c922)
SITL build
bd782d740932
Repo commit
9e1e451
Model and parameter files
sim/presets/terrahawk.jsonsim/terrahawk.parmparams/terrahawk-common.parmsim/terrahawk-c24b-w78.json

Two of th-testpilot’s calm SITL rows on Fuselage C, rendered from their logs and paired as the fairest comparison: the same build, model and adopted scripts, and the same failure. Lift motor 1 stops as the aircraft enters CRUISE, about 700 m out at 79 m, and the pilot selects RTL 10 s later. The solid aircraft has lift_check v1.6.9 loaded; the translucent ghost does not. The failure falls 0.3 s apart in the two flights, and the film aligns them by log time. The aircraft flew the files at 9e1e451e and the ghost at 6a1e519f; those four files are the same at both commits (th-testpilot).

With lift_check, the check finds the dead motor about 3 s after the RTL (“lift: motor 1 not turning, VTOL locked out”), so the aircraft never asks the lift motors for anything again. It circles home on the wing for about two minutes, then flies the landing lane in AUTO, starts its approach at 42 m and touches down on its keels at 1.42 m/s, 38 m from the landing point. Without it, RTL brings the ghost home and switches to QLOITER over home on three motors; it hits the ground at 21.1 m/s about 11 s later.

The lane is a mission the harness uploads before arming; the AUTO leg is lift_check jumping to it.

Three stretches play at 4x, with an amber “4× SPEED” mark beside the flight clock, which keeps flight time and so visibly runs fast: the flight out to the failure (0:13 to 0:34 of the film) and the circle home (1:28 to 1:38 and 1:58 to 2:10). The failure, the ghost’s crash and the lane landing play at real speed. Nothing is cut.

Not exact: two separate flights that share the failure point, the timing and the conditions, rendered read-only. lift_check is not yet in the aircraft’s parameters.

Since the flight, TRIM_THROTTLE went from 58 to 65 (th-avionics 822d1202). The film is not flown again: with a working pitot TECS finds its own level, and th-testpilot’s A/B (7fcfe781) found no change in the cruise, the return or the transitions. The failure detection, the lockout and the lane do not depend on it.

On Failsafes.

The films are rendered by mcardupilot from the SITL flight logs. The sound under the music is made from each flight's log (mcardupilot 2026.10.16, how it works). Flown by ArduPilot. The ArduPilot logo on the title card is the project's own, used under CC BY-SA 3.0.

Comments on

    Comments are reviewed before they appear. Please leave out places, addresses and other personal details.

    A Supported Systems Flight

    This build log is written and kept by Supported Systems, a small studio that makes thoughtful, user-first technology. The airframe, the hangar and the simulation are ours.

    Visit supported.systems