The Road Roller: two Large Motors driving the back, and three big tyres squeezed together on one axle at the front to make a heavy roller drum.
A roller’s job is repetition. It goes up the strip, comes back down it, goes up again — the same movement, over and over, until the surface is flat.
So this is the model that will finally catch out something you have been assuming since Lesson 10. You have written “out four rotations, back four rotations” a dozen times and called it equal and opposite. Today you do it five times in a row and find out that the robot is nowhere near where it started.
In the real world 5 min
Where you have seen it
Behind every road resurfacing crew. The tarmac is laid hot and loose, and the roller goes over it again and again until it is hard enough to drive on.
A road roller in Hsinchu City. Photo: H. H. Tsai / Wikimedia Commons (CC BY-SA 4.0).
Why it is built that way
The drum is heavy and it is wide and smooth. Weight presses the loose material together; width means each pass covers a useful strip; smooth means it leaves no marks behind.
And crucially, one pass is never enough. Compacting takes several runs over the same ground, which is why a roller driver spends the day going backwards and forwards over a strip most people would call finished.
What would go wrong without it
Now the problem that is really today’s lesson. Each pass has to land on the same strip. If the roller wanders a few centimetres sideways each time, then after ten passes it is rolling somewhere else entirely — and there is a strip in the middle that has been rolled ten times and one at the edge that has been missed.
A small error you would never notice once becomes a large error when you repeat it. That is not a fault in the machine; it is arithmetic.
The main concept — errors add up 6 min
Every real movement is slightly wrong. Repeat it and the wrongness does not cancel out — it accumulates.
A motor block that says 4 rotations really does turn the motor four rotations; the Brick counts them and it is accurate. What is not accurate is what happens between the motor and the floor. The tyre grips a little differently each time, the surface is not perfectly even, and the machine is nudged by its own cable.
Each run finishes a little short. None of the gaps is big; five of them together are.
What you assumed
What actually happens
Out 4, back 4, so it returns to the start.
It returns to nearly the start — out by a few millimetres.
Do that five times and it is still at the start.
Those few millimetres have become a few centimetres, all in the same direction.
The important word is same direction. If the error were random, half would be too far and half too short and it would roughly cancel. It is not random: whatever causes it — a tyre with slightly less grip on one side, a cable pulling one way — causes it the same way every time. So it adds.
Measure your robot after ten runs, not one. One run tells you almost nothing about how a machine behaves in use.
▶Driving with two motors, and measured movementThe full reference for the pair blocks and for rotations and degrees. Open either if it is not clear yet.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.
ComponentMotion5 min
Rotations and degrees
There are two ways to tell an EV3 motor how much to move: give it a length of time, or give it an amount of turn. Only the second one is repeatable, and that difference decides whether a machine works reliably or only sometimes.
One rotation means one full turn of this shaft — not one turn of the wheel or gear it drives. Gearing between the two changes how far the mechanism actually moves.
Blocks reference
Block
What it does
[A v] run [clockwise v] for (1) [rotations v] :: motors
One full turn of the motor shaft, then stop. The program waits for it.
[A v] run [clockwise v] for (180) [degrees v] :: motors
Half a turn. 360 degrees is one rotation.
Count it as it turns
The counters below tick up in step with the shaft, so you can watch a rotation being counted rather than take it on trust.
The program begins. Nothing has turned yet, so both counters read zero.Turning. Watch the two motor counters climb together — they are one movement counted two ways.Exactly 2 rotations, exactly 720°. The big gear has turned only two thirds of a turn.Finished — it will run again in a moment.
stopped
The two motor read-outs are the same measurement — 1 rotation is 360°. Use whichever makes the number easier to read.
Rotations or degrees?
Notice that the two motor counters finish together: 2.00 rotations and 720° are the same instant, because they are the same measurement in different units. So pick whichever makes the number easier to read. A winch that needs eight full turns is clearest in rotations. A gate that lifts a quarter turn is clearest in degrees — 90 rather than 0.25.
Gearing changes the answer
The third counter is the one that catches people out. The block counts turns of the motor, not of the thing it drives — and the gear in the demo is three times the size, so two motor rotations move it only 0.67 of a turn. Ask for two rotations and the mechanism does not move two rotations’ worth unless the gearing is one to one.
That is why a number that works on one build has to be retuned when the gearing changes — the program is right, the mechanism is different.
Why it matters
A printer feeds paper an exact distance; a lift stops level with the floor; a robot arm returns to the same place a thousand times. None of that is possible by timing a motor — they all count turns.
Say this back before moving on: “A small error in the same direction every time becomes a big error.”
What’s in this build 4 min
Part
What it is doing here
EV3 Intelligent Brick
Runs the program and adds the weight the roller needs.
Large Motor ×2
Ports B and C, driving the rear wheels.
The roller drum (no cable)
Three tyres squeezed onto one axle. It is not driven — it is dragged along, and it is heavy on purpose.
Find your machine’s bias by hand
Before you blame the program, find out which way your particular roller already wants to go.
Push the roller straight across the table by hand for about half a metre, then let go and look. Did it track straight?
Do it twice more. Does it go the same way each time? If so, you have found a build bias, and it will show up in every run today.
Spin both rear wheels. Do they coast for about the same time? A stiffer side is a curve waiting to happen.
Check the drum turns freely and is not rubbing the frame on one side.
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.
Part
Port
Why this one
Left rear motor
B
B and C are the pair. B is always left.
Right rear motor
C
Decided from behind the machine, facing the way it drives.
Sensors
none
Worth noticing today: the roller cannot tell it has drifted. Only you can.
Check your own build now:
Left in B, right in C.
Tape a start line to the floor, and mark where the front of the roller sits on it. You will be measuring against this all lesson, so make it something you can line up on exactly.
Route the cables straight up and back so they cannot pull one side. A trailing cable is the commonest cause of the very drift you are about to measure.
A long, flat, clear run — at least two metres.
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.
Bluetooth, and this time it is not optional. Today you are measuring drift in millimetres. A USB cable dragging behind the robot produces drift far bigger than anything you are trying to study, and it would make the whole lesson meaningless.
Confirm the connection 2 min
Check the Brick icon: connected, or not.
A Large Motor on B and one on C. Both the same kind — a mismatched pair guarantees drift before you start.
Turn the left wheel and check tile B counts, then the right and C.
Set the roller exactly on your start line, front edge lined up. Do this before every single run today, or your measurements mean nothing.
Make it move 10 min
Six blocks: five passes up and down the same strip. Watch where it finishes, not how it looks while it runs.
when program starts :: events hat
set movement motors to [B v] and [C v] :: movement
set movement speed to (40) % :: movement
repeat (5)
move [forward v] for (3) [rotations v] :: movement
move [backward v] for (3) [rotations v] :: movement
end
Three rotations out and three back, five times. On paper it finishes exactly where it started.
Walk it in the order the Brick runs it:
set movement motors to B and C — a setting.
set movement speed to 40 % — steady. A roller is not in a hurry.
repeat (5) — five passes over the same strip, the way a real roller works.
move forward for 3 rotations — up the strip.
move backward for 3 rotations — back down it. Equal and opposite, in theory.
What success looks like — and read this carefully. Success today is not the roller finishing on the line. Success is running it, measuring honestly how far off it is, and being able to say which direction the error went. A roller that misses by two centimetres and a student who measured it is a better result than a lucky run nobody checked.
Measure both ways. How far forward or back of the line did it finish, and how far to the left or right? They are two different errors with two different causes.
Change it and test 8 min
This is a measurement lesson, so keep a table. Three columns: what you changed, how far off it finished, and which direction.
Run the program as written and measure. Then reset to the line and run it again. Is the error about the same size and the same direction? If it is, the error is systematic — it has a cause you could find.
Change the repeat to 1. Measure. Then change it to 10 and measure. Is the error after ten runs roughly ten times the error after one?
Set the speed to 90 %, repeat 5. Predict whether fast makes the drift better or worse, then find out.
Now try to correct it. If it always finishes short, make the backward number slightly bigger than the forward one. Find the pair of numbers that brings it back to the line after five runs.
Take your corrected numbers and run ten passes instead of five. Does the correction still work? A fix tuned to five runs usually overshoots at ten — which tells you something about what kind of fix it is.
Step 5 is the honest ending. You did not remove the error; you cancelled it out for one particular number of runs. Really fixing it would mean the robot checking where it is — with a sensor, or by reading its own motors — and that is what the next levels are for.
A robot that cannot check where it is can only ever guess, however carefully you tune the guess.
This is what you are building: the Road Roller.
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.
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)
Challenges & mission 27 min
Work through the challenges in order — each is harder than the last. The mission comes after all three, and it is meant to make you plan before you build.
Challenge 1
Measure your drift honestly. Run the out-and-back program ten times, then measure how far from the start line the roller finished and in which direction. Do the whole thing three times over and report all three results. Consistent numbers mean the error has a cause.
Challenge 2
Show that error accumulates. Measure the finishing error after 1 run, after 5 and after 10, three attempts each. Report the three averages and say whether ten runs really did produce about ten times the error of one.
Challenge 3
Correct it, then break your correction. Adjust your forward and backward numbers until the roller returns to the line after five runs. Then run the corrected program for fifteen runs and measure again. Report both, and explain why a correction tuned for five does not hold for fifteen.
Mission
Roll a strip properly, and be honest about how well you did it.
Your roller must cover a marked strip on the mat with repeated passes, finish at a station your teacher names, and be within a hand's width of where it should be. You must also hand in your measurements — the run is only half the work.
Plan on paper before you drive. Decide how many passes the strip needs and how you will know, at the end, whether you actually finished where you meant to rather than just near it.
Two questions when you demonstrate it. Which direction does your robot drift, and what in the build do you think causes it? And what would your robot need in order to fix the drift itself rather than being tuned by you?