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

Trajectory Generation and Following with WPILib¶

This section describes WPILib support for generating parameterized spline trajectories and following those trajectories with typical FRC® robot drives.

  • Trajectory Generation
  • Trajectory Constraints
  • Manipulating Trajectories
  • Transforming Trajectories
  • LTV Unicycle Controller
  • Troubleshooting
Next
Trajectory Generation
Previous
Bang-Bang Control with BangBangController
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 May 14, 2026