All Projects → Team254 → FRC-2019-Public

Team254 / FRC-2019-Public

Licence: MIT license
Public release of Backlash's 2019 FRC Code

Programming Languages

java
68154 projects - #9 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to FRC-2019-Public

pynetworktables2js
Forwards NetworkTables traffic to a web page, allowing you to write custom dashboards for your robot using HTML/Javascript
Stars: ✭ 40 (-35.48%)
Mutual labels:  frc
photonvision
PhotonVision is the free, fast, and easy-to-use computer vision solution for the FIRST Robotics Competition.
Stars: ✭ 115 (+85.48%)
Mutual labels:  frc
first-rust-competition
Rusty Robots: https://crates.io/crates/wpilib and https://crates.io/crates/cargo-frc
Stars: ✭ 45 (-27.42%)
Mutual labels:  frc
frc-score-detection
A program to detect FRC match scores from their livestream.
Stars: ✭ 15 (-75.81%)
Mutual labels:  frc
thirdcoast
Third Coast swerve drive and telemetry API for FRC robots
Stars: ✭ 35 (-43.55%)
Mutual labels:  frc
pathplanner
UI for generating trajectories with Pathfinder, based off of Vannaka's Motion Profile Generator
Stars: ✭ 21 (-66.13%)
Mutual labels:  frc
roborio-vm
Scripts to create QEMU virtual machine from the RoboRIO image file
Stars: ✭ 33 (-46.77%)
Mutual labels:  frc
NU18
Code for 2018's robot.
Stars: ✭ 13 (-79.03%)
Mutual labels:  frc
FRC-Krawler
FIRST Robotics scouting app brought to you by Team 2052
Stars: ✭ 20 (-67.74%)
Mutual labels:  frc
pyfrc
python3 library designed to make developing RobotPy-based code easier!
Stars: ✭ 46 (-25.81%)
Mutual labels:  frc
FRC-NT-Client
WPI NetworkTables Client for Node
Stars: ✭ 20 (-67.74%)
Mutual labels:  frc
roborio-opencv
Scripts to build OpenCV for the RoboRIO
Stars: ✭ 13 (-79.03%)
Mutual labels:  frc
frc-characterization
Tools to help FRC teams measure the physical parameters of their robot
Stars: ✭ 55 (-11.29%)
Mutual labels:  frc
examples
Repository of RobotPy example projects
Stars: ✭ 25 (-59.68%)
Mutual labels:  frc
robotics-training
Team 1257's repository for training new members
Stars: ✭ 18 (-70.97%)
Mutual labels:  frc
StuyLib
Award-Winning FRC Library by StuyPulse Team 694
Stars: ✭ 17 (-72.58%)
Mutual labels:  frc
FRC-Java-Tutorial
A tutorial on how to program a robot for use in the FIRST Robotics Competition
Stars: ✭ 52 (-16.13%)
Mutual labels:  frc
robotpy-cscore
Python bindings for the cscore image processing library
Stars: ✭ 17 (-72.58%)
Mutual labels:  frc
PowerUp-2018
The FRC 2018 programming repository for FRC Team 3695, Foximus Prime
Stars: ✭ 16 (-74.19%)
Mutual labels:  frc
shuffleboard
A modern dashboard for FRC
Stars: ✭ 70 (+12.9%)
Mutual labels:  frc

FRC 2019

Team 254's 2019 FRC robot code for Backlash. Backlash's code is written in Java and is based off of WPILib's Java control system.

The code is divided into several packages, each responsible for a different aspect of the robot function. This README explains setup instructions, the function of each package, and some of the variable naming conventions used. Additional information about each specific class can be found in that class' Java file.

Setup Instructions

General

  1. Clone this repo
  2. Run ./gradlew to download gradle and needed FRC/Vendor libraries
  3. Run ./gradlew tasks to see available options
  4. Enjoy!

Visual Studio Code (Official IDE)

  1. Get the WPILib extension for easiest use from the VSCode Marketplace - Requires Java 11 or greater
  2. In .vscode/settings.json, set the User Setting, java.home, to the correct directory pointing to your JDK 11 directory

IntelliJ

  1. Run ./gradlew idea
  2. Open the FRC-2019-Public.ipr file with IntelliJ

Eclipse

  1. Run ./gradlew eclipse
  2. Open Eclipse and go to File > Open Projects from File System...
  3. Set the import source to the FRC-2019-Public folder then click finish

Basic Gradle Commands

  • Run ./gradlew deploy to deploy to the robot in Terminal (*nix) or Powershell (Windows)
  • Run ./gradlew build to build the code. Use the --info flag for more details
  • Run ./gradlew test to run all of the JUnit tests

Code Highlights

  • Path following with an adaptive pure pursuit controller and motion profiling

    To control autonomous driving, the robot utilizes an adaptive pure pursuit controller to control steering and a custom trapezoidal motion profile generator and follower to control velocity.

  • Motion planner that constrains superstructure motion to within the frame perimeter

    To keep the superstructure within the frame perimeter during movements that may be dangerous, the robot follows a tuck motion planner, named because it tucks the wrist down before moving the rest of the superstructure, until it is safe to untuck.

  • Limelight-based vision system for target detection

    The robot used 2 Limelights, toggled through a manager class, to find and track vision targets. Information about targets were used to auto steer the robot towards vision targets through a P feedback loop, which was used mainly for driving to the loading station, or to auto aim the turret for scoring on the rockets and cargo ship.

  • Prismatic superstructure motion to mimic a linear actuator

    The robot used the vision system to identify the scoring position, and synchronized the arm and elevator motion to move the end effector forward, while maintaining the same wrist angle and height. This allowed the robot to score over defenders.

  • Suction climbing through a state machine

    The robot's suction climbing mechanism at the FIRST Championship in Houston was controlled through a state machine, that regulated each step of the climbing process. The suction was created through a vacuum with feedback about the pressure provided through a digital pressure switch.

  • Field relative turret

    To allow for easier and more accurate use of the turret, the turret could be controlled relative to the field, which uses the robot's gyro heading to turn to cardinal directions.

Package Functions

  • com.team254.frc2019

    Contains the robot's central functions and holds a class with all numerical constants used throughout the code (see Constants.java). For example, the Robot class controls all routines depending on the robot mode. In addition, the RobotState class keeps track of the current position of the robot's various frames of reference.

  • com.team254.frc2019.auto

    Handles the execution of autonomous routines and contains the actions and modes packages.

  • com.team254.frc2019.auto.actions

    Contains all actions used during the autonomous period, which all share a common interface, Action (also in this package). Examples include driving paths, auto aiming the turret and scoring, and auto steering. Actions interact with the subsystems, which in turn interact with the hardware.

  • com.team254.frc2019.auto.modes

    Contains all autonomous modes. Autonomous modes consist of a list of autonomous actions executed in a specific order.

  • com.team254.frc2019.controlboard

    Contains code for the driver to use either joysticks or gamepad and the operator to use a gamepad. Also contains a wrapper class specifically for Xbox controllers (see XboxController.java).

  • com.team254.frc2019.loops

    Contains codes for loops, which are routines that run periodically on the robot, such as for calculating robot pose, processing vision feedback, or updating subsystems. All loops implement the Loop interface and are handled (started, stopped, added) by the Looper class, which runs at 100 Hz. The Robot class has one main looper, mEnabledLooper, that runs all loops when the robot is enabled.

  • com.team254.frc2019.paths

    Contains all paths that the robot drives during autonomous mode. Each path is made up of a list of Waypoint objects. The PathBuilder class, which is also included in this package, transforms these waypoints into a series of Arc and Line objects.

  • com.team254.frc2019.planners

    Contains various planners for superstructure motion to avoid superstructure collisions with itself or the drivebase.

  • com.team254.frc2019.statemachines

    Contains the state machines for the end effector, overall superstructure, and two climbing mechanisms.

  • com.team254.frc2019.states

    Contains states and other classes used in various subsystem and state machine classes.

  • com.team254.frc2019.subsystems

    Contains code for subsystems, which are consolidated into one central class per subsystem, all of which extend the Subsystem abstract class. Each subsystem uses state machines for control and is a singleton, meaning that there is only one instance of each. Subsystems also contain an enabled loop, a read periodic inputs method, and a write periodic outputs method, which are controlled by the SubystemManager class.

  • com.team254.lib.control

    Contains all the classes used for the robot's path following. The robot's steering is controlled by the AdaptivePurePursuitController class.

  • com.team254.lib.drivers

    Contains a set of custom classes for motor controllers (TalonSRX's and Spark MAX's) that include classes for creating motor controllers with factory default settings, handling errors, reducing CAN Bus usage, and checking motors.

  • com.team254.lib.geometry

    Contains a set of classes that represent various geometric entities.

  • com.team254.lib.motion

    Contains all motion profiling code used for autonomous driving. Trapezoidal motion profiles are used for smooth acceleration and minimal slip.

  • com.team254.lib.physics

    Contains the DriveCharacterization class which represents the characterization for specifically a differential drivetrain. While this class did not end up being used during this season, it differs from 2018, so is being released, nonetheless.

  • com.team254.lib.util

    Contains a collection of assorted utilities classes used in the robot code. Check each file for more information.

  • com.team254.lib.vision

    Contains various classes that help with tracking and storing information about vision targets.

  • com.team254.lib.wpilib

    Contains parent classes of the main Robot class that get rid of loop overrun and watchdog print messages that clutter the console.

Variable Naming Conventions

  • k*** (i.e. kDriveWheelTrackWidthInches): Final constants, especially those found in the Constants.java file
  • m*** (i.e. mPathFollower): Private instance variables
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].