On September 30, 2026 we flew three consumer drones around one person in a park for about forty minutes. It was the first time our capture pipeline, built for cameras on tripods, met cameras that move. This page lists what we recorded, what the footage became and the numbers behind it.
In short. Six takes with all three drones recording, 15.4 minutes in total. With no shared clock or calibration, the drones’ clock offsets (up to about 1 s) and every camera’s position were recovered from the video, and the recovered camera orientation agrees with the drones’ own flight logs to about 0.3°. One eight-second jog with a turn became our public sample clip, and a Unitree G1 tracked it without a fall in 59 of 59 randomised physics runs.
The setup
| Drones | 3 × DJI Neo 2 with factory settings: 4K at 29.97 fps, in-camera stabilisation on |
|---|---|
| Telemetry | Each drone’s own per-frame log: timestamp, GPS position and camera attitude |
| Subject | One person, 1.83 m, who consented to capture and publication. No markers, suit or sensors |
| Not used | No calibration board, survey or shared clock between the drones |
| Activities | Walking, jogging, sprints, jumps, many turns, and a phone thrown in the air as a rigid object to track |

Six stretches have all three drones recording at once:
| Take | A | B | C | D | E | F | Total |
|---|---|---|---|---|---|---|---|
| Three-drone overlap | 98 s | 46 s | 37 s | 207 s | 341 s | 197 s | 926 s |
What the footage became
Clocks and cameras from the footage
The drones’ own timestamps were not enough: each drone writes its log with its own delay, and one drone’s clock ran exactly an hour ahead. We recovered the offsets from the person’s motion seen by all three drones. On take E, drone 2 ran 677 ms late and drone 3 533 ms early relative to drone 1, and the offset held to about 50 ms across a take. A drone’s offset changed only when it was powered up again.
Every camera position was solved from the video alone, without the telemetry. Used afterwards as a referee, the drones’ logged attitude agreed with the solved camera orientation to 0.28°, 0.37° and 0.33° (median per drone), which is about 2 cm at the 3 to 5 m the drones flew from the person.
The person in 3D
On the 20-second test window the rebuilt joints land 3.8 to 5.7 pixels from where each drone sees them (median per drone, 1080p). The fastest moment of the capture is a sprint in take F at about 16 km/h.
A held-out check
Hide one drone, rebuild its view from the other two and compare with what it actually filmed. On the 20-second window of take E this scored 15.0 dB PSNR against 21 dB when the hidden drone’s own pixels are allowed in, and the same unchanged chain scored 15.7 dB on a second window from take F. The shape is right; the face and shirt are smeared by a few centimetres of error.

A humanoid in simulation
An eight-second jog with a 90° turn from this capture is our public sample clip. Retargeted to a Unitree G1 and tracked in MuJoCo, it completed 59 of 59 randomised runs (pushes, friction, mass, motor gains and 0–20 ms of latency), with 2.9 cm keypoint error against the captured motion.
The clip, its cameras, 3D joints, foot contacts, error report and robot trajectory are free to download under CC BY 4.0 from the sample page.
What it left open
- Scale. The drones’ GPS and the person’s height disagree on the scale of the scene by 7 to 9%, so speeds from this capture read slightly high. Capture 03 uses a true metric scale.
- Frame rate. Factory settings record at 30 fps. Later captures were flown at 100 fps for finer timing.
- No independent reference. Everything was checked against the drones’ own logs or against a held-out drone, not against motion capture.
Robots are shown in MuJoCo physics simulation. No real-robot runs.