FRC + FTC · systems overview · 2027 control system

From your hands
to the wheels

Every robot command crosses six or seven pieces of hardware before a motor turns. Here is the whole path, what owns each link, and what you actually do with it on a build night and on a match day.

control — commands going out telemetry — data coming back

Companion to the SystemCore guide and the Commands V3 guide.

Part 1

Get your bearings

The pieces, what each one is for, and where they physically sit.

The whole chain

What happens when you push the stick

Push forward on a gamepad at a competition and the signal crosses seven handoffs before a wheel moves. Most of what goes wrong on a field is one of these links, not your code — so it is worth being able to name them in order. Click any box.

Behind the glass
The field owns this
On the robot

The driver

Everything starts as a human decision. Worth stating plainly because it is the part teams tune last: a robot that is technically faster but harder to aim loses to one the driver can place confidently.

Link into it
Who controls ityour team
When it breaksPractice time is the only fix.

Fig. 1The control path at a competition. At home the middle zone disappears entirely — which is the single biggest difference between a robot that works in the shop and one that works on a field.

The question everyone asks first

Which machine is running what?

Your robot program does not run on your laptop. That one sentence clears up most early confusion — the laptop writes the code and watches the results, but the robot executes it. The exception is simulation, which runs everything on the laptop and needs no robot at all.

On your laptop

VS CodeWhere you write and build code. Also where the blocks editor lives, if you use blocks.
Driver station appEnables and disables the robot, picks the op mode, shows battery, ping, and alerts.
DashboardsElastic for the drivers during a match; AdvantageScope for digging through data afterwards.
SimulationRuns your actual robot program on the laptop, with no hardware. This is how you learn the 2027 changes before a SystemCore exists.

On the robot

Your robot programDeployed over the network, stored on the controller, started when the robot powers on.
The command schedulerRuns every command you scheduled, roughly every 20 ms, and enforces which mechanism belongs to whom.
Vision pipelinesAprilTag processing on the controller itself, or on a separate co-processor if you use one.
Log filesWritten to a USB drive plugged into the controller, collected after the match.
Web editors and dashboardsNew in 2027: the controller can serve VS Code, the blocks editor, and web AdvantageScope to a browser, so a Chromebook is enough.

Fig. 2The split matters most when something is broken: a laptop problem and a robot problem look identical from the driver station, and knowing which side a tool lives on tells you where to look.

Geography

Where everyone actually stands

Worth seeing once from above, because the arrangement explains several rules that otherwise sound arbitrary — why you cannot touch your robot, why your laptop is wired rather than wireless, and why the only thing crossing the field boundary is radio.

station 1 you station 3 station 1 station 2 station 3 BLUE ALLIANCE RED ALLIANCE your robot wireless field radio FMS (wired) laptop plugs in here

Fig. 3Six teams, six laptops, all wired to the same field management system; one shared wireless link out to every robot. Your robot is the only part of your setup on the far side of that wireless hop, which is why a problem out there cannot be fixed by anything you do at the keyboard.

Part 2

The robot as a machine

Power in, sensors back: what the robot does without anyone talking to it.

Before any of it works

Everything hangs off one battery

A robot has one battery, and every part of the chain that lives on the robot draws from it — the controller, the radio, and the motors that can pull hundreds of amps between them. Software people can ignore this right up until the moment they cannot, because the failure it produces looks exactly like a software bug.

When several motors pull hard at once, the battery voltage sags. Sag far enough and the controller resets: your code restarts mid-match, comms drop for a moment, and the robot goes limp and then comes back. That is a brownout, and no amount of reading your command code will explain it — the evidence is in the voltage trace in your log.

BATTERY one, per match MAIN BREAKER the off switch DISTRIBUTION fuses and breakers per branch SystemCore brownouts here radio comms drop too motors the big draw

Fig. 4FRC robots use a power distribution board fed by the main breaker; in FTC the MotionCore hub does this job, taking the battery in and handing power out alongside CAN on the same connectors. Either way: log your battery voltage from day one, because it explains failures nothing else will.

The other direction

Nothing moves open-loop for long

The chain above runs one way, but a robot is a circle. You command a motor, the mechanism moves, a sensor measures what actually happened, and your code uses that number to decide what to command next. That circle closes roughly every 20 milliseconds, and it is the reason a command can say “drive two meters” instead of “run the motor for 1.4 seconds and hope.”

It is also why logging is not an optional extra. The values coming back are the same values your code is steering by — when the robot misbehaves, you are reading the inputs to a decision, not just a status display.

YOUR CODE on SystemCore CAN a message CONTROLLER current to the motor MECHANISM actually moves SENSOR encoder, gyro, camera the loop closes about every 20 ms log file dashboard

Fig. 5The same sensor reading does two jobs: it steers the next command, and it is what you read afterwards to understand the match. Solid lines are commands going out; dashed lines are measurements coming back.

Part 3

The link to your laptop

Two computers, one network connection, and four conversations across it.

The conversation

What the robot and your laptop say to each other

Start here, because everything else on this page depends on it: your laptop and your robot are two computers on a network. Nothing is plugged into the robot in the sense of a cable carrying joystick movement. They find each other by network address — the controller’s own screen shows you its address — and then they exchange small packets, many times a second, for as long as the robot is on.

There are four separate conversations happening over that one connection, and it helps to keep them apart, because they fail independently.

DRIVER STATION your laptop SYSTEM CORE on the robot 1  control packet — about 50 times a second every stick axis, every button, the mode, and one enable bit 2  status packet — the reply battery voltage, is code running, round-trip time 3  NetworkTables — your telemetry whatever you logged, streamed to your dashboard 4  code deploy — shop and pit only a file transfer; never during a match

Fig. 6One network connection, four independent conversations. A dashboard that stops updating means channel three broke; a robot that stops moving means channel one did. They are not the same failure and they do not have the same fix.

The part that explains the most

Enable is not a switch on the robot — it is a bit inside that first packet, arriving fifty times a second. So the robot is not waiting to be told to stop. It is running because something keeps telling it to keep going, and if those packets stop arriving — radio drops, laptop sleeps, cable pulled — the controller disables the motors on its own within a fraction of a second. This is why “we lost comms” and “the robot went limp” are the same sentence, and it is deliberate: a robot that lost contact with its drivers should not keep driving.

At a competition the shape stays the same, with one change of authority: the enable bit is no longer yours. Your joystick values still travel to your robot the same way, but FMS decides whether that enable bit is set, and your driver station follows the field’s instructions about which mode to run.

Channel three, up close

NetworkTables is a shared whiteboard

This name turns up everywhere, so it is worth pinning down. NetworkTables is a set of named values that lives on the robot and stays in sync with every program watching it. Your code writes arm/angle = 42.7; a dashboard on your laptop sees 42.7 a few milliseconds later. Nobody asked for it and nobody sent a request — the value simply changed in a place both sides can see.

The name is literal, and slightly unfortunate. The tables are two-column tables of data — a name on the left, a value on the right — and network only describes how those values travel between machines. Names are written like file paths, so arm/angle and arm/setpoint sit together in an arm table — the “subtables” you see mentioned elsewhere.

If the name makes you think of network configuration — routing tables, firewall rules, anything in that family — set that aside. NetworkTables configures nothing and filters nothing. It carries your robot’s numbers, and that is all it does.

ON THE ROBOT THE TABLE arm/angle42.7 arm/setpoint45.0 drive/speed2.1 vision/hasTagtrue tuning/kP0.05 values are overwritten, never stored WATCHING IT driver dashboard what the drivers watch mid-match AdvantageScope live graphs while you test anything you write a script, a custom tool and they can write back — tuning a constant without redeploying code

Fig. 7The robot holds the table; every tool is a client watching it. Several can watch at once, and each sees the same values change in real time.

Three consequences worth carrying around:

  • It is not a recording. Each value is overwritten by the next one. Look away and the moment is gone — which is exactly why DataLog writes a file alongside it. NetworkTables is the “watch it now” half; the log is the “read it later” half.
  • Everything you publish crosses the radio. On a field that link is shared with five other robots, so publishing a hundred values because you might want them is not free. Log generously to the file; stream sparingly over the network.
  • It runs both ways. Mostly the robot writes and dashboards read, but a dashboard can write too. That is how a tuning value gets changed while the robot sits on blocks, without a rebuild and redeploy.

So when you meet NetworkTables in the telemetry API, in a dashboard’s setup screen, or in a list of what a tool connects to, it is always this same whiteboard being read or written from a different seat.

Two very different days

The shop network and the field network

The same robot, the same laptop, and two completely different arrangements. Nearly every "it worked in the shop" story lives in the gap between these two diagrams.

In the shop

LaptopUSB-C, ethernet, or the robot's own Wi-Fi SystemCoreCAN and smart IO Motors and sensors

You are in charge. You deploy new code whenever you like, you enable and disable the robot yourself from the driver station app, and you can leave a laptop tethered while it runs on blocks.

At a competition

Laptopfield ethernet at the player station FMSthe event's own wireless network Robot radio → SystemCoreCAN and smart IO Motors and sensors

The field is in charge. FMS decides when your robot is enabled, which mode it is in, and when the match ends. You cannot enable your own robot on the field, and you do not deploy code out there — code changes happen in the pit.

Fig. 8FTC differs here: matches run without an FMS, so the driver station's own match mode steps through autonomous and driver control on a timer. The rest of the chain is the same.

Part 4

Working with it

The cycle you repeat all season, what match day looks like, and what to check when it breaks.

The loop you will repeat all season

Write, deploy, enable, look at the data

01WriteEdit code on the laptop in VS Code, or in the browser served from the robot.
02BuildCompiles on your machine. The compiler plugin catches missing yields and unnamed commands here.
03DeploySends the program over USB-C, ethernet, or Wi-Fi to the controller, where it restarts.
04EnableFrom the driver station: pick an op mode, choose teleop or autonomous, enable.
05WatchLive values stream back over NetworkTables to your dashboard while it runs.
06AnalyzePull the log afterwards and scrub through it in AdvantageScope. Then back to step one.

Fig. 9Steps one to four push outward; five and six come back. Getting the return half working early — logging real values from day one — is what makes the rest of the season debuggable.

Match day

Who is in control, minute by minute

The handover of control is the part nobody explains to a rookie programmer. You own the robot completely right up until it is on the field, and then you own almost none of it until the match ends.

Stage In the pit Queue On the field Autonomous Driver control After
You do Deploy code, run utility op modes, check systems, charge a battery. Pick your autonomous op mode. Last chance for changes. Plug into the player station, confirm comms and code are green. Nothing. Hands off the sticks. Drive. Watch the dashboard, not the laptop. Collect the robot, pull the log, find out what actually happened.
Field does FMS takes over your driver station and locks the mode. Enables every robot at once, runs the autonomous timer. Switches to teleop and starts the clock. Disables everything and releases the field.

Fig. 10Period lengths are set by each year's game manual and are not assumed here. The important part is the shape: your control ends at the field edge, and the only thing you carry away is the log.

When it does not work

Map the symptom to the link

The value of knowing the chain is that most failures announce which link they are. These are the common ones and where they sit on the chain in Fig. 1.

What you seeWhich linkWhere to look
No communication at allradio ↔ fieldThe wireless link or the robot radio — not your code. Check radio power and lights before touching anything software.
Comms good, no codeSystemCoreThe program crashed or was never deployed. The controller's own screen and the driver station console tell you which.
Robot enabled, one mechanism deadCAN or powerA device missing from the CAN bus, a blown fuse, or a loose connector. The rest of the robot working is the clue.
Everything works, wrong behavioryour codeNow it is yours. Pull the log and read which commands actually ran and when — this is what the scheduler telemetry is for.
Works tethered, fails on the fieldthe field networkBandwidth, latency, or something that only exists on your bench. Stream less over the network and log more to the file.
Fine in autonomous, dead in teleopop mode / bindingsThe teleop op mode you selected, or its bindings. Different mode, different class, different defaults.
Two safety habits

Anyone can call for a robot to be disabled, and on a field the emergency stop is always available at the player station — know where it is before you need it. In the shop, put the robot on blocks before enabling it, and say “enabling” out loud so nobody has a hand in a mechanism when it moves.

Naming things

The vocabulary, in one place

TermLivesWhat it actually is
Driver stationlaptopThe application that enables the robot and shows its status. Also the physical spot behind the glass where drivers stand.
FMSthe eventField Management System. Runs the match, controls every robot's enable state, and reports what happened.
SystemCorerobotThe controller running your program, required in FRC from 2027 and arriving in FTC a season later.
Op modeyour codeA selectable program — one autonomous routine, one teleop layout, one test routine — chosen from the driver station.
Commandyour codeOne piece of robot behavior the scheduler runs, owning the mechanisms it needs while it runs.
NetworkTablesthe linkThe live data channel between robot and dashboards. Bandwidth-limited on a field.
DataLogrobotThe recorded log file, written on the robot, read afterwards in AdvantageScope.
CAN busrobotThe daisy-chained wiring that carries commands to motor controllers and readings back from devices.