An educational drone programming platform for learning to control DJI/Ryze Tello drones through code. This project provides hands-on experience with UDP communication, command-line interfaces, and autonomous flight programming.
Based on the Tello.js SDK and designed for educational purposes.
📍 New to the project? Check out the Visual Roadmap for an interactive learning journey!
- Node.js v8.11.1 or higher
- DJI/Ryze Tello drone
- WiFi connection to Tello drone network
npm installRequired packages: chalk, chance, csv-parser
X-PilotLab/
├── demos/ # Working demo implementations & tools
│ ├── xpilot-cli.js # Interactive command-line interface demo
│ ├── xpilot-console.js # Console control system demo
│ └── xpilot-mission.js # Mission file interpreter & executor
├── challenges/ # Ranked learning challenges
│ ├── alpha/ # ⭐ Beginner - Basic commands & queries
│ │ ├── README.md
│ │ ├── challenge_alpha.js
│ │ └── missions/
│ │ └── xpilot-query.md
│ ├── beta/ # ⭐⭐ Intermediate - Rotation & patterns
│ │ ├── README.md
│ │ └── missions/
│ │ ├── xpilot-box.md
│ │ └── xpilot-vertical.md
│ └── charlie/ # ⭐⭐⭐ Advanced - Complex maneuvers
│ ├── README.md
│ └── missions/
│ └── xpilot-bounce.md
└── config.json # Drone connection configurationChallenges are ranked learning paths (Alpha → Beta → Charlie) that teach drone programming progressively
Missions are flight patterns within each challenge level that use the commands you implement
Demos are working reference implementations and tools that execute missions and communicate with the drone
X-PilotLab uses a ranked progression system. Start with Alpha and advance through the levels:
Location: /challenges/alpha/
What you'll learn:
- UDP communication basics
- Drone status queries (battery, speed, time)
- Safe ground-based testing
- Basic movement commands
Mission: xpilot-query.md - Status queries without flight risk
Time to complete: 1-2 hours
Location: /challenges/beta/
Prerequisites: Complete Challenge Alpha
What you'll learn:
- Rotation commands (clockwise/counter-clockwise)
- Coordinated flight patterns
- Multi-command sequences
- Geometric patterns (squares, spirals)
Missions:
xpilot-box.md- Square flight pattern with 90° turnsxpilot-vertical.md- Vertical spiral movements
Time to complete: 2-4 hours
Location: /challenges/charlie/
Prerequisites: Complete Challenges Alpha & Beta
What you'll learn:
- Full 360° rotations
- Multi-axis coordination
- Complex flight choreography
- Custom mission creation
Mission: xpilot-bounce.md - Bouncing pattern with full rotations
Time to complete: 4+ hours
-
Setup (15 min)
npm install # Connect to Tello WiFi network -
Alpha Challenge (1-2 hours)
- Read
/challenges/alpha/README.md - Implement basic commands in
challenge_alpha.js - Run mission:
xpilot-query.md
- Read
-
Beta Challenge (2-4 hours)
- Read
/challenges/beta/README.md - Add rotation commands
- Execute missions:
xpilot-box.md,xpilot-vertical.md
- Read
-
Charlie Challenge (4+ hours)
- Read
/challenges/charlie/README.md - Master complex patterns
- Execute mission:
xpilot-bounce.md - Create your own missions!
- Read
node demos/xpilot-cli.jsControl the drone interactively with command history support (use up/down arrow keys to recall commands).
Available commands: command, takeoff, land, forward, back, left, right, up, down, cw (clockwise rotation), ccw (counter-clockwise rotation), and more.
node demos/xpilot-mission.jsRun pre-programmed mission files from challenge folders. The interpreter uses async/await to send commands sequentially with built-in delays (approximately 5 seconds) to ensure the drone completes each maneuver before receiving the next command.
Navigate to a challenge folder and run:
cd challenges/beta
node ../../demos/xpilot-mission.jsWhen prompted, enter a mission filename from that challenge's missions/ folder (e.g., xpilot-box.md). You can run multiple missions without restarting the drone.
- Always fly in a safe, open area
- Be careful in low ambient light conditions
- Monitor battery levels before flights
- Keep clear of obstacles and people
- Follow all local drone regulations
Connection settings are stored in config.json:
- Default drone IP: 192.168.10.1
- Default port: 8889
This project uses:
- UDP sockets (dgram) for drone communication
- Async/await patterns for sequential command execution
- Command delay mapping to ensure proper flight execution
- Readline interface for interactive control with command history
Experiment, learn, and enjoy programming autonomous drone flights
This project was developed with assistance from Claude by Anthropic.