Skip to content

Site Mapping

What the TerraHawk is for: survey a site, turn the photos into a georeferenced 3D model, use that model to plan and render a development project on a web page or in Blender, and fly the same mission again on a schedule to update it. This page sets out the whole chain and who owns each link. It is a plan, written 2026-10-03; nothing on it is measured yet. How to fly and process the camera is on Survey3; the GNSS hardware is on Antennas.

From the hangar In the field, without the hangar
Launch and recovery The dock: lid, SITE_CLR, charging, weather check Hand-set on level ground, pilot and GCS laptop on site
RTK base The hangar’s LC29H on its mast, at a fixed coordinate A portable LC29H on a tripod over a marked point, or an NTRIP service
Corrections SiK from the dock SiK from the portable ground radio, or NTRIP through the GCS
Repeat flights Scheduled by the dock Planned visits, the same mission file each time

Both modes fly the same aircraft, the same camera settings and the same mission planning rules, so models from either mode can be compared.

Link What it needs Owner
Photos that rebuild in 3D About 80 % forward and 70 % side overlap. With the Survey3W at the 1.6 s interval, that means flying at about 90 to 120 m (Survey3 has the table) th-aeronautics (altitude, speed, coverage), th-avionics (mission)
Oblique views Straight-down photos give a good ground model but smeared walls and building sides. A forward-tilted mount (about 20 to 30 degrees, estimate) flown in four headings gives every side th-blender (mount), th-aeronautics (belly window and drag)
Photo timing The Survey3W’s exposure pulse on CAM1_FEEDBAK_PIN 51 (AUX 2, fab8476), so each photo is time-stamped at the shutter. At 20 m/s, each millisecond of error is 2 cm on the ground th-avionics (parameters, geotag workflow), th-main (harness wire)
Position RTK on the Q43 NEO-F9P: about 1 cm + 1 ppm relative to the base th-telemetry
A base that does not move One fixed coordinate per base point, used for every flight (below) th-telemetry
Proof of accuracy Three to five surveyed checkpoints per site, visible in the photos th-telemetry (method), the operator (markers)
Processing OpenDroneMap / WebODM: orthophoto, elevation model, point cloud (LAZ), textured mesh (OBJ, glTF), with rolling-shutter correction for the Survey3W Not assigned yet
Web and 3D use glTF for three.js, or 3D Tiles for Cesium on large sites; the mesh into a Blender instance to render the planned project on the real site Not assigned yet
Schedule The dock launches mission X at time T when the site is clear and the wind is inside limits th-hangar (dock), th-avionics (mission upload)
Change between flights Difference the elevation models: cut and fill, progress, new structures Not assigned yet

th-aeronautics’ numbers (2026-10-06, at the 2.85 kg planning mass of the first build, 4964a02; estimates, planning blocks with the same rules as Mission). A lawnmower grid flies every line both ways, so a forward-tilted camera already sees two headings. A crosshatch (a second full grid at 90 degrees over the same block) gives all four. In wind, one grid of the crosshatch flies across the wind and the other along it, which is why the crosshatch loses a little more than the single grid.

Altitude Speed Wind Single grid Crosshatch (4 headings)
116 m 21 m/s calm 288 ha a pack 128 ha a pack
116 m 21 m/s 5 m/s 280 ha a pack 121 ha a pack
116 m 20 m/s calm 292 ha a pack 130 ha a pack
116 m 20 m/s 5 m/s 283 ha a pack 122 ha a pack
90 m 20 m/s calm 233 ha a pack 104 ha a pack
90 m 20 m/s 5 m/s 226 ha a pack 98 ha a pack

At 90 m, a 100 ha crosshatch in a 5 m/s wind does not quite fit one pack (98 ha).

A forward tilt stretches the footprint along the line, which helps forward overlap. At 116 m, 25 degrees gives 85 % at 21 m/s, against 79 % straight down. At 90 m, the overlap is enough only with a tilt of 25 degrees or more. The catch is wind: a crosshatch flies half its lines along the wind, and a tailwind spreads the photos. At 116 m and 25 degrees, the along-wind legs tolerate about 6 m/s; at 90 m, about none. The far edge of a 25 degree footprint is about 60 degrees off vertical, at roughly 10 to 11 cm/px against 5.3 straight down.

Drag is small if the camera stays inside the skin behind a flush window cut at the tilt (about +0.0003 to +0.0005 in CD, under 1 % of cruise). A blister for a protruding camera costs about 1 to 2 %.

Starting plan: 116 m, 25 degrees forward tilt, a crosshatch, along-wind legs only in winds of 6 m/s or less. A 100 ha site fits one pack.

Why the base coordinate matters most for repeat surveys

Section titled “Why the base coordinate matters most for repeat surveys”

RTK places the aircraft relative to the base, very precisely. So if the base thinks it is somewhere else, every photo moves with it. A base that surveys itself in for a few minutes knows its own position only to about 1 to 2 m (estimate), and a different 1 to 2 m each time. Two flights a week apart would then disagree by that much, and the difference looks like change on the site.

So each base point gets one coordinate, measured once and then typed in as a fixed base position for every later flight:

  • The hangar base. Log the LC29H’s raw data for several hours. Post-process it against the nearest public reference station (a CORS) with RTKLIB. That gives a coordinate good to a few centimetres. Then set it as the base’s fixed position and leave it.
  • A field site. Set a permanent marker (a survey nail or a concrete pin) and put the tripod over it on every visit. Measure its coordinate once, the same way as the hangar base, and reuse it.

Check marks. The hangar has two survey marks in their own small concrete blocks, clear of the hangar frame (th-hangar, 40f0ba5). Measure their coordinates in the same post-processing session as the base. Before each mapping campaign, after a frost season or a storm, and monthly while missions are scheduled, occupy each mark with RTK from the base for 2 to 3 minutes and average. Each mark must agree with its recorded coordinate within 2 cm horizontal and 3 cm vertical. If both marks are off in the same way, the base has moved: stop scheduled mapping, check the antenna’s witness line and locknut, and measure the base again as a new dated epoch. Each model records the base epoch it used, so a time series can be corrected. If only one mark is off, that mark has moved; measure it again and keep the base.

One catch, to verify on the bench: the LC29H and the Q43 track L1 and L5, and most public reference stations and NTRIP services broadcast L1 and L2. They share only L1. Post-processing a long static log on L1 alone is still accurate over short baselines (up to about 10 to 20 km, estimate), and NTRIP RTK on L1 alone still works but takes longer to fix. Check which signals the nearest station offers before relying on it.

Geotags: position at the shutter, not at the log line

Section titled “Geotags: position at the shutter, not at the log line”

ArduPilot logs TRIG at the trigger and CAM at the Survey3W’s exposure pulse. CAM’s time stamp is the shutter time, but its latitude, longitude, altitude and attitude are the values when the camera task writes the message, up to about 20 ms later. At 20 m/s that is up to 40 cm (th-avionics, from AP_Camera_Logging.cpp). So the geotag workflow never uses CAM’s position fields. It interpolates the EKF position (XKF1, RTK fixed) at CAM’s time stamp, then adds the camera’s lever arm rotated by the attitude at that time:

photo position = XKF1 at CAM.TimeUS + R(attitude) x (lens - body origin)

XKF1 is the position of the body frame origin, because INS_POS1/2 are set (th-avionics, from AP_NavEKF3_core.cpp). Our origin is the design CG, a fixed point at kit (0, 270, -5.6), not the real CG, which moves with the pack. The lens point is the front of the Survey3W’s barrel (th-blender’s model has no entrance pupil). In body axes (forward, right, down) the arm is about (-0.096, -0.016, +0.012) m. The kit frame is right-handed, so +X is port and the lens at kit X +15.6 sits to port; confirm the side on the printed part before the first survey. The geotag tool marks every photo whose GPS status at the shutter time is not RTK fixed and reports the share per survey. th-avionics owns that workflow.

Per photo, relative to the base, 1 sigma: 5 cm horizontal and vertical with RTK fixed (the budget given to th-testpilot, 2026-09-28). The largest single term is photo timing, which is why the exposure pulse is not optional. Checkpoints measure the real figure for each model.

Item Owner
Tilted mount: angle, belly window, drag, and whether the mapping missions fly four headings th-blender, th-aeronautics
Exposure pulse wired and logged; geotag workflow from the CAM and TRIG log messages th-avionics
Fixed coordinate for the hangar base (hours of raw data, RTKLIB against a CORS) th-telemetry
Portable base kit: tripod, LC29H, battery, ground SiK, field marker procedure th-telemetry, th-main (parts)
Which signals the nearest CORS and NTRIP services broadcast th-telemetry
Processing host (WebODM, local or dell01) and the web viewer not assigned yet
Scheduled missions from the dock th-hangar, th-avionics

Source: docs/site-mapping.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