github.com/ID-Robots. This page is the index: it maps each repo to its role, its language/stack, and the docs section that covers it in depth.
Fifteen repositories make up the platform today. Twelve are live services or firmware; three (observer, probe, carrier) are stubs — a README.md with generic development principles and no source code yet. Treat the stubs as planned work, not running systems.
Clone URLs follow one pattern —
https://github.com/ID-Robots/<repo>.git. To pull the whole platform into a ~/Projects layout that matches this documentation:How the repos fit together
The repos cluster into functional planes around the Gateway control-plane hub. The Gateway (Flask/Socket.IO) authenticates users and dispatches drone commands over rosbridge; everything else feeds into or hangs off that spine. For the end-to-end request/telemetry/video walkthroughs across these repos, see Platform Architecture Overview and the Ecosystem Overview.The repositories
Control plane
| Repo | Role | Language / stack | Docs |
|---|---|---|---|
skyhub_dashboard | Browser fleet-ops UI: live map tracking, mission planning, video, manual flight | Angular 16, TypeScript 5.1.6, socket.io-client, Three.js, Mapbox GL, PrimeNG, Janus WebRTC (Node 24+ build) | /dashboard/overview |
skyhub_gateway_service | Control-plane hub: HTTP/JWT auth, Socket.IO telemetry, rosbridge command dispatch, SITL orchestration, Stripe billing | Python 3.10, Flask + Flask-SocketIO, SQLAlchemy, PostgreSQL, boto3, Stripe | /gateway/overview |
skyhub_core | SkyCore Drone OS — on-drone microservice stack (MAVROS, rosbridge, video, Isaac SLAM, ArUco landing, gamepad) | ROS2 Humble, Python 3.10, Docker Compose, GStreamer, Redis, NVIDIA Isaac ROS (runs on Jetson) | /drone-os/overview |
Video plane
| Repo | Role | Language / stack | Docs |
|---|---|---|---|
skyhub_whip | WebRTC ingest front door: drone/SITL GStreamer pipelines publish H264 via the WHIP REST API on :7080, mapped to a Janus VideoRoom publisher | Node.js / Express (meetecho simple-whip-server fork) | /ecosystem/whip |
skyhub_janus | WebRTC Selective Forwarding Unit: VideoRooms that WHIP publishes into and the Dashboard subscribes to. WS API on :8188, ICE via Google STUN :19302 | C (meetecho janus-gateway built from source), dockerize-templated .jcfg | /ecosystem/janus |
Simulation
| Repo | Role | Language / stack | Docs |
|---|---|---|---|
skyhub_sitl | Dockerized Software-In-The-Loop drone. Runs sim_vehicle.py + MAVROS (UDP 14550) + rosbridge (:9090) + WHIP video under supervisord. Speaks the identical rosbridge/topic contract as skyhub_core, so the Gateway treats it like a real drone | Docker, ArduPilot SITL, ROS2 Humble, supervisord | /ecosystem/sitl |
Network & manual control
| Repo | Role | Language / stack | Docs |
|---|---|---|---|
skyhub_user_vpn | Per-user/per-drone network isolation. Runs three WireGuard planes on one host — core 10.69.0.0/16:51822, user 10.70.0.0/16:51823, drone 10.71.0.0/16:51824 — and derives iptables rules from user_drone_access. Status API on :5050 | Python / Flask, WireGuard, iptables, S3 (peer configs) | /ecosystem/user-vpn |
skyhub_ws_proxy | Low-latency gamepad/manual-control relay on :7070. /redispad/{id} bridges the Dashboard to the drone via Redis pub/sub; /gamepad/{id} bridges directly to ws://drone_ip:5001. A separate control path from the Gateway’s rosbridge channel | Python, FastAPI / uvicorn, Redis, PostgreSQL | /ecosystem/ws-proxy |
Ground hardware & firmware
| Repo | Role | Language / stack | Docs |
|---|---|---|---|
skyhub_nexus | Nexus “airhub” battery-swap & charging station. Drives an Arduino over USB serial (/dev/ttyACM0) and an IMAX B6 charger over USB (pyusb). Standalone ground hardware — not wired into the Gateway control plane | Python (pyusb / pyserial) + Arduino sketch | /ecosystem/nexus-and-vehicles |
skyhub_rover | WaveShare-class UGV rover firmware: WiFi AP/STA, ESP-NOW, onboard control web page, IMU, motor/servo control. Reached through the WS Proxy gamepad channel. Requires ESP32 Arduino core exactly 2.0.17 | ESP32 / Arduino C++ | /ecosystem/nexus-and-vehicles |
skyhub_ugv | Lower-level UGV base controller firmware: OLED, power monitor, encoders, bus servos, ICM-20948 IMU, JSON config. Sibling to skyhub_rover | ESP32 / PlatformIO C++ | /ecosystem/nexus-and-vehicles |
Deployment
| Repo | Role | Language / stack | Docs |
|---|---|---|---|
skyhub_terraform | AWS infrastructure as code (eu-central-1, ECS Fargate). Terraform state lives in the S3 bucket skyhub-terraform-environment-states; the built Dashboard dist/ is served from an S3 bucket | Terraform / AWS | /deployment/infra-overview |
Planned / stub repos
| Repo | Intended role (inferred) | Status | Docs |
|---|---|---|---|
skyhub_observer | Platform observability / spectator role (name-inferred) | Stub — README only | /ecosystem/planned-services |
skyhub_probe | ”Prob-E” hybrid vehicle that both flies and rolls on the ground, riding on the Carrier. Would run SkyCore + rosbridge like any drone | Stub — README only | /ecosystem/planned-services |
skyhub_carrier | Ground carrier platform that transports the Prob-E vehicle | Stub — README only | /ecosystem/planned-services |
Shared infrastructure (not a repo)
Three backing stores are provisioned byskyhub_terraform and touched by multiple services rather than owned by any single repo:
- PostgreSQL — the shared
skyhubdatabase (user,drone,user_drone_access, and more). Read/written byskyhub_gateway_service,skyhub_ws_proxy, andskyhub_user_vpn. See Database Schema Reference. - Redis — the pub/sub bus for gamepad and telemetry channels, keyed off drone IP. Shared by the Gateway, WS Proxy, and on-drone
skyhub_core. See Redis Channels & MAVLink Port Map. - AWS S3 / ECR — asset storage, VPN peer configs, Terraform state, and the container registry each service pulls images from.
Scoping a cross-repo change
Because SkyHub is a polyrepo with shared infrastructure, some changes cannot stay in one repo:Changing the user / drone / user_drone_access schema
Changing the user / drone / user_drone_access schema
These tables are read by three repos simultaneously:
skyhub_gateway_service (ORM models), skyhub_ws_proxy (drone IP lookup), and skyhub_user_vpn (iptables rule generation). A migration in the Gateway ripples into VPN isolation and gamepad routing — coordinate all three.Touching the rosbridge topic contract
Touching the rosbridge topic contract
The Gateway’s command/telemetry contract on
:9090 is implemented by both skyhub_core (physical) and skyhub_sitl (simulated). A new topic or field must be added to both, or SITL and physical drones will diverge.Adding or moving a manual-control command
Adding or moving a manual-control command
Manual gamepad control does not flow through the Gateway. It travels Dashboard →
skyhub_ws_proxy → Redis → skyhub_core’s gamepad service. Changes here span the Dashboard, WS Proxy, and Core — never the Gateway.Changing the video pipeline
Changing the video pipeline
A single stream crosses four repos: producer (
skyhub_core or skyhub_sitl) → skyhub_whip → skyhub_janus → consumer (skyhub_dashboard), with the Gateway creating the room. SDP/codec/room-ID changes must be verified end-to-end.
