mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-22 22:06:37 +00:00
4.1 KiB
4.1 KiB
GPS-Denied Onboard
Сервіс геолокалізації знімків БПЛА в умовах відсутності GPS-сигналу.
Система використовує візуальну одометрію (VO), співставлення з супутниковими картами (cross-view matching) та оптимізацію траєкторії через фактор-графи для визначення координат дрона в реальному часі.
Стек та можливості системи
| Підсистема | Технології та реалізація |
|---|---|
| Core API | FastAPI + Pydantic v2 (REST endpoints POST /flights, POST /flights/{id}/images/batch) |
| Real-time стрім (SSE) | sse-starlette, asyncio.Queue (Pub/Sub для live-трансляції уточнених поз на наземну станцію) |
| Репозиторій (БД) | SQLite + SQLAlchemy 2 + AsyncIO + Alembic. Скеровує каскадні видалення та зберігає waypoint-результати. |
| Супутникові тайли (F04) | httpx, diskcache, інтеграція з Google Maps Static Tiles + утиліти Web Mercator |
| Трансформація координат (F13) | Зберігання локального ENU Origin, конвертація WGS84 ↔ Local ENU ↔ Pixels |
| Вхідний пайплайн (F05) | cv2, asyncio.Queue. Керує FIFO чергою батчів кадрів з БПЛА, здійснює базову валідацію послідовностей та збереження фотографій на диск. |
| Менеджер ротацій (F06) | Оберти 360° блоками по 30° для підбору орієнтації; трекінг історії курсу з виявленням різких поворотів (>45°). |
| Model Manager (F16) | Архітектура завантаження ML моделей (Mock/Fallback). |
| Візуальна Одометрія (F07) | Суперпоінт / LightGlue імітація. OpenCV (findEssentialMat + RANSAC + recoverPose) для розрахунку відносного руху між кадрами без відомого масштабу. |
| Global Place Recognition (F08) | Розпізнавання місцевості (DINOv2/AnyLoc мок), використання імпровізованого Faiss-індексу для ранжирування кандидатів. |
| Metric Refinement (F09) | Вимірювання абсолютної GPS-координати (LiteSAM мок) через гомографію з супутниковим знімком та bounds scaling. |
| Граф поз (VO/GPR) | GTSAM (Python) - очікується в наступних етапах |
Швидкий старт
# Клонувати та перейти в гілку stage1
git clone https://github.com/azaion/gps-denied-onboard.git
cd gps-denied-onboard
git checkout stage1
# Створити віртуальне середовище
python3 -m venv .venv
source .venv/bin/activate
# Встановити залежності
pip install -e ".[dev]"
# Запустити сервер
python -m gps_denied
Сервер стартує на http://127.0.0.1:8000. Health check: GET /health.
Тести
python -m pytest tests/ -v
Структура проєкту
gps-denied-onboard/
├── src/gps_denied/ # Основний пакет
│ ├── __init__.py
│ ├── __main__.py # Entry point (uvicorn)
│ └── app.py # FastAPI application
├── tests/ # Тести
├── docs-Lokal/ # Локальна документація та план
├── _docs/ # Архітектурна документація
├── pyproject.toml # Залежності та конфігурація
└── .gitignore
Ліцензія
Приватний репозиторій. Усі права захищено.