University of California, Berkeley
Paper (PDF) Code (coming soon)
Autonomous position hold using onboard vision only, with the marker fixed to the wall.
Indoor flight without GPS is usually solved by adding sensors and compute. We ask the opposite question: how far can autonomous indoor position hold be pushed on deliberately minimal, off-the-shelf hardware? AVIAN is a 250 g quadrotor that runs its entire perception and control loop onboard a Raspberry Pi Zero 2 W, with a single camera and a printed chessboard as the only sensing — no LiDAR, no motion capture, no GPU, and no external compute.
A printed chessboard fixes the world frame. The camera recovers metric pose from it with a planar PnP solver, a Kalman filter smooths the estimate and coasts through dropouts, and a PD law writes small roll and pitch corrections to an unmodified Betaflight flight controller over MSP. Throttle and yaw stay with the pilot, who can disengage autonomy at any time.
We tried three localization designs in order; only the last one flew.
Stream 720p video to a laptop and process there. Glass-to-glass latency exceeded 250 ms, far too slow for an inner control loop.
FAST features, optical flow, and frame-to-frame essential-matrix pose. Propeller vibration, motion blur, weak indoor texture, and unobservable monocular scale left the pose unusable.
A single printed chessboard as a fiducial. Sub-pixel corner detection and the IPPE planar solver give drift-free metric pose at 10–30 Hz, fully onboard. This is the version that flew.
Over an 80 second autonomous hold the vehicle stays bounded at 36 cm XY RMS error. The residual is not noise: it is a single oscillation at 0.26 Hz in both horizontal axes — a limit cycle. The gains needed to hold position are about as high as the loop's latency allows, so the loop sits near its stability margin and oscillates rather than settling. Recovering accurate pose is cheap on this hardware; the loop's latency, and the gain it permits, are what bound precision.
Closed-loop hold: (left) horizontal error over the 80 s flight; (right) the error spectrum, a single peak at 0.26 Hz.
Four autonomous flights recorded while tuning the controller, each at a different set of PID gains. All localize from the marker alone; the oscillation in some runs comes from gains set too high or too sensitive during tuning, made worse by the loop's latency.