Skip to content

JoshWheeler08/aeropulse

Repository files navigation

Aeropulse

Drone-mounted BLE triangulation system that estimates the bearing of RF-emitting devices using RSSI from three distributed sensors.

Drone sensor setup

Video demo

Problem Statement

Hostile Drone Detection System for Reconnaissance and Bomber UAVs

Develop a detection system that enables reconnaissance and bomber UAVs to identify approaching hostile FPV drones in real time, including direction, speed, and altitude.

Due to limited onboard camera field of view, UAV operators often cannot detect FPV threats approaching from lateral or rear angles. Losses of UAVs caused by hostile FPV drones are increasing.

Our Approach

A distributed RF sensor array mounted on a drone that detects a target's signal from multiple positions, calculates the bearing to the source, and indicates direction to the operator — enabling evasive action before visual contact.

The detector must find and indicate the target direction so the drone operator can respond.

Why Bluetooth?

In the field, hostile FPV drones emit RF signals (video downlink, control link) that can be detected and triangulated. For this hackathon MVP, we simulate that with Bluetooth Low Energy (BLE) because:

  • Every phone and pair of headphones is a ready-made test transmitter
  • The Raspberry Pi Pico 2 W and Pi 5 have built-in BLE radios — no external RF hardware needed
  • The detection principle (RSSI-based triangulation) is identical regardless of frequency band
  • It lets us build and demo the full pipeline in 12 hours

The architecture is designed so the BLE scanners could be swapped for SDR-based RF receivers targeting drone control frequencies (2.4 GHz, 5.8 GHz) with no changes to the controller or bearing logic.

Architecture

┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│  Pico 2 W   │   │  Pico 2 W   │   │   Pi 5      │
│  (pi1)      │   │  (pi2)      │   │   (pi3)     │
│  BLE scan   │   │  BLE scan   │   │   BLE scan  │
└──────┬──────┘   └──────┬──────┘   └──────┬──────┘
       │ UDP             │ UDP             │ UDP
       └────────┬────────┴────────┬────────┘
                │                 │
          ┌─────▼─────────────────▼─────┐
          │        Laptop Controller    │
          │  RSSI → Bearing Calculation │
          │     Live TUI Dashboard      │
          └─────────────────────────────┘

Sensor layout on drone (triangle):

          pi3 (Pi 5)         ← Front
         /          \
        /            \
     pi1 (Pico)    pi2 (Pico)  ← Rear

Each sensor scans for the target BLE device, measures RSSI, and sends it to the laptop via UDP over WiFi. The laptop calculates a weighted bearing vector and displays direction in real time.

Laptop Dashboard Output

==================================================
         🚁 DRONE SIGNAL TRACKER
==================================================

● PI1  | ████████          | -62 dBm
● PI2  | ████              | -75 dBm
● PI3  | ████████████████  | -48 dBm   <-- SELECTED

--------------------------------------------------
Bearing:  312.7°
Direction: ↖
--------------------------------------------------

Status: 3/3 Pis online
Selected: PI3git p

Press Ctrl+C to stop

How It Works

RSSI-Based Vector Estimation

  1. Each sensor measures signal strength (RSSI) to target
  2. Laptop receives RSSI from all 3 sensors via UDP
  3. Convert RSSI to weights: weight = max(0, 100 + rssi)
  4. Calculate weighted position vector:
    vector_x = Σ(weight × sensor_x)
    vector_y = Σ(weight × sensor_y)
    
  5. Calculate bearing angle: angle = atan2(vector_x, vector_y) → 0°–360°

Signal Stability

  • RSSI smoothing: Exponential moving average (α=0.7) filters noisy readings
  • Angle smoothing: Prevents bearing jitter between updates
  • Hysteresis: 5 dB threshold prevents rapid switching between selected sensors
  • Timeout handling: Detects offline sensors after 3 seconds of silence

Hardware

Component Qty Role
Raspberry Pi Pico 2 W 2 BLE scanners (rear-left, rear-right)
Raspberry Pi 5 1 BLE scanner (front) + USB power for Picos
Laptop 1 Controller / dashboard
Any BLE device 1 Target (e.g. wireless earbuds)

Pin Layouts

Pi 5 GPIO Pin Layout

Pico 2 W Pin Layout

Project Files

File Deploy To Purpose
pico_scanner.py Pico 2 W (as main.py) BLE scanner, sends RSSI via UDP
pi5_scanner.py Raspberry Pi 5 BLE scanner using bleak
laptop_controller.py Laptop Receives RSSI, calculates bearing, displays dashboard

Quick Start

1. Configure all scanner files — set your WiFi SSID/password, laptop IP, and target BLE device name.

2. Flash Picos — install MicroPython firmware, upload pico_scanner.py as main.py (change PI_ID to "pi1" / "pi2").

3. Run Pi 5 scanner:

pip3 install bleak --break-system-packages
python3 pi5_scanner.py

4. Run laptop controller:

python3 laptop_controller.py

5. Activate target BLE device near the sensors and watch the dashboard.

See pico-setup.md for detailed instructions.

Network Protocol

Device Sends To Listens On
pi1 (Pico) Laptop:5000 Port 5002
pi2 (Pico) Laptop:5000 Port 5003
pi3 (Pi 5) Laptop:5000 Port 5004
Laptop All Pis Port 5000

Messages are plain UDP text: "pi1,-62" (RSSI data) / "SELECTED" (selection command).

Concept: Integrated Sensor Drone

3D model of hex drone with integrated sensors

Hackathon

Europe Defence Tech Estonia Hackathon 2026 — Tallinn

License

All rights reserved. This code is not licensed for reuse, modification, or distribution.

About

Drone-mounted BLE triangulation system that estimates the bearing of RF-emitting devices using RSSI from three distributed sensors.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages