The Driving Base: a small robot on two wheels, each with its own motor, and a castor at the back to stop it tipping.
It is the plainest model in the whole course, and the most important one. Almost every robot you build after today sits on top of it — the sensors, arms and grabbers of later lessons all bolt onto this same platform. Get it right once and you get it for free for a year.
By the end of the lesson it will drive forward a distance you choose, come back, and turn to face where you point it — without a steering wheel anywhere on it.
In the real world 5 min
Where you have seen it
An electric wheelchair has one large wheel each side, each with its own motor, and no steering wheel anywhere. The driver pushes a joystick and the chair works out how fast to spin each wheel.
An electric wheelchair: two independently driven wheels, one motor each, plus small support castors. Photo: Stephen B Calvert / Wikimedia Commons (CC BY-SA 3.0).
Why it is built that way
This is called differential drive, and it is chosen because it can turn on the spot. A car needs a wide space to turn because its front wheels only angle a little. A wheelchair has to turn inside a bathroom doorway, so it is built to rotate about its own centre — something only two independently driven wheels can do.
What would go wrong without it
Give the chair one motor and a steering linkage instead, and it needs a three-point turn to get out of a corridor. The same is true of your robot: with one driven wheel it can only travel in arcs, and a great many of this year’s challenges would be impossible.
The main concept — two motors, one robot 6 min
A robot with two driven wheels does not need a steering wheel. It steers by driving one wheel differently from the other.
That is the whole idea of this lesson, and it is worth saying out loud before you touch a single brick:
Same speed on both wheels → straight. Different speeds → a curve. Opposite directions → it spins on the spot.
Everything else today is a way of making that happen reliably. The EV3 has a pair of blocks built exactly for it, and the module below is the reference you will come back to all year.
▶Driving with two motorsThe full reference for the Movement blocks — open it if you are not sure how steering works, or come back to it later.Show meHide
ComponentMotion6 min
Driving with two motors
A driving base has two Large Motors, one per wheel. You could drive them with two separate motor blocks — but they would never start at quite the same instant, and the robot would curve away. EV3 has a separate family of Movement blocks that treat the pair as a single driving base.
port B
port C
A driving base is two Large Motors, normally in ports B and C. The Movement blocks treat this pair as one machine rather than two separate motors.
Blocks reference
Block
What it does
set movement motors to [B v] and [C v] :: movement
Tells the Movement blocks which two ports are the driving wheels. Put it at the top of the program, before any movement.
move [forward v] for (2) [rotations v] :: movement
Drives both wheels together, so the robot travels in a straight line.
move for (1) [rotations v] at (75) (25) % speed :: movement
Drives the two wheels at different speeds, which makes the robot curve.
set movement speed to (50) % :: movement
Sets how fast the driving base travels from now on.
The letters must match the sockets
set movement motors to [B] and [C] is the block that decides which two motors every Movement block after it will drive. It does not look at the robot. It drives the two ports you name, whether or not there is a motor in them — so those two letters have to be the two sockets the cables are actually in.
This is the single commonest reason a driving base does nothing, and it is invisible in the program: every block is spelled correctly and the robot still will not go.
Two robots, and the very same program: drive the motors in ports B and C forward.Check the cables. The left robot's motors are in B and C — the two the block names. The right robot's are in A and B.Run it. On the left both wheels are driven and the robot goes straight. On the right only port B has a motor the block is talking to; port C is empty, and the motor in A is never mentioned.So one wheel turns and the other does not, and the robot swings round its dead wheel. Nothing failed, nothing was reported — the program drove the ports it was told to.Finished. Identical programs, identical robots — different sockets.
stopped
The yellow outline marks the two ports the block is driving. A robot only goes straight when both of them have a motor in them.
Both robots run the identical program. The left one has its motors in B and C, so both named ports have a motor and the robot drives straight. The right one is plugged into A and B: the block drives B, finds nothing in C, and never mentions the motor in A at all — so one wheel turns, one wheel sits there, and the robot swings round the dead one instead of driving.
If neither named port has a motor in it — cables in A and D, say, with the block still set to B and C — the robot does not move at all. The program runs happily to the end and the Brick reports nothing wrong, because as far as it is concerned it did exactly what it was told.
So before you look for a bug in the program, look at the cables: read the port letters off the Brick, then make the block say those two. B and C are only the usual choice, not a rule — if your build has the driving motors in A and D, set the block to A and D and everything works.
Straight, curved, and on the spot
Everything a driving base can do comes from those two speed numbers. Try each button below and watch the trail the robot leaves.
when program starts
set movement motors to B and C
move for 2rotations at 5050 % speed
50left wheel · B50right wheel · C
Equal speeds → a straight line
Both wheels are set to the same speed.Equal speeds, so the robot tracks straight — the trail is a straight line.Two rotations later it is exactly where it was pointed.Finished — it will run again in a moment.
stopped
The path is worked out from the two wheel speeds in the block, not drawn by hand — so changing the preset changes the numbers and the shape together.
Both wheels the same speed — the robot goes straight.
One wheel faster than the other — it curves towards the slower side. The bigger the difference, the tighter the curve.
One wheel forward, the other backward — it spins on the spot, which is how a robot turns in a space no wider than itself.
Notice there is no steering block anywhere in that program, and no steering part anywhere on the robot. The turn is made entirely by driving the two wheels different amounts.
when program starts :: events hat
set movement motors to [B v] and [C v] :: movement
move [forward v] for (2) [rotations v] :: movement
move for (1) [rotations v] at (50) (-50) % speed :: movement
How far is one rotation?
“Move forward 2 rotations” says nothing about the floor — it says how many times the wheels go round. How far the robot actually travels depends on how big the wheels are, and once round a standard EV3 driving wheel is about 17.5 cm.
Before doing any sums, get a feel for it. Drag the robot along and watch both scales at once — rotations on top, centimetres underneath, the same line. Land on the half marks: there is a number between 1 and 2, and it is 1.5.
Drag the robot, or use the arrow keys — it moves in half rotations. Rotations above the line, centimetres below.
1.5 rotations26.3 cm
1.5 — a half rotation past 1. Half a turn of the wheels is 8.75 cm, so halves matter.
cm=2rotations
35 ÷ 17.5 = 2. That is a number you can type straight into the block.
1 rotation = 17.5 cm. Two rotations is 35, three is 52.5.
Halves are real. 1.5 rotations is a perfectly good thing to type into the block, and it is 26.25 cm — right between the 1 and the 2 you already tried.
To go a distance you have chosen, divide by 17.5. The calculator does it, but do a few by hand first — 35 ÷ 17.5 = 2 is worth seeing.
Measure your own wheels before trusting the number. A base built with different wheels travels a different distance per rotation, and every calculation on this page moves with it.
set movement motors to [B v] and [C v] :: movement
set movement speed to (30) % :: movement
move [forward v] for (2) [rotations v] :: movement
Turning on the spot
Steering at right 100 or left 100 drives the two wheels in opposite directions, so the base stops travelling and pivots where it stands. The angle it sweeps is a simple doubling of the rotations:
Half a rotation is the one worth remembering: a square corner, 90°.
Rotations
The robot turns
0.25
45° — half a corner
0.5
90° — a square corner
1
180° — turn round and face back
2
360° — all the way round
The one to memorise is 0.5 rotations = 90°. Everything else follows from doubling or halving it.
set movement speed to (20) % :: movement
move [right: 100] for (0.5) [rotations v] :: movement
Turn slowly. The wheels on a driving base are big and the robot carries a lot of weight, so at full speed it keeps going after the motors stop and lands past the angle you asked for. Somewhere between 15% and 30% speed is where turns become repeatable. A turn that overshoots is almost always a turn taken too fast, not a wrong number.
These figures belong to your robot. The distance depends on the wheels and the angle depends on how far apart they are, so a wider base needs a different number for 90°. Test it, measure what actually happened, and adjust — the same discipline as the Gyro Sensor tolerance.
Why it matters
Every wheeled vehicle steers this way — a tank, a digger, an office chair with two driven castors. Cars use a steering rack instead, but a robot that turns by driving its wheels at different speeds needs no steering mechanism at all.
Say this back before moving on: “My robot has one motor per wheel. If I want it to turn, I change what one wheel is doing.”
What’s in this build 4 min
Before reading on: look at your model and find the electronic parts. Not the beams, axles or wheels — the parts with cables. How many are there?
Three. Here they are:
EV3 Brick × 1
Large Motor × 2
The Driving Base's electronics: the Brick that runs the program, and a Large Motor for each driven wheel.
The Large Motor is the big, strong one — it is used for driving because it has the torque to move the whole robot. The Medium Motor is smaller and faster and does other jobs; you will meet it in a later lesson.
No sensors today. This robot cannot see, feel or measure anything about the world yet. It only does exactly what it is told, for exactly as long as it is told. Remember that when it drives into a table leg.
Ports — and the rule 4 min
Sensors go in ports 1, 2, 3, 4. Motors go in ports A, B, C, D. They are not interchangeable, and nothing will tell you politely if you swap them.
The Brick has the numbered ports along one end and the lettered ports along the other. Today you only need two of the lettered ones.
Part
Port
Why this one
Large Motor, left wheel
B
B and C are the conventional driving pair, and every movement block in this course assumes them.
Large Motor, right wheel
C
Keeping left = B and right = C means a program written by another group runs on your robot.
Check your own wiring now, before going further:
Is the left wheel’s motor cable in port B?
Is the right wheel’s motor cable in port C?
Are both cables pushed fully in, so the connector clicks and does not wobble?
This is the single commonest reason a driving base does nothing at all, and it is invisible in the program — the blocks are spelled perfectly and the robot still will not drive. Watch what happens when the cables and the block disagree:
Two robots, and the very same program: drive the motors in ports B and C forward.Check the cables. The left robot's motors are in B and C — the two the block names. The right robot's are in A and B.Run it. On the left both wheels are driven and the robot goes straight. On the right only port B has a motor the block is talking to; port C is empty, and the motor in A is never mentioned.So one wheel turns and the other does not, and the robot swings round its dead wheel. Nothing failed, nothing was reported — the program drove the ports it was told to.Finished. Identical programs, identical robots — different sockets.
stopped
The yellow outline marks the two ports the block is driving. A robot only goes straight when both of them have a motor in them.
Connect the Brick 4 min
Two routes, and either is fine. USB is the reliable one and the one to fall back on when a room’s Bluetooth is busy; Bluetooth leaves the robot free to move, which some models need.
▶How to connect the BrickUSB and Bluetooth, step by step, with a photograph of every screen. Open it if you have not done this before — or if pairing is not working.Show meHide
USB — the reliable one
Switch the Brick on with the dark grey centre button.
Cable into the Brick’s PC port — the small square socket beside the numbered ports, not one of the numbered ones.
Other end into the computer.
Bluetooth — name it first
Do these in order. Naming the Brick after you go looking for it in the list is how groups end up driving each other’s robots.
Name your Brick. On the Brick: Settings (the spanner) → Brick Name. Type something nobody else will pick, then press the tick. Every Brick is called EV3 until somebody changes it.
Turn Bluetooth on. Settings → Bluetooth. Tick Bluetooth and Visibility. Leave iPhone/iPad/iPod unticked.
Connect from EV3 Classroom. Click the Brick icon at the top of the programming area, find your Brick by name, and click Connect.
Say yes on the Brick. It asks “Connect?” with the computer’s name — choose the tick, then accept the passkey, which is already 1234.
Where to read it. The name sits in the bar across the very top of the screen, on every screen — so you can check which Brick you are holding at any moment without going into a menu. This one is EV3VE. A Brick nobody has renamed says EV3.Step 3, and the reason step 1 exists. Three Bricks in range — read the name before you click Connect. Pairing with the wrong one is not an error: it works perfectly, on somebody else’s robot.
Step 2.Bluetooth switches the radio on; Visibility is what lets the computer find you. With Visibility off your Brick works perfectly and simply never appears in the list.Step 4. Look at the Brick. It asks whether to accept and names the computer. Choose the tick.Then the passkey, already 1234. Press the tick again and you are connected.
The two failures, every class, every time. The Brick has gone to sleep while you were building — press the centre button to wake it. Or you have paired with the group at the next table, which is why the name matters.
The long version, including Port View and how to read the port tiles, is in the Brick & Bluetooth guide.
Two things go wrong here, every time. The first is a Brick that has gone to sleep — press the centre button and try again. The second is connecting to the next group’s robot, which is why your Brick’s name matters. If a robot across the room starts driving when you press play, you have found the second one.
Confirm the connection 2 min
A cable that is plugged in is not the same as a Brick that is connected. Before you run anything, make the software tell you what it can see.
In EV3 Classroom, look at the Brick icon at the top. Connected or not?
Look at the port tiles. They show what the software actually finds: a motor on B, a motor on C.
The check is simple: does the screen agree with the robot in front of you?
Two motors in B and C should show as two motors in B and C. A port showing nothing means the wire, not the program — go back to step 4 and fix it now. Everything after this assumes the software can see both motors.
Change it and test 8 min
Now change one thing at a time, and predict before each run. A prediction that turns out wrong teaches you something; watching without predicting teaches you nothing.
Change 2 rotations to 4. Predict the distance first, then measure it. Was it exactly double?
Change forward to backward. Does it return to where it started?
Put the number back to 2 and change the speed to 20%. Predict: does it travel a shorter distance, or the same distance more slowly?
That last one catches nearly everybody. Rotations measure how far the wheels turn, not how long for — so a slower robot covers the same ground, just taking its time. Try it on the lab below before you try it on the floor.
Drag the robot, or use the arrow keys — it moves in half rotations. Rotations above the line, centimetres below.
1.5 rotations26.3 cm
1.5 — a half rotation past 1. Half a turn of the wheels is 8.75 cm, so halves matter.
cm=2rotations
35 ÷ 17.5 = 2. That is a number you can type straight into the block.
Build it 15 min
Build the model before you read any further. Everything after this is about making it do something, and none of it will make much sense with nothing on the table in front of you.
Use the viewer's own controls to zoom and turn pages. Fullscreen makes it big enough to build from.
Check the finished build against the picture before you switch anything on. A motor mounted the wrong way round is far easier to spot now than it is to debug later, when it looks like a program fault.
Make it move 10 min
The smallest program that makes this model do its job. Three blocks:
when program starts :: events hat
set movement motors to [B v] and [C v] :: movement
move [forward v] for (2) [rotations v] :: movement
The whole first program.
Walk it in the order the robot runs it:
when program starts — the hat block. Everything under it runs when you press play.
set movement motors to B and C — this is you telling the Brick which two motors are the wheels. Without it, the movement blocks are talking about the wrong ports.
move forward for 2 rotations — both motors turn two full turns of their output shafts, together, then stop.
What success looks like: the robot drives in a straight line, roughly 35 cm, and stops on its own. It should not drift left or right, and it should stop without you touching anything.
This is what you are building: the Driving Base.
The map 2 min
This model drives, so its challenges are run on a mat. Mats differ between branches — check you are looking at the one in your room.
WRO 2026 RoboMission Elementary — Robot Rockstars · official WRO game mat, 2362 × 1143 mm
The challenges name these places rather than distances, so the same challenge works on any mat:
✕The room (bottom left)
AConcert stage (left)
BTour trucks (bottom middle)
CCafé (top right)
DPark strip (top right)
EMain plaza (centre)
Switch mats above and every route below is redrawn on the mat you chose.
Challenges 27 min
Work through them in order — each is harder than the last. The extra challenge comes after all three, and it is meant to make you plan before you build.
Challenge 1
Start from HOME with the robot fully inside the start area, drive to A and stop with the whole robot inside A. Do it three times from the same spot — it has to land in A all three runs, not just once.
✕ start at home — The room (bottom left), then A (Concert stage (left))
Fullscreen it while you build — you can pause and scrub with the player's own controls.
Watch it done
Challenge 2
Start from HOME, drive to A, then turn and drive to B. The robot must end fully inside B, and nothing on the mat may be pushed out of place on the way. Work the turn out by changing what ONE wheel does — do not lift the robot and point it by hand.
✕ start at home — The room (bottom left), then A (Concert stage (left)) → B (Tour trucks (bottom middle))
Fullscreen it while you build — you can pause and scrub with the player's own controls.
Watch it done
Challenge 3
Start from HOME, visit A, then B, then come back to HOME facing the way you began. Use rotations, not time: a program written with waits will drift on the second run and you will see it.
✕ start at home — The room (bottom left), then A (Concert stage (left)) → B (Tour trucks (bottom middle)) → HOME (The room (bottom left))
Extra challenge
Your robot is a delivery trolley and the drop-off keeps moving. You will be told which station the delivery goes to — A, B or C — only AFTER your program is written, and you may not rewrite it once you are told.
Plan on paper before you build anything. Work out what is the same about every route and what changes, and decide how your program will take the difference as a number you can set in one place.
You will be asked two questions when you demonstrate it: how do you know it will reach the station, and what would you change if the mat were half the size? Have answers ready.
✕ start at home — The room (bottom left), then A (Concert stage (left)) → B (Tour trucks (bottom middle)) → C (Café (top right))