Natural Language Control and Autonomy for Drone Systems.
Hardware
- MAVLink-compatible flight controller
- Companion computer with serial connection to flight controller
- Depth sensor
- Ubuntu x86_64 ground station
Ground station software
- Docker with Compose v2
- SSH key configured to companion computer
Companion computer software
- Docker with Compose v2
- SSH server enabled
Optional
- QGroundControl (manual control and parameter tuning during development)
Edit common/config.yaml:
serial_device: /dev/ttyACM0 # serial port to flight controller (companion computer side)
serial_baud: 57600 # baud rate of the serial connection
drone_host: user@companion.local # SSH connection to companion computerLexaire deploys the relay over SSH. Run once from the ground station:
ssh-keygen -t ed25519 -C "lexaire" # skip if you already have a key
ssh-copy-id user@companion.local # use the drone_host value from config.yamldocker compose builddocker compose run --rm lexaireOn first run, deploy the MAVLink relay to the companion computer from the Lexaire menu:
1. Start relay
This uses Docker's remote daemon over SSH. After the first deploy, the relay auto-starts on every reboot.
[ Drone ]
Flight controller
│ serial
▼
Companion computer — mavlink-router (relay container)
│ UDP over WiFi
▼
[ Ground station ]
┌─────┴──────┐
▼ ▼
:14550 :14551
QGC MAVSDK (lexaire)
The companion computer is a dumb MAVLink bridge. All logic — telemetry, commands, SLAM, AI — runs on the ground station.
| Component | Version | Runs on | Role |
|---|---|---|---|
| Debian slim | 13 (Trixie) | Ground station (amd64) | Base image for Lexaire |
| Debian slim | 13 (Trixie) | Companion computer (native arch) | Base image for relay |
| MAVSDK | 3.17.0 | Ground station | High-level MAVLink SDK |
| mavlink-router | v4 | Companion computer | MAVLink packet forwarder |
| Boost.Asio | system | Ground station | Async event loop |
| ncurses | system | Ground station | Terminal UI |
The relay/ directory contains the relay's Dockerfile and entrypoint. When you select Start relay in the Lexaire menu, it runs:
DOCKER_HOST=ssh://<drone_host> docker compose -f relay/docker-compose.yaml up -d --buildDocker streams the relay/ build context over SSH to the companion computer's daemon, which builds and starts the container natively. The companion computer never needs the repo cloned. restart: unless-stopped keeps the relay running across reboots.
Have questions, ideas, or want to follow along? Join the conversation: github.com/9LogM/Lexaire/discussions
This project was built with the help of Claude — cheers for the pair programming.