QGC Simulation Tools
September 14, 2026 · View on GitHub
Tools for testing QGroundControl without physical hardware.
Quick Start
| Tool | Use Case | Setup |
|---|---|---|
mock_vehicle.py | UI testing, quick checks | python tools/setup/install_python.py dev |
run_arducopter_sitl.py | Full simulation, mission testing | Docker required |
Mock Vehicle (Lightweight)
A minimal MAVLink simulator for UI testing. Does not simulate flight dynamics.
# Install
python tools/setup/install_python.py dev
# Run (QGC connects to UDP 14550)
./mock_vehicle.py
# Multiple vehicles
./mock_vehicle.py --system-id 1 --port 14550 &
./mock_vehicle.py --system-id 2 --port 14551 &
# TCP mode (SITL-style)
./mock_vehicle.py --tcp --port 5760
Features:
- Heartbeat, GPS, attitude, battery telemetry
- Arm/disarm commands
- Mode changes
- Basic parameter support
Options:
| Option | Default | Description |
|---|---|---|
--host | 127.0.0.1 | Host address |
--port | 14550 | Port number |
--tcp | off | Use TCP instead of UDP |
--system-id | 1 | MAVLink system ID |
--rate | 10 | Telemetry rate (Hz) |
--sitl | off | SITL-compatible mode (TCP:5760) |
Limitations: No flight dynamics, no mission execution, limited MAVLink support.
ArduCopter SITL (Full Simulation)
Full ArduPilot simulation via Docker. Supports missions, geofences, all commands.
# Run (builds image on first run, ~10-15 min)
./run_arducopter_sitl.py
# With simulated network latency (Herelink-like)
./run_arducopter_sitl.py --with-latency
# Connect QGC to: tcp://localhost:5760
Docker Commands:
docker logs -f arducopter-sitl # View logs
docker stop arducopter-sitl # Stop simulation
docker rm arducopter-sitl # Remove container
Requirements: Docker
Mock Vehicle auto-connects over UDP 14550. For SITL, add a TCP comm link in QGC
(Application Settings → Comm Links → Add, Host localhost, Port 5760).
Comparison
| Feature | mock_vehicle.py | ArduCopter SITL |
|---|---|---|
| Setup time | Seconds | 10-15 min (first run) |
| Dependencies | pymavlink | Docker |
| Flight dynamics | ❌ | ✓ |
| Mission execution | ❌ | ✓ |
| Geofence support | ❌ | ✓ |
| All MAVLink commands | ❌ | ✓ |
| Resource usage | Low | Medium |
| Best for | UI testing | Integration testing |
Other Simulators
For more advanced simulation:
- ArduPilot SITL - Native install
- PX4 SITL - PX4 simulation
- Gazebo - 3D physics simulation
The SITL launcher binds TCP port 5760 to localhost and waits for the guest listener without consuming its first client connection. It replaces only containers carrying its ownership label. Remove a container created by the previous shell launcher explicitly before using the same name.