• FRC Game Manual
  • FRC Game Q&A
FIRST Robotics Competition Logo

Zero to Robot

  • Introduction
  • Step 1: Building your Robot
    • Introduction to FRC Robot Wiring
  • Step 2: Installing Software
    • Offline Installation Preparation
    • Installing LabVIEW for FRC (LabVIEW only)
    • Installing the FRC Game Tools
    • WPILib Installation Guide
    • Python Installation Guide
    • Next Steps
  • Step 3: Preparing Your Robot
    • Imaging your roboRIO 2
    • Imaging your roboRIO 1
    • Programming your Radio
    • Using the OpenMesh OM5P Radio
  • Step 4: Programming your Robot
    • Creating your Test Drivetrain Program (LabVIEW)
    • Creating your Test Drivetrain Program (Java/C++/Python)
    • Running your Test Program

Control System Overviews

  • Hardware Component Overview
  • Software Component Overview

Programming Basics

  • What is WPILib?
  • 2025 Overview
    • Known Issues
    • New for 2025
    • Quick Start for Returning Teams
  • VS Code Overview
    • Visual Studio Code Basics and the WPILib Extension
    • WPILib Commands in Visual Studio Code
    • Creating a Robot Program
    • 3rd Party Libraries
    • Building and Deploying Robot Code
    • Viewing Console Output
    • Debugging a Robot Program
    • Importing Last Year’s Robot Code
  • Dashboards
    • Choosing a Dashboard
    • Shuffleboard
      • Shuffleboard - Getting Started
        • Tour of Shuffleboard
        • Displaying data from your robot
        • Displaying Camera Streams
        • Working with widgets
        • Working with Lists
        • Creating and manipulating tabs
        • Working with Graphs
        • Recording and Playback
        • Setting global preferences for Shuffleboard
        • Shuffleboard FAQ, issues, and bugs
      • Shuffleboard - Layouts with Code
        • Using tabs
        • Sending data
        • Retrieving data
        • Configuring widgets
        • Organizing Widgets
      • Shuffleboard - Advanced Usage
        • Commands and Subsystems
        • Testing and Tuning PID Loops
        • Viewing Hierarchies of Data
      • Shuffleboard - Custom Widgets
        • Built-in Plugins
        • Creating a Plugin
        • Creating Custom Data Types
        • Creating A Widget
        • Custom Themes
        • Widget Types
    • SmartDashboard
      • SmartDashboard Introduction
      • Displaying Expressions from a Robot Program
      • Changing the display properties of a value
      • Changing the Display Widget Type for a Value
      • Choosing an Autonomous Program
      • Displaying the Status of Commands and Subsystems
      • Verifying SmartDashboard is working
      • SmartDashboard Namespace
      • SmartDashboard: Test Mode and Live Window
        • Displaying LiveWindow Values
        • Enabling Test mode (LiveWindow)
        • PID Tuning with SmartDashboard
    • Glass
      • Introduction to Glass
      • Establishing NetworkTables Connections
      • Glass Widgets
      • Widgets for the Command-Based Framework
      • The Field2d Widget
      • The Mechanism2d Widget
      • Plots
    • AdvantageScope
    • Elastic
    • LabVIEW Dashboard
      • FRC LabVIEW Dashboard
      • Using the LabVIEW Dashboard with C++, Java, or Python Code
      • Troubleshooting Dashboard Connectivity
    • Troubleshooting Dashboard Connectivity
  • Telemetry
    • Telemetry: Recording and Sending Real-Time Data
    • New for 2025: Robot Telemetry with Annotations (Java Only)
    • Recording Faults with Persistent Alerts
    • Robot Telemetry with Sendable
    • On-Robot Telemetry Recording Into Data Logs
    • Downloading & Processing Data Logs
    • Writing Your Own Sendable Classes
    • Third-Party Telemetry Libraries
  • FRC LabVIEW Programming
    • Installing LabVIEW for FRC (LabVIEW only)
    • Installing the FRC Game Tools
    • Creating Robot Programs
      • Creating your Test Drivetrain Program (LabVIEW)
      • Tank Drive Tutorial
      • Command and Control Tutorial
    • LabVIEW Resources
      • LabVIEW Resources
      • Waiting for Target to Respond - Recovering from bad loops
      • How To Toggle Between Two Camera Modes
      • LabVIEW Examples and Tutorials
      • Add an Independent Motor to a Project
      • Keyboard Navigation with the roboRIO
      • Making a One-Shot Button Press
      • Adding Safety Features to Your Robot Code
      • How to Use Joystick Buttons to Control Motors or Solenoids
      • Local and Global Variables in LabVIEW for FRC
      • Using the Compressor in LabVIEW
  • FRC Python Programming
    • Python Installation Guide
    • Installing the FRC Game Tools
    • pyproject.toml usage
    • RobotPy subcommands
      • Deploy Python program to roboRIO
  • Hardware APIs
    • Motors APIs
      • Using Motor Controllers in Code
      • PWM Motor Controllers in Depth
      • Using the WPILib Classes to Drive your Robot
      • Repeatable Low Power Movement - Controlling Servos with WPILib
    • Pneumatics APIs
      • Operating Pneumatic Cylinders
      • Generating and Storing Pressure
    • Sensors
      • Sensor Overview - Software
      • Accelerometers - Software
      • Gyroscopes - Software
      • Ultrasonics - Software
      • Counters
      • Encoders - Software
      • Analog Inputs - Software
      • Analog Potentiometers - Software
      • Digital Inputs - Software
      • Programming Limit Switches
    • Miscellaneous Hardware APIs
      • Addressable LEDs
  • CAN Devices
    • Using CAN Devices
    • Pneumatics Control Module
    • Pneumatic Hub
    • Power Distribution Module
    • Third-Party CAN Devices
    • FRC CAN Device Specifications
  • Basic Programming
    • Git Version Control Introduction
    • The C++ Units Library
    • The Java Units Library
    • Joysticks
    • Coordinate System
    • Setting Robot Preferences
    • Robot Project Deploy Directory
    • Using Test Mode
    • Reading Stacktraces
    • Treating Functions as Data
    • Get Alliance Color
    • Java Garbage Collection
  • Support Resources
  • FRC Glossary

API Docs

  • WPILib Java API Docs
  • WPILib C++ API Docs
  • WPILib Python API Docs

Software Tools

  • Driver Station
    • FRC Driver Station Powered by NI LabVIEW
    • Driver Station Best Practices
    • Driver Station Log File Viewer
    • Driver Station Errors/Warnings
    • Driver Station Timing Viewer
    • Manually Setting the Driver Station to Start Custom Dashboard
  • RobotBuilder
    • RobotBuilder - Introduction
      • RobotBuilder Overview
      • Starting RobotBuilder
      • RobotBuilder User Interface
      • Setting up the Robot Project
      • Creating a Subsystem
      • Creating a Command
      • Setting the Autonomous Commands
      • Using Shuffleboard to Test a Command
      • Connecting the Operator Interface to a Command
      • RobotBuilder Created Code
    • RobotBuilder - Writing the Code
      • Generating Code for a Project
      • Writing the Code for a Subsystem
      • Writing the Code for a Command
      • Driving the Robot with Tank Drive and Joysticks
    • RobotBuilder - Advanced
      • Using PIDSubsystem to Control Actuators
      • Writing the Code for a PIDSubsystem
      • Setpoint Command
      • Adding Custom Components
  • Robot Simulation
    • Introduction to Robot Simulation
    • Simulation Specific User Interface Elements
    • Glass Widgets
    • Widgets for the Command-Based Framework
    • The Field2d Widget
    • Plots
    • Physics Simulation with WPILib
    • Device Simulation
    • Drivetrain Simulation Tutorial
      • Drivetrain Simulation Overview
      • Step 1: Creating Simulated Instances of Hardware
      • Step 2: Creating a Drivetrain Model
      • Step 3: Updating the Drivetrain Model
      • Step 4: Updating Odometry and Visualizing Robot Position
    • Unit Testing
  • OutlineViewer
  • roboRIO Team Number Setter
  • WPIcal

Advanced Programming

  • Vision Processing
    • Vision Introduction
      • What is Vision?
      • Strategies for Vision Programming
      • Target Info and Retroreflection
      • Identifying and Processing the Targets
      • Read and Process Video: CameraServer Class
      • 2017 Vision Examples
    • Vision with WPILibPi
      • A Video Walkthrough of using WPILibPi with the Raspberry Pi
      • Using a Coprocessor for vision processing
      • Using the Raspberry Pi for FRC
      • What you need to get the Pi image running
      • Installing the image to your MicroSD card
      • The Raspberry PI
      • Using CameraServer
      • Thresholding an Image
      • Morphological Operations
      • Working with Contours
      • Basic Vision Example
    • AprilTag Introduction
      • What Are AprilTags?
    • Vision on the RoboRIO
      • Using the CameraServer on the roboRIO
      • Using Multiple Cameras
      • CameraServer Web Interface
  • Command-Based Programming
    • What Is “Command-Based” Programming?
    • Commands
    • Command Compositions
    • Subsystems
    • Binding Commands to Triggers
    • Structuring a Command-Based Robot Project
    • Organizing Command-Based Robot Projects
    • The Command Scheduler
    • A Technical Discussion on C++ Commands
    • PID Control in Command-based
    • Motion Profiling in Command-based
    • Combining Motion Profiling and PID in Command-Based
  • Kinematics and Odometry
    • Introduction to Kinematics and The ChassisSpeeds Class
    • Differential Drive Kinematics
    • Differential Drive Odometry
    • Swerve Drive Kinematics
    • Swerve Drive Odometry
    • Mecanum Drive Kinematics
    • Mecanum Drive Odometry
  • NetworkTables
    • What is NetworkTables
    • NetworkTables Tables and Topics
    • Publishing and Subscribing to a Topic
    • NetworkTables Instances
    • NetworkTables Networking
    • Listening for Changes
    • Writing a Simple NetworkTables Robot Program
    • Creating a Client-side Program
    • Migrating from NetworkTables 3.0 to NetworkTables 4.0
    • Reading Array Values Published by NetworkTables
  • Path Planning
    • Trajectory Tutorial
      • Trajectory Tutorial Overview
      • Step 1: Characterizing Your Robot Drive
      • Step 2: Entering the Calculated Constants
      • Step 3: Creating a Drive Subsystem
      • Step 4: Creating and Following a Trajectory
    • PathWeaver
      • Introduction to PathWeaver
      • Creating a Pathweaver Project
      • Visualizing PathWeaver Trajectories
      • Creating Autonomous Routines
      • Importing a PathWeaver JSON
      • Adding field images to PathWeaver
    • Choreo
  • roboRIO
    • roboRIO Introduction
    • Imaging your roboRIO 1
    • Imaging your roboRIO 2
    • roboRIO Web Dashboard
    • roboRIO FTP
    • roboRIO User Accounts and SSH
    • roboRIO Brownout and Understanding Current Draw
    • Recovering a roboRIO using Safe Mode
    • Additional Help
  • Advanced GradleRIO
    • Using External Libraries with Robot Code
    • Setting up CI for Robot Code using GitHub Actions
    • Using a Code Formatter
    • Gradlew Tasks
    • Including Git Data in Deploy
    • Using Compiler Arguments
    • Profiling with VisualVM
    • JVM Runtime error
  • Advanced Controls
    • A Video Walkthrough of Model Based Validation of Autonomous in FRC
    • Advanced Controls Introduction
      • Control System Basics
      • Picking a Control Strategy
      • Introduction to DC Motor Feedforward
      • Introduction to PID
      • PID Introduction Video by WPI
      • Introduction To Controls Tuning Tutorials
      • Tuning a Flywheel Velocity Controller
      • Tuning a Turret Position Controller
      • Tuning a Vertical Arm Position Controller
      • Tuning a Vertical Elevator with Motion Profiling
      • Common Control Loop Tuning Issues
    • Filters
      • Introduction to Filters
      • Linear Filters
      • Median Filter
      • Slew Rate Limiter
      • Debouncer
    • Geometry Classes
      • Translation, Rotation, and Pose
      • Transformations
    • System Identification
      • Introduction to System Identification
      • Creating an Identification Routine
      • Running the Identification Routine
      • Loading Data
      • Viewing Diagnostics
      • Analyzing Data
      • Additional Utilities and Tools
    • Controllers
      • PID Control in WPILib
      • Feedforward Control in WPILib
      • Combining Feedforward and PID Control
      • Trapezoidal Motion Profiles in WPILib
      • Combining Motion Profiling and PID Control with ProfiledPIDController
      • Bang-Bang Control with BangBangController
    • Trajectory Generation and Following with WPILib
      • Trajectory Generation
      • Trajectory Constraints
      • Manipulating Trajectories
      • Transforming Trajectories
      • LTV Unicycle Controller
      • Ramsete Controller
      • Holonomic Drive Controller
      • Troubleshooting
    • State-Space and Model Based Control with WPILib
      • Introduction to State-Space Control
      • State-Space Controller Walkthrough
      • State Observers and Kalman Filters
      • Pose Estimators
      • Debugging State-Space Models and Controllers
    • Controls Glossary
  • Convenience Features
    • Scheduling Functions at Custom Frequencies
    • Event-Based Programming With EventLoop

Examples and Tutorials

  • WPILib Example Projects
  • Third Party Example Projects

Hardware

  • Hardware - Basics
    • Hardware Component Overview
    • Introduction to FRC Robot Wiring
    • Wiring Best Practices
    • CAN Wiring Basics
    • Wiring Pneumatics - CTRE Pneumatic Control Module
    • Wiring Pneumatics - REV Pneumatic Hub
    • Status Light Quick Reference
    • Robot Preemptive Troubleshooting
    • Robot Battery Basics
  • Hardware Tutorials
    • Motors for Robotics Applications
    • Sensing and Sensors
    • Pneumatics
    • Power Transmission
  • Sensors
    • Sensor Overview - Hardware
    • Analog Inputs - Hardware
    • Analog Potentiometers - Hardware
    • Digital Inputs - Hardware
    • Proximity Switches - Hardware
    • Encoders - Hardware
    • Gyroscopes - Hardware
    • Ultrasonics - Hardware
    • Accelerometers - Hardware
    • LIDAR - Hardware
    • Triangulating Rangefinders
    • Serial Buses

Romi and XRP Support

  • Getting Started with Romi
    • Romi Hardware & Assembly
    • Imaging your Romi
    • Getting to know your Romi
    • Romi Hardware Support
    • The Romi Web UI
    • Programming the Romi
    • Programming the Romi (LabVIEW)
  • Getting Started with XRP
    • XRP Hardware, Assembly and Imaging
    • Getting to know your XRP
    • XRP Hardware Support
    • The XRP Web UI
    • Programming the XRP

Robot Networking

  • Networking Introduction
    • Networking Basics
    • IP Configurations
    • roboRIO Network Troubleshooting
    • Windows Firewall Configuration
    • Measuring Bandwidth Usage
  • Networking Utilities
    • Port Forwarding

Contributing

  • Contributing to frc-docs
    • Contribution Guidelines
    • Style Guide
    • Build Instructions
    • Draw.io Saving Instructions
    • Translations
    • Top Contributors
    • Top Translators
  • Developing with allwpilib
    • Overview
    • Styleguide & wpiformat
    • Building with CMake
    • Using Development Builds
    • Maven Artifacts
    • Contributor Guidelines
    • NetworkTables 4 Protocol Spec

Legal

  • Privacy Policy

Issues

  • Report a Documentation Issue
FIRST Robotics Competition
  • RobotBuilder
  • RobotBuilder - Introduction
  • Present
  • Edit on GitHub

RobotBuilder - Introduction

  • RobotBuilder Overview
  • Starting RobotBuilder
  • RobotBuilder User Interface
  • Setting up the Robot Project
  • Creating a Subsystem
  • Creating a Command
  • Setting the Autonomous Commands
  • Using Shuffleboard to Test a Command
  • Connecting the Operator Interface to a Command
  • RobotBuilder Created Code
Previous Next

© Copyright 2025, FIRST and other WPILib Contributors. This work is licensed under a Creative Commons Attribution 4.0 International License. Last updated on Aug 17, 2024.

Built with Sphinx using a theme provided by Read the Docs.