Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
⚠️ DRAFT — This site is a work in progress and does not reflect final 2027 documentation. Content may be incomplete or inaccurate.
WPILib Documentation documentation
WPILib Documentation
Logo?
3320
FRC FTC Shared

Start Here

  • New to WPILib
  • Returning Teams
  • Zero to Robot
    • Step 1: Build and Wire Your Robot
      • Kitbot / Starter Bot Assembly
      • FRC Robot Wiring Walkthrough
      • FTC Robot Wiring Walkthrough
      • FRC Robot Wiring Reference
      • FTC Robot Wiring Reference
    • Step 2: Set Up Your Environment
      • Offline Installation Preparation
      • Installing the FIRST Driver Station
      • WPILib Installation Guide
      • Python Installation Guide
      • Next Steps
    • Step 3: Configure Your Control System
      • Imaging your Systemcore
      • Programming your Radio
      • Using the OpenMesh OM5P Radio
    • Step 4: Write and Drive
      • Create Your Test Drivetrain Program
      • Running Your Test Program

Reference

  • 2027 Overview
    • Known Issues
    • New for 2027
    • Quick Start for Returning Teams
    • 2026 Game Data Details
    • Removed features
  • API Reference
  • Support Resources
  • Troubleshooting
  • FRC Glossary

Programming Fundamentals

  • What is WPILib?
  • Software Component Overview
  • Basic Programming
    • Git Version Control Introduction
    • The C++ Units Library
    • The Java Units Library
    • Joysticks
    • Coordinate System
    • Setting Robot Preferences
    • Robot Project Deploy Directory
    • Reading Stacktraces
    • Treating Functions as Data
    • OpMode Framework
    • Get Alliance Color
    • Java Garbage Collection
    • Using Utility Mode
  • 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
      • Encoders - Software
      • Analog Inputs - Software
      • Analog Potentiometers - Software
      • Digital Inputs - Software
      • Programming Limit Switches
    • Miscellaneous Hardware APIs
      • Addressable LEDs
  • Command-Based Programming
    • Commands v2 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
    • Commands v3 Programming
      • Creating Commands
      • How the Scheduler Works
      • Using Lambda Functions
      • Making Commands Run
      • Command Mechanisms
      • Migrating from Commands v2
      • Scopes
      • State Machines with Commands
      • Structuring Your Project
      • Telemetry with Commands
      • Command Triggers
      • Troubleshooting Commands
  • RobotPy Python Programming
    • Python Installation Guide
    • Installing the FIRST Driver Station
    • pyproject.toml usage
    • RobotPy subcommands
      • Deploy Python program to roboRIO
  • Programming Snippets
  • WPILib Example Projects
  • Third Party Example Projects

Tools, Dashboards, and Networking

  • 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
  • 3rd Party Libraries
  • FIRST Driver Station
    • FIRST Driver Station Introduction
    • Driver Station (Operator Console) Best Practices
    • Driver Station Log File Viewer
    • Driver Station Errors/Warnings
    • Driver Station Debug Graph
    • Manually Setting the Driver Station to Start Custom Dashboard
  • Dashboards
    • Choosing a Dashboard
    • Glass
      • Introduction to Glass
      • Establishing NetworkTables Connections
      • Glass Widgets
      • Widgets for the Command-Based Framework
      • The Field2d Widget
      • The Mechanism2d Widget
      • Plots
    • AdvantageScope
    • Elastic
    • 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
    • On-Robot Telemetry Recording Into Data Logs
    • Downloading & Processing Data Logs
    • Third-Party Telemetry Libraries
  • OutlineViewer
  • WPIcal
  • Networking Introduction
    • Networking Basics
    • IP Configurations
    • Systemcore Network Troubleshooting
    • Windows Firewall Configuration
    • Measuring Bandwidth Usage
  • Networking Utilities
    • Port Forwarding

Robot Behavior and Autonomy

  • Kinematics and Odometry
    • Introduction to Kinematics and The ChassisVelocities Class
    • Differential Drive Kinematics
    • Differential Drive Odometry
    • Swerve Drive Kinematics
    • Swerve Drive Odometry
    • Mecanum Drive Kinematics
    • Mecanum Drive Odometry
  • Path Planning
    • Choreo
  • 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
      • 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
  • 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

Control Systems

  • FTC with WPILib
  • Getting Started with XRP
    • XRP Hardware, Assembly, and Imaging
    • Getting to know your XRP
    • XRP Hardware Support
    • The XRP Web UI
    • Programming the XRP
  • 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

Hardware and Wiring

  • Hardware Component Overview
  • Control System Hardware Overview
  • Status Light Quick Reference
  • CAN Devices
    • Using CAN Devices
    • Pneumatics Control Module
    • Pneumatic Hub
    • Power Distribution Module
    • Third-Party CAN Devices
    • FIRST CAN Device Specifications

Contributing

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

PR CHANGED FILES

  • API Reference
  • Style Guide
  • Hardware Component Overview
  • Software Component Overview
  • FTC Robot Wiring Walkthrough
  • FTC Robot Wiring Reference
  • FTC with WPILib
  • Control System Hardware Overview
  • Robot Battery Basics
  • IP Configurations
  • Port Forwarding
  • Programming the Romi
  • Bang-Bang Control with BangBangController
  • Combining Feedforward and PID Control
  • Feedforward Control in WPILib
  • PID Control in WPILib
  • Combining Motion Profiling and PID Control with ProfiledPIDController
  • Trapezoidal Motion Profiles in WPILib
  • Debouncer
  • Linear Filters
  • Median Filter
  • Slew Rate Limiter
  • Translation, Rotation, and Pose
  • Transformations
  • Debugging State-Space Models and Controllers
  • State-Space Controller Walkthrough
  • State Observers and Kalman Filters
  • Creating an Identification Routine
  • Trajectory Constraints
  • LTV Unicycle Controller
  • Trajectory Generation
  • Transforming Trajectories
  • Including Git Data in Deploy
  • Profiling with VisualVM
  • Get Alliance Color
  • Coordinate System
  • The C++ Units Library
  • Robot Project Deploy Directory
  • Treating Functions as Data
  • Basic Programming
    • Git Version Control Introduction
    • The C++ Units Library
    • The Java Units Library
    • Joysticks
    • Coordinate System
    • Setting Robot Preferences
    • Robot Project Deploy Directory
    • Reading Stacktraces
    • Treating Functions as Data
    • OpMode Framework
    • Get Alliance Color
    • Java Garbage Collection
    • Using Utility Mode
  • Java Garbage Collection
  • Joysticks
  • OpMode Framework
  • Setting Robot Preferences
  • FIRST CAN Device Specifications
  • Binding Commands to Triggers
  • Command Compositions
  • The Command Scheduler
  • Commands
  • A Technical Discussion on C++ Commands
  • Commands v2 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
  • Organizing Command-Based Robot Projects
  • PID Control in Command-based
  • Motion Profiling in Command-based
  • Combining Motion Profiling and PID in Command-Based
  • Structuring a Command-Based Robot Project
  • Subsystems
  • What Is “Command-Based” Programming?
  • Creating Commands
  • How the Scheduler Works
  • Commands v3 Programming
    • Creating Commands
    • How the Scheduler Works
    • Using Lambda Functions
    • Making Commands Run
    • Command Mechanisms
    • Migrating from Commands v2
    • Scopes
    • State Machines with Commands
    • Structuring Your Project
    • Telemetry with Commands
    • Command Triggers
    • Troubleshooting Commands
  • Using Lambda Functions
  • Making Commands Run
  • Command Mechanisms
  • Migrating from Commands v2
  • Scopes
  • State Machines with Commands
  • Structuring Your Project
  • Telemetry with Commands
  • Command Triggers
  • Troubleshooting Commands
  • Command-Based Programming
    • Commands v2 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
    • Commands v3 Programming
      • Creating Commands
      • How the Scheduler Works
      • Using Lambda Functions
      • Making Commands Run
      • Command Mechanisms
      • Migrating from Commands v2
      • Scopes
      • State Machines with Commands
      • Structuring Your Project
      • Telemetry with Commands
      • Command Triggers
      • Troubleshooting Commands
  • AdvantageScope
  • Widgets for the Command-Based Framework
  • The Field2d Widget
  • Introduction to Glass
  • The Mechanism2d Widget
  • Glass Widgets
  • WPILib Example Projects
  • Driver Station (Operator Console) Best Practices
  • Driver Station Debug Graph
  • Driver Station Errors/Warnings
  • FIRST Driver Station Introduction
  • Driver Station Log File Viewer
  • FIRST Driver Station
    • FIRST Driver Station Introduction
    • Driver Station (Operator Console) Best Practices
    • Driver Station Log File Viewer
    • Driver Station Errors/Warnings
    • Driver Station Debug Graph
    • Manually Setting the Driver Station to Start Custom Dashboard
  • Manually Setting the Driver Station to Start Custom Dashboard
  • FRC Glossary
  • Addressable LEDs
  • Repeatable Low Power Movement - Controlling Servos with WPILib
  • Using Motor Controllers in Code
  • Using the WPILib Classes to Drive your Robot
  • Generating and Storing Pressure
  • Analog Inputs - Software
  • Analog Potentiometers - Software
  • Digital Inputs - Software
  • Gyroscopes - Software
  • Programming Limit Switches
  • Differential Drive Kinematics
  • Differential Drive Odometry
  • Kinematics and Odometry
    • Introduction to Kinematics and The ChassisVelocities Class
    • Differential Drive Kinematics
    • Differential Drive Odometry
    • Swerve Drive Kinematics
    • Swerve Drive Odometry
    • Mecanum Drive Kinematics
    • Mecanum Drive Odometry
  • Introduction to Kinematics and The ChassisVelocities Class
  • Mecanum Drive Kinematics
  • Mecanum Drive Odometry
  • Swerve Drive Kinematics
  • Swerve Drive Odometry
  • Creating a Client-side Program
  • Listening for Changes
  • NetworkTables Instances
  • NetworkTables Networking
  • Migrating from NetworkTables 3.0 to NetworkTables 4.0
  • Publishing and Subscribing to a Topic
  • Reading Array Values Published by NetworkTables
  • Writing a Simple NetworkTables Robot Program
  • NetworkTables Tables and Topics
  • Programming Snippets
  • RobotPy Python Programming
    • Python Installation Guide
    • Installing the FIRST Driver Station
    • pyproject.toml usage
    • RobotPy subcommands
      • Deploy Python program to roboRIO
  • Troubleshooting
  • Systemcore
    • Systemcore Introduction
    • Imaging your Systemcore
    • Systemcore Web Dashboard
    • roboRIO FTP
    • Systemcore SSH
    • roboRIO Brownout and Understanding Current Draw
  • Systemcore SSH
  • Downloading & Processing Data Logs
  • On-Robot Telemetry Recording Into Data Logs
  • Recording Faults with Persistent Alerts
  • AprilTag Introduction
    • What Are AprilTags?
    • WPIcal
  • Using Multiple Cameras
  • Basic Vision Example
  • Using CameraServer
  • Working with Contours
  • 3rd Party Libraries
  • Creating a Robot Program
  • What is WPILib?
  • 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
  • Step 4: Updating Odometry and Visualizing Robot Position
  • Step 3: Updating the Drivetrain Model
  • Introduction to Robot Simulation
  • Physics Simulation with WPILib
  • Unit Testing
  • WPIcal
  • Getting Started with XRP
    • XRP Hardware, Assembly, and Imaging
    • Getting to know your XRP
    • XRP Hardware Support
    • The XRP Web UI
    • Programming the XRP
  • Programming the XRP
  • 2026 Game Data Details
  • Known Issues
  • Removed features
  • Quick Start for Returning Teams
  • New for 2027
  • Zero to Robot
    • Step 1: Build and Wire Your Robot
      • Kitbot / Starter Bot Assembly
      • FRC Robot Wiring Walkthrough
      • FTC Robot Wiring Walkthrough
      • FRC Robot Wiring Reference
      • FTC Robot Wiring Reference
    • Step 2: Set Up Your Environment
      • Offline Installation Preparation
      • Installing the FIRST Driver Station
      • WPILib Installation Guide
      • Python Installation Guide
      • Next Steps
    • Step 3: Configure Your Control System
      • Imaging your Systemcore
      • Programming your Radio
      • Using the OpenMesh OM5P Radio
    • Step 4: Write and Drive
      • Create Your Test Drivetrain Program
      • Running Your Test Program
  • New to WPILib
  • Returning This Season
  • FRC Robot Wiring Walkthrough
  • Step 1: Build and Wire Your Robot
    • Kitbot / Starter Bot Assembly
    • FRC Robot Wiring Walkthrough
    • FTC Robot Wiring Walkthrough
    • FRC Robot Wiring Reference
    • FTC Robot Wiring Reference
  • FRC Robot Wiring Reference
  • Kitbot / Starter Bot Assembly
  • Installing the FIRST Driver Station
  • Step 2: Set Up Your Environment
    • Offline Installation Preparation
    • Installing the FIRST Driver Station
    • WPILib Installation Guide
    • Python Installation Guide
    • Next Steps
  • Offline Installation Preparation
  • Python Installation Guide
  • WPILib Installation Guide
  • Imaging your Systemcore
  • Step 3: Configure Your Control System
    • Imaging your Systemcore
    • Programming your Radio
    • Using the OpenMesh OM5P Radio
  • Using the OpenMesh OM5P Radio
  • Programming your Radio
  • Create Your Test Drivetrain Program
  • Step 4: Write and Drive
    • Create Your Test Drivetrain Program
    • Running Your Test Program
  • Running Your Test Program
  • Software Tools
    • Systemcore
      • Systemcore Introduction
      • Imaging your Systemcore
      • Systemcore Web Dashboard
      • roboRIO FTP
      • Systemcore SSH
      • roboRIO Brownout and Understanding Current Draw
    • FIRST Driver Station
      • FIRST Driver Station Introduction
      • Driver Station (Operator Console) Best Practices
      • Driver Station Log File Viewer
      • Driver Station Errors/Warnings
      • Driver Station Debug Graph
      • Manually Setting the Driver Station to Start Custom Dashboard
    • Dashboards
      • Choosing a Dashboard
      • Glass
        • Introduction to Glass
        • Establishing NetworkTables Connections
        • Glass Widgets
        • Widgets for the Command-Based Framework
        • The Field2d Widget
        • The Mechanism2d Widget
        • Plots
      • AdvantageScope
      • Elastic
      • Troubleshooting Dashboard Connectivity
    • 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
Back to top
View this page
Edit this page

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
Next
Control System Basics
Previous
A Video Walkthrough of Model Based Validation of Autonomous in FRC
Copyright © 2026, FIRST and other WPILib Contributors. This work is licensed under a Creative Commons Attribution 4.0 International License
Made with Sphinx and @pradyunsg's Furo
Last updated on Jan 05, 2025