Stitching the Sky While the Payload Keeps Talking

Stratospheric Telemetry Panorama Stitching
🎮 Play: Horizon Stitcher

It’s 2:17 AM and the stitching software has been running for forty minutes. The laptop fan sounds like a small aircraft. This seems appropriate.

Hobby twenty-six is Stratospheric Telemetry Panorama Stitching—mounting a lightweight camera on a high-altitude balloon payload, capturing timed horizon shots tied to APRS telemetry, then using the flight log to order and stitch a 360° panorama of the near-space view. What follows is the technical core: how to calculate your capture interval so the panorama actually assembles instead of leaving you with a folder of disconnected JPEGs and a deep sense of regret.

The Overlap Problem, Rotated 90°

When I built foam-wing orthomosaic maps, the camera pointed straight down and the overlap math was about ground footprint. Here the camera points at the horizon and the payload rotates as it climbs. The “footprint” is now a slice of sky, and the overlap depends on how fast the payload spins versus how often the shutter fires.

The goal: 20-30% overlap between consecutive frames, enough for the stitcher to find tie points along the horizon edge.

Estimating Payload Rotation Rate

Most balloon payloads spin during ascent. The rate varies with wind shear, payload geometry, and how carefully you balanced the thing. Typical range: 2-15 degrees per second. You won’t know your exact rate until you fly, but you can estimate conservatively.

For planning, assume 6°/s—moderate spin, common for a simple styrofoam box with no active stabilization.

Camera Field of View

A typical lightweight action camera has a horizontal FOV around 120° (wide mode) or 90° (medium). For panorama work, medium is cleaner—less barrel distortion to correct later.

With a 90° HFOV, each frame captures one-quarter of the horizon.

The Interval Calculation

For 25% overlap between frames, you want each new frame to advance 75% of the FOV:

Advance per frame = FOV × (1 - overlap)
                  = 90° × 0.75
                  = 67.5°

At 6°/s rotation:

Capture interval = advance / rotation_rate
                 = 67.5 / 6
                 = 11.25 seconds

Round down to 10 or 11 seconds to build in margin. The APRS packet rate becomes your metronome.

Tying Capture to Telemetry

The elegant part: APRS packets already carry timestamps. Instead of relying on the camera’s internal clock, the payload controller listens for its own position reports and triggers the shutter on a schedule derived from the telemetry stream.

CAPTURE_INTERVAL_SEC = 11
MIN_ALTITUDE_M = 18000  # Start capturing above the tropopause
MAX_ALTITUDE_M = 33000  # Stop before burst

last_capture_time = 0

def on_aprs_packet(packet):
    global last_capture_time
    alt = packet.altitude_m
    ts = packet.timestamp
    
    if MIN_ALTITUDE_M <= alt <= MAX_ALTITUDE_M:
        if ts - last_capture_time >= CAPTURE_INTERVAL_SEC:
            trigger_shutter()
            log_frame(ts, packet.lat, packet.lon, alt)
            last_capture_time = ts

The altitude gate matters. Below 18 km, the sky is still blue and the horizon is hazy. Above 33 km, you’re close to burst and the payload dynamics get chaotic. The sweet spot is the stratosphere proper, where the sky darkens and the curvature of the Earth becomes obvious.

Quick Reference

Rotation Rate90° FOV, 25% Overlap IntervalFrames per Full Rotation
3°/s22 sec5.3
6°/s11 sec5.3
10°/s6.7 sec5.3
15°/s4.5 sec5.3

Notice the frame count per rotation stays constant—you always need about 5-6 frames to close the loop with this overlap. What changes is how fast you have to shoot.

Exposure Settings That Won’t Betray You

Auto-exposure is the enemy. The brightness shifts dramatically as the payload climbs—from overcast ground to brilliant stratospheric blue to the near-black of 30+ km. Lock your settings before launch:

  • Shutter: 1/1000s or faster (motion blur from spin kills tie points)
  • ISO: 100-200 (you have abundant light up there)
  • White balance: Daylight preset, not auto (colour shifts create visible seams)

Why This Works (or Doesn’t)

Stitching software finds matching features between frames—corner-like points, high-contrast edges—and warps the images until those features align. The horizon itself is your main feature: the hard line where atmosphere meets space. When overlap is sufficient and exposure is consistent, that line carries through every frame and the panorama closes into a ring.

When it fails, you get gaps. Or worse, the stitcher confidently invents geometry to fill holes, producing a panorama that looks plausible but contains horizon segments that never existed.

The fan finally stopped. The panorama assembled. It’s a 14,000-pixel ring of Alberta prairie seen from 28 kilometres up, and the seams are invisible, and it’s 2:47 AM, and I should probably sleep, but I keep rotating the view and watching the curvature repeat.