Distributed unattended acoustic ground sensor network for small-UAS (drone) detection. Low-cost sensor nodes detect a drone's acoustic signature, estimate the bearing to it from their own two-microphone pair, and send compact authenticated LoRa packets to a base station that fuses bearings from multiple nodes into a position estimate.
- Acoustic only — no radar, RF, or optics.
- Nodes do not share a clock; each estimates bearing locally. ≥2 nodes → a position fix.
- No audio is ever transmitted over the air.
Read PLAN.md for the architecture, constraints, and phasing.
Design rationale lives in docs/adr/.
| Path | What |
|---|---|
protocol/ugs_packet.yaml |
Wire-protocol single source of truth. codegen.py generates the C + Python codecs. |
firmware/lib/ugs_dsp/ |
Portable C++ detection + bearing DSP. Builds & unit-tests on a host. |
firmware/lib/ugs_protocol/ |
Generated codec + HMAC packet auth. |
firmware/src/ |
T-Beam integration: I2S capture, tasks, radio, GPS, PMIC, watchdogs. |
basestation/ |
Python: gateway ingest, bearing fusion, tracking, SQLite, FastAPI dashboard. |
tools/ |
Node provisioning, synthetic-signal generator. |
# Protocol codecs in sync
python protocol/codegen.py --check
# DSP + protocol unit tests (no hardware)
cd firmware && pio test -e native
# Compile node firmware for the T-Beam
cd firmware && pio run -e t-beam
# Base station
cd basestation && pip install -e ".[dev]" && pytest -q
UGS_API_TOKEN=dev UGS_KEYS_FILE=../tools/sample_keys.json \
UGS_ANCHOR_LAT=54.687 UGS_ANCHOR_LON=25.279 \
python -m ugs replay ../tools/sample_scenario.jsonl --fastPrototype moving toward field deployment. Built in phases (see PLAN.md §7):
Phase 0 skeleton + protocol, Phase 1 DSP core, Phase 2 base station, Phase 3 firmware
integration. On-node ML classifier (Phase 4) and field-calibration procedure (Phase 5)
are documented but not yet implemented.