Skip to content

Payload ideas for the belly bay

Fuselage B carries a belly payload bay in Fuselage Mid B and Tail B, and the Survey3W mapping camera rides on its cover (th-blender 44a57bf, 505f241). That cover set the pattern for everything else: the payload is the cover. Five M3 x 8 countersunk screws into heat-set inserts hold it: the Y 356 pair, the Y 485 pair and one aft-centre screw at Y 519 (Ryan, 2026-10-10; hardware-and-consumables.md), and the whole underside of the aircraft is whatever you screwed on. This page is a brainstorm from 2026-10-05 (Ryan and th-testpilot) of what else could ride there, with the limits each idea has to respect. Nothing here is decided. The Survey3W stays the first payload (Ryan, 2026-09-28).

The bay opening is at about Y 434, which is 166 mm aft of the 268 mm CG. th-aeronautics gated it on 2026-10-02 (agent-threads/airframe-design/20261002T030956Z-th-aeronautics-payload-bay-gates.md):

Limit Value Note
All-up mass at the 21 m/s survey 3.01 kg or less Payload and ballast included (th-aeronautics fff6327, on th-testpilot’s measured sweep)
Bay payload, keel B with the Survey3W 100 g With 70 g of ballast at the Camera Arm
Bay payload, camera off, cover on about 165 g ESTIMATE, not flown
After a release CG 256 mm or aft, 8 degrees of trim at 18 m/s Only with the CG slider’s re-balance after the drop (cg_slider.lua v1.7); without it, a 100 g release leaves 6.8 degrees and is not allowed
Drag, cover fitted none The cover is flush to 0.01 mm, so a flush payload costs nothing
Return with the cargo doors open +123 to +188 mAh Fits the 1500 mAh LOW-to-CRT gap; a mid-survey drop is not allowed until the doors close
Tail B strength without the cover margin 10 to 13 Against the protocol’s 2

Those were estimates of where the CG goes. On 2026-10-07 the battery flew the bay (the payload sweep, sim/battery/payloads.py, on th-aeronautics’ trimmed models of the first build with the Survey3W), and the measured limits are tighter:

Measured (SITL, the first build at 21 m/s) Value Note
Mass that flies the 21 m/s survey with its gates about 100 g At 185 g the aircraft stalls in every survey turn (its stall is 19.8 m/s, 21.2 in the turn) and at 273 g from the first turn; a heavier payload needs a faster survey and the energy that goes with it
Aircraft mass per gram of payload about 1.5 g The slider sits near its forward stop with the Survey3W, so the payload is balanced by nose ballast (th-aeronautics)
Trim margin at 18 m/s per 100 g about 1.5 degrees lost 10.0, 8.5, 7.4 and 7.0 degrees left at 0, 100, 185 and 273 g against the 8 the rule asks
A drop 100 g at most After a release the CG is 262, 258 or 253 mm and the margin 6.8, 5.0 or 3.4 degrees; 273 g dropped is forward of the 256 mm limit. The return and the dock landing still pass; a fixed-wing slowdown after the drop is the hazard
Reserve and dock unchanged The return scales with the mass; the dock captures 13 to 14 of 14 at every point
A payload with no ballast (CG 274 to 283 mm) not a flight case Its trim and stall read better in SITL than the trimmed cases, because the model’s pitch aero is linear in the 17 to 19 m/s band where the 270 mm limit comes from (the pitch-stiffness dip); that is why 270 is a hard limit and not a gate the battery can fly

So this build’s bay is a 100 g bay at the survey speed, with a 100 g drop at the edge of the trim rule. th-aeronautics’ revised gate (2026-10-07, agent-threads/airframe-design/20261007T070520Z): all-up 3.01 kg or less at the 21 m/s survey, payload and ballast included, which is 100 g with the Survey3W and about 165 g with the camera off (estimate); the 185 and 273 g gates are withdrawn. After a release: the CG at 256 mm or aft and 8 degrees of trim left, which the dropped-and-held 100 g case fails (6.8), and a variant that re-balances with the slider after the release (100 g returns to 267.4 mm) passes it: 8.75 degrees of trim left at 18 m/s, the reserve return and the dock landing unchanged (flown 2026-10-07). So a 100 g release is allowed, with the slider’s post-release move (cg_slider.lua v1.7, th-avionics: the balance’s CGS_DROP_CG and CGS_AFT_MM on the first-flight card) and 0.75 degrees to spare. Without the re-balance it is not allowed: the dropped-and-held case leaves 6.8 degrees (th-aeronautics, 2026-10-07). The levers are Fuselage C’s slider stop at pack front Y 70, worth about 45 g of ballast at any payload (th-aeronautics), and the survey speed. The masses and lever arms were estimates until th-main sliced Mid B and Tail B; cg.md has the current build-up. The cargo door is deferred until Ryan revises its actuation (hardware-and-consumables.md), so drop payloads wait for it; cover payloads do not.

The idea that makes the bay a system rather than a hole is a fixed interface inside it. A small connector in the bay’s roof carrying pack voltage, 5 V, a CAN or UART pair and one PWM, plus a way for the flight controller to read which cartridge is fitted (an I2C EEPROM or a resistor ladder on an ADC pin). A Lua script then loads that cartridge’s profile: its mass and ballast note, its mission type, its pre-arm checks and which outputs it may drive. The aircraft knows what it carries, and every later payload is a printed sled and a profile file. The DroneCAN path fits this naturally once bus 2 exists on our own flight controller (th-eda, th-avionics); on the LUX F765 a UART is the practical start.

A payload brief lands as an issue in the public repo, terrahawk-public, under the payload label (Ryan, 2026-10-05). Its “Payload brief” issue form asks for the same fields the cartridge profile and the SITL sweep need: what it is, what it earns, mass, size, power, interface, mission, whether it drops, and anything else. For now the form takes a Gitea account (the crew link first; an anonymous form on the site waits for spam protection). The public repo also carries releases; kit STLs and parts derived from them in full are never published there.

Masses are estimates from vendor pages, not weighed parts, and most sit well inside the bay’s budget. The site’s Payloads section (/payloads/, a card and a page per idea) reads one file per idea from docs/payloads/ideas/<slug>.yaml (th-docs-site, 2026-10-05); the table below and those files must say the same thing, and a new idea needs both.

Payload Mass (ESTIMATE) What it earns Notes
Thermal core (FLIR Lepton 3.5 or Boson 320) 10 to 40 g with a carrier Cattle at night, a stuck pivot, a leaking canal, failing septic drain fields (a warm wet patch at dawn), roof heat loss The strongest candidate: small, flush, and the morning dock flight is its natural slot
Scheduled dailies on the Survey3W 0 The same NDVI line every morning, stock tank levels, fence lines, snow depth by photogrammetry in winter No new hardware; the hangar’s self-charging is what makes a boring flight worth flying daily
LoRa soil pucks, dropped 10 to 20 g each Soil moisture and temperature across a field with no cell coverage Needs the cargo door. The aircraft is then a data mule: it flies over, wakes them, collects, and the hangar’s LoRa base already exists
Seed balls, beneficial insects, pheromone dispensers up to the drop limit Reseeding, biological control, orchard mating disruption Needs the cargo door; a mid-survey drop is not allowed until the doors close after release
Atmospheric sounding (temperature, humidity, pressure, PM2.5) 10 to 30 g The inversion height for an orchard’s frost-fan decision; wildfire smoke layers A quadplane climbs well; a two-minute vertical profile is a mission the Survey3W cannot do
RTL-SDR or similar about 25 g A 3D heat map of the LoRa and ELRS links and of interference th-telemetry’s domain; also measures our own keel antennas in flight
Loitering repeater (LoRa, Meshtastic or ELRS) 20 to 40 g Coverage over a canyon for a ground crew or a search Fixed-wing loiter is the efficient mode for this
ADS-B receiver 10 to 20 g Traffic awareness for the ground station A safety payload as much as a sensor; feeds ArduPilot’s ADSB avoidance
On-board detection (small SBC and camera) 60 to 120 g Counts and finds things and reports text over LoRa: “41 head, one down by the north fence” No video link needed; pairs with the dock’s daily flights
Tethered dip sampler (micro winch) about 50 g A water sample from a stock pond or canal; conductivity and pH Hover mode over water; the winch needs its own release logic
Acoustic recorder (AudioMoth class) about 80 g Bird and bat surveys Prop noise is the problem; fixed-wing loiter at altitude or a drop-and-collect puck
Fluxgate magnetometer on a boom 30 to 60 g Buried tanks and pipes, archaeology Hard: the motors’ field is the enemy, which is exactly what tools/fit_compass_mot.py measures

Every row above is a mass and a CG shift at the same station, and some add drag or release in flight. A payload sweep in the SITL battery (sim/battery/) would fly any cartridge from its mass, its drag if it protrudes, and whether it drops, before it flies for real: trim and ballast from cg.md, the reserve rows with the return cost, and the drop case with the doors open. The rows do not exist yet; they wait for Ryan’s go.

The bay geometry and any sled is th-blender’s. Mass, CG and ballast are th-aeronautics’. Radio payloads are th-telemetry’s. The cartridge interface and its Lua profile are th-avionics’. The decision on which payload comes second is Ryan’s.


Source: docs/payloads.md in the repo. Edit it there; this page is generated.

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