Flight School

Day 1, Session 1

Welcome and Python Basics

9:00–10:10

  1. Camp intro and safety
  2. Drone demo
  3. Python basics
  4. Human Robot game
Session 1 runs until recess at 10:10. Order: camp intro and safety, crews, drone demo, Python basics, then the Human Robot game. Keep Python practical: students should be typing within 10 minutes of starting it.

From the ground to the air

Python basicsprint, variables, loops
Robot codeprogram VEX AIM
Robot soccerscore goals
First flightstake off and land
Flying shapescode a flight path
Hoop coursefly through hoops
Ping pong pushthe drone's downdraught
Final missiondrone plus robot

Day 1, Tuesday

Day 2, Wednesday

Walk through the eight sessions quickly. The message to land: everything builds towards the final mission, where the drone and the robot work together.

How coins work

  • EarnFinish a challenge and your crew earns a coin. Harder challenges are worth more.
  • TrackEvery coin goes on the crew scoreboard.
  • SpendSpend your crew's coins at the Prize Store at the end of Day 2.
A pile of gold coins
Open the scoreboard with the coin button in the bottom bar, or press C, to show it. Award coins from any slide the same way; the scoreboard saves as you go and stays up to date on every staff device. Coins belong to the crew, not to individuals.

What can you buy with coins?

  • SquishySquishy
  • Pokémon card packPokémon cards
  • LabubuLabubu
Show what's waiting in the Prize Store, then move on. Crews spend their coins together at the end of Day 2, so every challenge counts.

Camp safety rules

  1. Hands off robots and drones until an instructor says go.
  2. Drones only fly in the flying zone, with an instructor watching.
  3. Stay behind the safety line whenever a drone is in the air.
  4. Walk, don't run. There are cables and robots on the floor.
  5. If something goes wrong, stop and put your hand up.
Go through each rule and ask a student to repeat it back. Point out the flying zone and the safety line in the room. The full drone safety course comes in Session 4; these are the whole-camp basics.

Your crews

    Add the crews on the scoreboard (coin button or C) before the session, and they appear here. Send crews to their stations. Crews stay together for both days, and coins are earned as a crew.

    Example: Programming a drone

    Press Run and let students watch: the drone flies a square and climbs at each corner. Switch between 2D and 3D to show the same flight from above and from the side. Then Step through it and point at the if: the climb only happens when i is less than 3. Don't teach it yet; ask what they think each line does. By the end of Day 2 they will have used every command here.

    What's different about a drone

    • PositionIt has a height, as well as forward and sideways.
    • RotationIt turns on the spot while hovering.
    • Take-offPrograms start with take_off() and end with land().
    • DriftAir moves it, so it never stops in exactly the same spot.
    • BatteryFlights are short. Check the battery first.
    Drone directions: forward, rightward, downward
    These are the practical differences students will meet tomorrow. Point at the arrows: forward and rightward are like the robot, downward is new. Drift is why real landings never match the simulator exactly.

    What is a program?

    A program is a list of instructions that a computer follows, in order.

    Take off

    Fly forward 2 metres

    Turn right

    Land

    This is a drone's flight, written as a list of instructions. Ask: what happens if we swap the first and last steps? (It tries to land before taking off.) What if we skip Turn right? Order matters, and a computer never fills in a missing step. It does exactly what the list says.

    The power of programming

    By hand, this would take an hour. With code, it takes a second.

    Turn:

    Press Run. The computer draws 200 lines in about two seconds. Before each number button, ask students to guess what will change: 90 makes a square spiral, 91 twists it, 121 makes a triangle swirl, 145 a star burst, 170 a flower. Then let a student call out any number and type it in. The forward and turn commands are the same ones they will use in the Human Robot game and on the real robots.

    One program, 100 drones

    This is real Python. Drone light shows work this way: a program works out a position for every drone and sends it. move_to(x, y, z) is a real VEX Air command; x is left and right, z is height, both in millimetres. Press Run. The first loop puts the 100 drones in a 10 by 10 grid using the drone's number: d % 10 picks the column, d // 10 picks the row. The second loop spaces them round a circle, 3.6 degrees apart (100 x 3.6 = 360). The other loops use the same idea with different maths: a flower, a spiral and a wave. While the drones move, the loop that is running lights up in the code. Ask: how many move_to commands did that take? (500, from about 30 lines.) Try changing 1500 to 800 to shrink the circle, or 5 to 3 in the flower. set_colour changes the lights before each shape. Real show drones have programmable lights; VEX Air drones don't, so set_colour only works in this simulator.

    print() displays a message

    Output
    Ask students to predict the output before you press Run. Point out that the text inside the quotation marks is exactly what appears. Then edit it live: change the message, and drop a quote mark on purpose so students see that error messages are normal. Click into the code to type. Ctrl+Enter runs it. Press Esc to get the arrow keys back for changing slides.

    Your Flight School page

    1. Open the Flight School page.
    2. Pick a challenge, or open the Playground.
    3. Type your code, then press Run, or Step to go one line at a time.

    decks.tabbott.dev/fly

    Share the link with students before the session, for example through your class channel, so nobody has to type it. Challenges lists every challenge with its coins and a hint, and robot and drone challenges come with a simulator to test code before running it for real. Playground is free Python, or a free robot or drone simulator. Commands lists every command used at camp, with links to the VEX reference. It saves each student's code in their own browser.

    Try it: Make it talk

    1. Print your name.print("Ava")
    2. Print your crew's call sign.
    3. Bonus: print a countdown. 3, 2, 1, Lift off! One print() per line.
    Give students the full 3 and a half minutes in the playground before moving on. Most common errors: missing quote marks, missing brackets, a capital P in Print. Celebrate the first error message someone fixes on their own.

    Example: Make it talk

    Output
    Show this once time is up. Run it, then change the name to a student's and run it again. Step shows the countdown printing one line at a time.

    What is a variable?

    A variable is a name that refers to a value.

    • = means “set to”. It isn't equals like in maths.
    • A variable holds one value at a time.
    • Use the name to get the value back.

    name = "Ava"

    name→"Ava"

    age = 11

    age→11

    age = 12

    age→11 12
    Write name = "Ava" on the board and draw an arrow from the name to the value. Read = aloud as "is set to", never "equals". Then write age = 11, then age = 12, and move the arrow: a variable holds one value at a time, and setting it again replaces the old value. Ask: after these lines, what is age?

    Variables in Python

    Variables
    Output
    Press Step to run one line at a time and watch each variable appear. Ask: what would print("name") show, compared with print(name)? Words in quotes are text; a word without quotes is a variable's name. Change "Ava" to a student's name and run it again.

    Predict: What will it print?

    • A11
    • B12
    • C11 12
    Output
    Hands up for A, B or C before you press Run. Answer: B. A variable holds one value at a time, so setting age again replaces 11 with 12. Step through it and watch age change in the Variables panel.

    Try it: Name your variables

    1. Make a variable called name, set to your name.name = "Ava"
    2. Make a variable called fav_number, set to your favourite number.fav_number = 7
    3. Bonus: print a sentence that uses your variables.print("I am", name)
    Students work in the playground. Variable names can't have spaces, which is why we use fav_number with an underscore. Watch for fav number with a space.

    Example: Name your variables

    Variables
    Output
    Show this once time is up. Step through it so students watch each variable appear in the Variables panel. If anyone tried a name with a space, type it here to show the error and how to fix it.

    What is a loop?

    A loop repeats instructions, so you don't have to write them over and over.

    • range(3) means repeat 3 times.
    • Indented lines are inside the loop.

    Without a loop

    print("Flap!")
    print("Flap!")
    print("Flap!")

    With a loop

    for i in range(3):
        print("Flap!")
    Both programs do exactly the same thing. Ask: what would you change in each one to flap 100 times? The loop version needs one number changed; the other needs 97 more lines. The indent is how Python knows which lines belong inside the loop.

    Loops in Python

    Variables
    Output
    Press Step and let students call out what happens next each time. Watch i in the Variables panel count 0, 1, 2. Ask: why does Landed only print once? Because it isn't indented, so it's outside the loop. Then indent it and press Step again. This idea comes back for the robot square challenge.

    Predict: What is total?

    • A2
    • B3
    • C6
    Output
    Vote first. Answer: C. The loop runs 3 times and adds 2 each time: 2, 4, 6. Step through it to watch total grow in the Variables panel.

    Try it: Loop the loop

    1. Print Lift off! 10 times, using only 2 lines of code.for i in range(10):
    2. Loop over range(5) and print i each time. Which numbers appear?
    3. Bonus: print Ready once, Go! three times, then Landed once.
    Students work in the playground. Task 2 surprises everyone: range(5) gives 0, 1, 2, 3, 4, because Python starts counting at 0. Let them discover it before you explain. Forgotten indents and a missing colon are the most common errors.

    Example: Loop the loop

    Variables
    Output
    Show this once time is up. Step through the middle loop so students see i go 0, 1, 2, 3, 4. For the bonus, point out that Ready and Landed sit outside the loop because they aren't indented.

    The Human Robot game

    • ProgrammerReads out one command at a time.
    • RobotDoes exactly what each command says.
    • DebuggerSpots the command that went wrong.

    Weave around the three poles, crouch under the bridge, then turn right to the finish.

    Set up the course with what's in the room: three chairs in a line as the poles, a broom or rope held across the path behind them as the bridge, and a spot to the right as the finish. One step is one normal walking step. Run the demo on the next slide first, then crews play, swapping roles after each run.

    Human commands

    Build the program with the class: students call out one command at a time while you type it, or click a command on the left to add it. Run or Step to test, and let the Debugger fix any bump. Show solution swaps in a working program; press it again to get the class’s version back. The robot turns orange while crouching.

    Day 1, Session 2

    Robotics Programming in Python

    10:30–12:30

    1. Meet VEX AIM
    2. Your first drive
    3. Robot challenges
    Session 2 runs until lunch at 12:30. Robots should be moving within 15 minutes of this slide. Coins start here.

    Meet VEX AIM

    • DriveMoves in any direction, even sideways.
    • TurnSpins on the spot.
    • KickCollects a ball with its magnet, then kicks or places it.
    • ScreenShows messages and pictures.
    VEX AIM robot
    Hold up a robot while you go through the list. Show the wheels (they let it slide sideways), the kicker at the front and the screen. Hand robots out after this slide.

    Running your code

    1. Turn on your robot.
    2. Open VEXcode AIM and choose Python.
    3. Connect to your crew’s robot.
    4. Write your program.
    5. Press Start, and keep hands clear.
    Demo the whole process once on the projector with a one-line program. Check every crew is connected to their own robot before moving on.

    Moving with move_for

    robot.move_for(300, 0)
    • The first number is how far, in millimetres.
    • The second number is which way, in degrees.
    • 300 millimetres is 30 centimetres.
    Direction is measured from the robot’s front: 0 is straight ahead, 90 is its right, 180 is backwards, 270 is its left. The wheels slide, so 90 moves sideways without turning.

    Try it: First drive

    1. Drive forward 30 cm.robot.move_for(300, 0)
    2. Then drive back to where you started, without turning.
    3. Bonus: slide 30 cm to the right, then back again.
    Everyone runs code on a real robot in the next few minutes. Common mistake: turning around with turn_for instead of using 180. Leave that for crews to discover.

    Turning with turn_for

    robot.turn_for(RIGHT, 90)
    • Choose LEFT or RIGHT.
    • Then how many degrees to turn.
    • A turn changes which way is forward.
    • 90: quarter turn
    • 180: half turn
    • 360: full turn
    Have everyone stand and do a quarter turn, a half turn and a full turn.

    Predict: Which way?

    The robot turns right, then moves with 0. Which path will it take?

    Hands up for A, then hands up for B, before you press Run. Answer: B. After the turn, the robot’s front points right, so 0 now means right.

    Demo: Star burst

    Run it. Each time round the loop the robot drives out, comes back and turns 45 degrees. Ask: what would range(4) draw? What turn would you need for 6 points? (60.)

    Predict: Which shape?

    Which shape will this loop draw?

    Vote first. Many students expect 60 degrees for a triangle. The robot turns through the outside of each corner, and three turns of 120 make a full 360. Answer: A.

    What's different about a real robot

    • UnitsDistances are in millimetres. 10 mm is 1 cm.
    • SlipWheels slip a little, so a real turn is never exactly 90 degrees.
    • TestRun it, measure, change one number, run it again.
    The simulator is perfect and the real robot isn't. Crews should expect to adjust numbers after testing. Within a hand's width of the target counts as a pass on every challenge.

    Looking up commands

    1. Open the VEX command reference.
    2. Choose Python.
    3. Search with Ctrl+K, or open a category like Motion.
    4. Read what the command does, then copy its example.
    • VEX AIMapi.vex.com/aim/home
    • VEX Airapi.vex.com/air/home
    This is where every command lives, written by VEX. Show it live: open the AIM page, choose Python, press Ctrl+K and search for move_for, then point out the parameters and the example. Crews should check here before asking an instructor. Students can click both links from decks.tabbott.dev/fly.

    Challenges

    • Write it in VEXcode.
    • Test it on your robot.
    • Show an instructor a full run to earn the coins.
    • Star is a bonus for crews who finish early.
    • Hints: decks.tabbott.dev/fly
    Leave this up while crews work. Click a challenge to open its slide. Award coins on the scoreboard (press C). Solutions are hidden on each challenge slide behind Show solution: only show one to a crew that has finished it, or to the whole room once every crew is done.

    Challenge: Square

    1 coin

    Drive a square with 40 cm sides and finish where you started.

    • Write every move out, one line at a time.

    Eight lines: move and turn, four times. Real robots won’t stop exactly on the start; within a hand’s width is a pass. Ask crews which lines repeat; that is the next challenge.

    Challenge: Loop square

    1 coin

    Drive the same square using a loop and a variable called side.

    • Change side to 600 and it should still finish where it started.

    This joins variables and loops from this morning. Check by changing side: if the square grows and still closes, they’ve got it.

    Challenge: Hexagon

    2 coins

    Drive a hexagon with 30 cm sides.

    • Use a loop.
    • Finish where you started.

    The turn is 360 divided by 6 sides: 60. Crews who did the triangle prediction should spot the pattern.

    Challenge: Staircase

    2 coins

    Climb 3 steps, each 20 cm tall and 20 cm deep.

    • Use a loop.
    • No turn_for allowed.

    The trick is moving sideways with 90. If a crew is stuck after a few minutes, point back to the move_for directions slide.

    Challenge: Fetch the ball

    2 coins

    Drive to the ball, collect it, bring it back to the start and put it down.

    • The ball is 60 cm straight ahead.
    • Use robot.kicker.place() to put it down.

    Set a ball on a tape mark 60 cm in front of the start. The magnet holds the ball when the robot drives straight into it. Driving backwards with 180 keeps the ball at the front.

    Challenge: Star

    3 coins

    Bonus: drive a five-pointed star with 50 cm lines.

    • Use a loop.
    • Hint: each turn is bigger than 90.

    For fast crews only. The turn is 144 degrees: going round the star turns the robot twice, 720 ÷ 5 = 144. Let them test 140 and 150 to get close first.

    Day 1, Session 3

    Robot Soccer and Meet the Drone

    1:10–2:10

    1. Finish your challenges
    2. Robot soccer
    3. Meet VEX Air
    About 15 minutes for challenges, 25 for soccer, then 20 on the drone. Once every crew is done, open a challenge slide and press Show solution to go through it together.

    Finish your challenges

    • Write it in VEXcode.
    • Test it on your robot.
    • Show an instructor a full run to earn the coins.
    • Star is a bonus for crews who finish early.
    • Hints: decks.tabbott.dev/fly
    Crews finish their challenges. When every crew is done, click a challenge, press Show solution, then Step through it together.

    Demo: How to score a goal

    Run it: the robot drives into the ball, the magnet holds it, then the kicker fires. Try SOFT instead of HARD and watch it stop short. Kicks can be SOFT, MEDIUM or HARD.

    Challenge: Robot soccer

    2 coins

    The goal is to the right. Collect the ball and score.

    • Driven goal: 1 coin, using the AIM controller.

    Set the ball and goal to match the picture, or change the distances to match your field. A coded goal is worth 2 coins because it has to be planned; a driven goal is worth 1.

    Meet VEX Air

    • DroneFlies indoors, up to 2.5 m high.
    • ControllerFlies the drone and starts your programs.
    • BatteriesMust be charged before flying.
    VEX Air drone and controller
    Show each part as you go. Drones stay powered off and on the table during this slide.

    How a drone flies

    Climb diagram
    All four propellers speed up, so the drone rises.

    Yellow propellers are spinning faster. Click a move to see it.

    Click each move. Propellers push air down, and the air pushes the drone up. Speeding up some propellers tips the drone, and it moves the way it tips. Ask a student to act as the drone and lean the way it would move.

    The controller

    Left stick

    • Up / downClimb and descend
    • Left / rightTurn

    Right stick

    • Up / downForward and back
    • Left / rightSlide sideways
    Drag the sticks to fly the drone on screen. Use the 2D and 3D buttons to switch views; 3D shows the height. Let students call out moves: go up, turn to face the door, fly forward. Check this matches the default flying mode on your controllers before the session.

    Day 1, Session 4

    Drone Programming

    2:30–[3:30]

    1. Drone safety
    2. Pilot’s licence quiz
    3. First flights
    4. Code a landing
    Nobody flies until the safety slides and quiz are done. Batteries charged and the flying zone marked before the session.

    Pre-flight checks

    1. Controller and drone batteries are over 20%.
    2. Propellers and landing feet are not damaged.
    3. The drone is on a flat surface.
    4. The flying zone is clear: 1.5 m all around, 1 m above.
    5. Long hair is tied back.
    From VEX’s pre-flight checklist. Pilots say every check out loud before every flight.

    Flying rules

    • Call itSay “Taking off!” and “Landing!” out loud.
    • Stay backEveryone, pilot included, stays behind the safety line.
    • InstructorAn instructor stands next to every pilot, ready to stop the drone.
    • Hands offNever touch a drone until its propellers have stopped.
    • StopIf anything goes wrong, stop the drone straight away.
    Show where the stop controls are and practise with the drone off. To stop a running program mid-flight: press Takeoff, then Land. Propeller Lock keeps a drone grounded until its power button is pressed.

    Pilot’s licence quiz

      1. What do you say out loud before take-off? Taking off!
      2. Where does the pilot stand? Behind the safety line
      3. What is the lowest battery you can fly with? Over 20%
      4. How much clear space does the drone need around it? 1.5 metres
      5. When can you pick up the drone? When the propellers have stopped
      6. A flying drone heads towards you. What do you do? Step back and let the instructor stop it
      7. Which stick makes the drone climb? Left stick, pushed up
      8. How does the drone fly forward? The back propellers speed up
      9. Where should the drone take off from? A flat surface
      10. How do you stop a program mid-flight? Press Takeoff, then Land
      Crews answer each question together by holding up 1, 2 or 3 fingers, then press Reveal answer. A crew that gets all ten right earns a coin. Anyone who missed a question talks it through with an instructor before they fly; every pilot needs their licence.

      The drone dashboard

      • HeadingWhich way the drone faces.
      • DownwardHow high it is above the floor.
      • X, Y, ZWhere it is, in millimetres.
      VEX Air controller dashboard
      The controller can show this dashboard during flight. Pilots use Downward on their first flight to hover at the right height.

      Your first flight

      Take off, hover at 1 metre, then land.

      • Hold Downward between 900 and 1100 mm for 5 seconds.
      • Land safely to earn a coin.
      Controller flying a VEX Air drone
      One drone per flying zone. While one pilot flies, the rest of the crew does the simulator mission on the next slide. Award the coin on the scoreboard (press C).

      Simulator: Yellow rings

      1. Plug a controller into a laptop.
      2. Open VEXcode AIR and choose the Simulator tab.
      3. Click the drone’s power button to unlock it.
      4. Fly through both yellow rings, then land on the platform.
      VEX AIR Flight Simulator rings course
      The VEX AIR Flight Simulator needs a real controller connected by USB; use one from a drone that isn’t flying. It counts rings flown through and collisions. Reset puts the drone back on the platform.

      Coding the drone

      drone.take_off(climb_to=1000)
      drone.move_for(0, 500)
      drone.land()
      • climb_to is the height, in millimetres.
      • move_for(direction, distance)
      • Every program ends with land().
      Drone directions: forward, rightward, downward
      Directions work like the robot: 0 is forward, 90 is right, 180 is back, 270 is left.

      Robot or drone?

      VEX AIM robot

      robot.move_for(500, 0)

      distance, then direction

      VEX Air drone

      drone.move_for(0, 500)

      direction, then distance

      Same move. The numbers swap places.

      This is the most common drone bug of the day. Ask: what would drone.move_for(500, 0) try to do? It asks for direction 500 and distance 0, so the drone won’t fly forward.

      Running drone code

      1. Plug the controller into the laptop.
      2. In VEXcode AIR, press Download.
      3. Press Run.
      4. Press and hold Takeoff on the controller.

      To stop mid-flight: press Takeoff, then Land.

      Controller connected to a laptop by USB
      From VEX’s instructions for downloading and running a project. The Controller icon in VEXcode AIR turns green when it is connected.

      Demo: Take off and land

      The drone gets bigger on screen as it climbs. Step through it, then delete the last line and Run to show the warning when a program doesn’t land.

      Predict: How high?

      How high does the drone end up: 1.5 m, 2 m or 2.5 m?

      Vote for 1.5 m, 2 m or 2.5 m, then Run in 3D and read the height. Answer: 2 m. It starts at 0.5 m and climbs 0.5 m three times.

      Challenge: Land on target

      1 coin

      Take off, fly to the target and land on it.

      • The target is 1 m ahead and 50 cm to the right.
      • Your landing must touch the target.

      Lay a target 1 m ahead and 50 cm right of the take-off spot. Crews test in this simulator first, then fly it for real. Real drones drift, so real landings land further out.

      Landing showdown

      1. Each crew flies its land-on-target program once.
      2. Measure from the centre of the target to the centre of the drone.
      3. The closest landing wins 2 coins.
      Run the crews one after another while everyone watches from behind the line. Read each distance out loud. Award the coins on the scoreboard (press C).

      Day 1 complete

        Tomorrow

        • Flying shapes
        • Hoop course
        • Ping pong push
        • Final mission
        The standings come straight from the scoreboard. Congratulate the leading crew, then preview tomorrow.