Activity 4.10: Explore Live NetworkTables
🎯 Goal
By the end of this activity you will have:
- Connected to a running robot (or simulation) and viewed live NetworkTables data
- Identified at least 10 NetworkTables entries and traced where they come from in the code
- Documented the tables, keys, and value types your robot publishes
- Found the Limelight entries and autonomous chooser in the NetworkTables tree
Choose Your Tool
You’ll use one of these tools to browse NetworkTables. Pick whichever is available:
| Tool | How to Open | Best For |
|---|---|---|
| OutlineViewer | WPILib VS Code → Command Palette → “Start Tool” → OutlineViewer | Simple text-based browsing of all entries |
| AdvantageScope | Download from docs.advantagescope.org → connect to robot IP | Rich visualization with graphs and 3D views |
| Shuffleboard | WPILib VS Code → Command Palette → “Start Tool” → Shuffleboard | Widget-based dashboard view |
For this activity, OutlineViewer or AdvantageScope are recommended because they show the raw NetworkTables tree — every table, every key, every value.
Step 1: Connect to the Robot
- Make sure the robot is powered on and connected to your computer (via USB, Ethernet, or WiFi)
- Open your chosen tool
- Connect to the robot’s IP address:
- USB:
172.22.11.2 - WiFi/Ethernet:
10.TE.AM.2(replace TE.AM with your team number, e.g.,10.17.23.2) - Simulation:
localhostor127.0.0.1
- USB:
Once connected, you should see a tree of tables and entries populate. If nothing appears, check that the robot code is running (the Driver Station should show “Communications” green).
Step 2: Explore the SmartDashboard Table
Expand the SmartDashboard table. This is where most of your team’s published data lives. You should see entries like:
- Motor speeds and sensor readings from subsystem
periodic()methods - The autonomous chooser (look for “Auto Chooser” or similar)
- Any custom values your team publishes for debugging
Document at least 5 SmartDashboard entries:
| Key | Value (current) | Type | Where in Code? |
|---|---|---|---|
Example: Intake/Speed | 0.0 | Double | IntakeSubsystem.periodic() |
For the “Where in Code?” column, search your project for the key name (e.g., search for "Intake/Speed") to find the SmartDashboard.putNumber() call that publishes it.
Step 3: Find the Limelight Table
Look for a table called limelight (or limelight-front, limelight-back if your team has multiple cameras). Expand it and find these key entries:
| Key | What It Means | Current Value |
|---|---|---|
tv | Target visible (0 = no, 1 = yes) | |
tx | Horizontal offset to target (degrees) | |
ty | Vertical offset to target (degrees) | |
ta | Target area (% of image) | |
botpose_wpiblue | Robot pose estimate from AprilTags |
Try pointing the Limelight at an AprilTag and watch the values change in real time. The tv value should flip from 0 to 1, and tx/ty should show the offset.
If there’s no limelight table, the Limelight camera might not be connected or powered. Check:
- Is the Limelight plugged into the robot’s network switch?
- Can you access the Limelight web interface at
http://limelight.local:5801? - Is the Limelight powered? (Check the LED indicator)
If you’re running in simulation, the Limelight won’t be present — that’s expected. Focus on the SmartDashboard and other tables instead.
Step 4: Find the FMSInfo Table
Look for a table called FMSInfo. This contains match information published by the Field Management System (or the Driver Station in practice mode):
| Key | What It Means |
|---|---|
IsRedAlliance | Whether the robot is on the red alliance |
MatchNumber | Current match number |
EventName | Name of the event |
GameSpecificMessage | Game-specific data (varies by year) |
These values are read-only — they come from the FMS, not your robot code. Your code can read them using DriverStation.getAlliance() and similar methods.
Step 5: Watch Values Change
Now for the fun part. With the NetworkTables viewer open:
- Enable the robot in teleop (with the Driver Station)
- Move the joysticks — watch drivetrain-related values change
- Press a button — watch subsystem values change (intake speed, shooter RPM, etc.)
- Disable the robot — watch values return to zero or default states
This real-time view is exactly what your drive team sees on the dashboard during a match. Understanding what data is available helps you build better dashboards and debug problems faster.
Answers will vary by team, but common observations:
-
Total entries: Most FRC robots publish 50–200+ NetworkTables entries. The drivetrain alone can publish dozens (module states, odometry, speeds).
-
Most entries: Usually
SmartDashboardor the drivetrain-related table. CTRE’s swerve drivetrain publishes a lot of telemetry data automatically. -
Unexpected entries: Common surprises include CTRE’s automatic telemetry (module states, odometry), WPILib’s built-in entries (like
/LiveWindow/data), or FMS data you didn’t know was available.
Step 6: Document Your Findings
Create a summary of your robot’s NetworkTables landscape:
| Table Name | # of Entries | Purpose | Published By |
|---|---|---|---|
| SmartDashboard | Team-published data | Subsystem periodic(), RobotContainer | |
| limelight | Vision camera data | Limelight hardware | |
| FMSInfo | Match/event info | Field Management System | |
Save this document — it’s a reference for when you need to find specific data for debugging or dashboard building.
What’s Next?
You’ve now seen the data layer that connects your robot to the outside world. Every value on the dashboard, every Limelight reading, and every auto selection flows through NetworkTables.
In Lesson 4.11: FRC Game Manual for Programmers, you’ll shift from code to rules — learning the parts of the FRC Game Manual that directly affect how you write robot code, from autonomous constraints to safety rules.
In Lesson 4.11: FRC Game Manual for Programmers, you’ll shift from code to rules — learning the parts of the FRC Game Manual that directly affect how you write robot code, from autonomous constraints to safety rules.