Project

Indoor Drone Positioning System

Final System

The final Palm Pilot demo tied the full chain together: webcam gesture input, the ground control station, UWB positioning, EKF state estimation, and closed-loop flight. After months of subsystem debugging, the system completed repeated live demos with responsive gesture commands and stable indoor motion. Video credit: Felix Morin.

Custom Time Difference of Arrival (TDOA) Implementation

Custom Time Difference of Arrival (TDOA) Implementation

We chose UWB TDOA instead of motion capture to keep the system portable and lower cost. Each anchor pair produced a timing constraint, and combining many of those curves made the drone's indoor position observable without GPS.

Custom Tag Design

Custom Tag Design

The onboard tag was built around an ESP32 and DWM1000 UWB transceiver. Its job was to passively listen to anchor packets, extract precise timestamps, compute TDOA pairs, and feed measurements into the drone's estimator without adding extra radio traffic.

Custom Anchor Design

Custom Anchor Design

The anchor boards used an STM32F0 and DWM1000 to broadcast timing and position packets around the flight area. Building the anchors ourselves increased development effort, but reduced cost and gave us control over USB-C flashing, configuration, TDMA scheduling, and debug LEDs.

TDOA Testing

TDOA Testing

Before flying, we validated the tag against known anchor geometry by holding it at measured positions and comparing expected and measured TDOA values. The measurements stayed within roughly +/-10 cm, giving us confidence to integrate them into the EKF.

Flight Control Architecture

Flight Control Architecture

Once the positioning pipeline worked on the bench, it was integrated with the Crazyflie 2.1 flight stack. The onboard EKF fused IMU, barometer, and UWB TDOA updates, while the ground station streamed velocity commands and received telemetry for closed-loop control.

Stationary EKF Testing

Stationary EKF Testing

The first EKF check was deliberately simple: leave the drone stationary and watch the estimate over time. Low variance and minimal drift showed that the UWB updates and onboard prediction model were balanced under ideal conditions.

Carried EKF Testing

Carried EKF Testing

After the stationary test, we manually carried the drone around the 6 m by 4 m workspace to stress the estimate across the anchor layout. Variance increased with motion, but the state stayed bounded across the full coverage area.

Takeoff EKF Testing Failures

Takeoff EKF Testing Failures

The first takeoff tests exposed the real integration problem: vibration, noisy acceleration measurements, CPU load, and inconsistent EKF update timing could push the estimate unstable. This failure drove the estimator tuning and firmware-load reduction work.

Takeoff EKF Testing Success

Takeoff EKF Testing Success

After increasing EKF process noise and reducing onboard computational load, the estimate stayed stable through takeoff, hover, and landing. This was the turning point where the positioning system became usable for controlled flight.

Pure Pursuit Control Testing

Pure Pursuit Control Testing

With localization stable, we tested trajectory control using pure pursuit for circular paths. The drone followed a moving lookahead point around the circle and reached an average path error of about 3.6 cm during system-level testing.

Team

Grant KeefeRyan BerryGabe DavidFelix Morin