Recent Updates

  • Manual FRC 2019 Beta
  • Updated on: Jul 24, 2018

    VS Code Basics and WPILib in VS Code

    Manual FRC 2019 Beta
  • Updated on: Jul 24, 2018

    Alpha Test Info

    Manual FRC 2019 Beta
  • Updated on: Jul 21, 2018

    FRC Control System Hardware Overview

  • Updated on: Jul 21, 2018

    FRC Control System Hardware Overview

    The goal of this document is to provide a brief overview of the hardware components that make up the 2016 FRC Control System. Each component will contain a brief description of the component function, a brief listing of critical connections, and a link to more documentation if available. Note that for complete wiring instructions/diagrams, please see the Wiring the 2017 Control System document.

  • Updated on: Jun 18, 2018

    Driving a robot using Mecanum drive

  • Updated on: Jun 18, 2018

    Driving a robot using Mecanum drive

    Mecanum drive is a method of driving using specially designed wheels that allow the robot to drive in any direction without changing the orientation of the robot. A robot with a conventional drivetrain (all wheels pointing in the same direction) must turn in the direction it needs to drive. A mecanum robot can move in any direction without first turning and is called a holonomic drive.

  • Updated on: Jun 16, 2018

    Scheduling commands

  • Updated on: Jun 16, 2018

    Scheduling commands

    Commands are scheduled to run based on a number of factors such as triggers, default commands when no other running commands require a subsystem, a prior command in a group finishes, button presses, autonomous period starting, etc. Although many commands may be running virtually at the same time, there is only a single thread (the main robot thread). This is to reduce the complexity of synchronization between threads. There are threads that run in the system for systems like PID loops, communications, etc. but those are all self contained with very little interaction requiring complex synchronization. This makes the system much more robust and predictable.

    This is accomplished by a class called Scheduler. It has a run() method that is called periodically (typically every 20ms in response to a driver station update) that tries to make progress on every command that is currently running. This is done by calling the execute() method on the command followed by the isFinished() method. If isFinished() returns true, the command is marked to be removed from execution  on the next pass through the scheduler. So if there are a number of commands all scheduled to run at the same time, then every time the Scheduler.run() method is called, each of the active commands execute() and isFinished() methods are called. This has the same effect as using multiple threads.

  • Updated on: Jun 14, 2018

    FRC CAN Addressing