CoreControlQuickstart
The quickstart repository for programming an FTC robot with the CoreControl library. Currently supporting code for seasons up to Decode 2025-2026
Install / Use
/learn @CoreControlLib/CoreControlQuickstartREADME
NOTICE
This repository contains the public FTC SDK for the DECODE (2025-2026) competition season.
Welcome!
This GitHub repository contains the source code that is used to build an Android app to control a FIRST Tech Challenge competition robot. To use this SDK, download/clone the entire project to your local computer.
Requirements
To use this Android Studio project, you will need Android Studio Ladybug (2024.2) or later.
To program your robot in Blocks or OnBot Java, you do not need Android Studio.
Getting Started
If you are new to robotics or new to the FIRST Tech Challenge, then you should consider reviewing the FTC Blocks Tutorial to get familiar with how to use the control system:
Even if you are an advanced Java programmer, it is helpful to start with the FTC Blocks tutorial, and then migrate to the OnBot Java Tool or to Android Studio afterwards.
Downloading the Project
If you are an Android Studio programmer, there are several ways to download this repo. Note that if you use the Blocks or OnBot Java Tool to program your robot, then you do not need to download this repository.
- If you are a git user, you can clone the most current version of the repository:
-
Or, if you prefer, you can use the "Download Zip" button available through the main repository page. Downloading the project as a .ZIP file will keep the size of the download manageable.
-
You can also download the project folder (as a .zip or .tar.gz archive file) from the Downloads subsection of the Releases page for this repository.
-
The Releases page also contains prebuilt APKs.
Once you have downloaded and uncompressed (if needed) your folder, you can use Android Studio to import the folder ("Import project (Eclipse ADT, Gradle, etc.)").
Getting Help
User Documentation and Tutorials
FIRST maintains online documentation with information and tutorials on how to use the FIRST Tech Challenge software and robot control system. You can access this documentation using the following link:
FIRST Tech Challenge Documentation
Note that the online documentation is an "evergreen" document that is constantly being updated and edited. It contains the most current information about the FIRST Tech Challenge software and control system.
Javadoc Reference Material
The Javadoc reference documentation for the FTC SDK is now available online. Click on the following link to view the FTC SDK Javadoc documentation as a live website:
Online User Forum
For technical questions regarding the Control System or the FTC SDK, please visit the FIRST Tech Challenge Community site:
FIRST Tech Challenge Community
Sample OpModes
This project contains a large selection of Sample OpModes (robot code examples) which can be cut and pasted into your /teamcode folder to be used as-is, or modified to suit your team's needs.
Samples Folder: /FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples
The readme.md file located in the /TeamCode/src/main/java/org/firstinspires/ftc/teamcode folder contains an explanation of the sample naming convention, and instructions on how to copy them to your own project space.
Release Information
Version 11.0 (20250827-105138)
Enhancements
- OnBotJava now has the concept of a project.
A project is a collection of related files. A project may be chosen by selecting 'Example Project' from the 'File type:' dropdown. Doing so will populate the dropdown to the immediate right with a list of projects to choose from. When selecting a project all of the related files appear in the left pane of the workspace underneath a directory with the chosen project name. This is useful for example for ConceptExternalHardwareClass which has a dependency upon RobotHardware. This feature simplifies the usage of this Concept example by automatically pulling in dependent classes. - Adds support for AndyMark ToF, IMU, and Color sensors.
- The Driver Station app indicates if WiFi is disabled on the device.
- Adds several features to the Color Processing software:
- DECODE colors
ARTIFACT_GREENandARTIFACT_PURPLE - Choice of the order of pre-processing steps Erode and Dilate
- Best-fit preview shape called
circleFit, an alternate to the existingboxFit - Sample OpMode
ConceptVisionColorLocator_Circle, an alternate to the renamedConceptVisionColorLocator_Rectangle
- DECODE colors
- The Driver Station app play button has a green background with a white play symbol if
- the driver station and robot controller are connected and have the same team number
- there is at least one gamepad attached
- the timer is enabled (for an Autonomous OpMode)
- Updated AprilTag Library for DECODE. Notably, getCurrentGameTagLibrary() now returns DECODE tags.
- Since the AprilTags on the Obelisk should not be used for localization, the ConceptAprilTagLocalization samples only use those tags without the name 'Obelisk' in them.
- OctoQuad I2C driver updated to support firmware v3.x
- Adds support for odometry localizer on MK2 hardware revision
- Adds ability to track position for an absolute encoder across multiple rotations
- Note that some driver APIs have changed; minor updates to user software may be required
- Requires firmware v3.x. For instructions on updating firmware, see https://github.com/DigitalChickenLabs/OctoQuad/blob/master/documentation/OctoQuadDatasheet_Rev_3.0C.pdf
Version 10.3 (20250625-090416)
Breaking Changes
- The behavior of setGlobalErrorMsg() is changed. Note that this is an SDK internal method that is not meant to be used by team software or third party libraries. Teams or libraries using this method should find another means to communicate failure. The design intent of setGlobalErrorMsg() is to report an error and force the user to restart the robot, which in certain circumstances when used inappropriately could cause a robot to continue running while Driver Station controls are disabled. To prevent this, processing of a call to setGlobalErrorMsg() is deferred until the robot is in a known safe state. This may mean that a call to setGlobalErrorMsg() that does not also result in stopping a running OpMode will appear as though nothing happened until the robot is stopped, at which point, if clearGlobalErrorMsg() has not been called the message will appear on the Driver Station and a restart will be required. Addresses issue 1381
- Fixes getLatestResult in Limelight3A so if the Limelight hasn't provided data yet, it still returns an LLResult but valid will be false
- If you previously used to check and see if this was
nullto see if the Limelight had been contacted, you now need to useisValid()on the result. That is because now it always returns an LLResult even before it talks to the Limelight, but if it doesn't have valid data, theisValid()will befalse.
- If you previously used to check and see if this was
- Changed all omni samples to use front_left_drive, front_right_drive, back_left_drive, back_right_drive
- This is only breaking for you if you copy one of the changed samples to your own project and expect to use the same robot configuration as before.
Known Issues
- The redesigned OnBotJava new file workflow allows the user to use a lowercase letter as the first character of a filename. This is a regression from 10.2 which required the first character to be uppercase. Software will build, but if the user tries to rename the file, the rename will fail.
Enhancements
- Improved the OBJ new file creation flow workflow. The new flow allows you to easily use samples, craft new custom OpModes and make new Java classes.
- Added support for gamepad edge detection.
- A new sample program
ConceptGamepadEdgeDetectiondemonstrates its use.
- A new sample program
- Adds a blackboard member to the Opmode that maintains state between opmodes (but not between robot resets). See the ConceptBlackboard sample for how to use it.
- Updated PredominantColorProcessor to also return the predominant color in RGB, HSV and YCrCb color spaces. Updated ConceptVisionColorSensor sample OpMode to display the getAnalysis() result in all three color spaces.
- Adds support for the GoBilda Pinpoint
- Also adds
SensorGoBildaPinpointsample to show how to use it
- Also adds
- Added
getArcLength()andgetCircularity()to ColorBlobLocatorProcessor.Blob. Added BY_ARC_LENGTH and BY_CIRCULARITY as additional BlobCriteria. - Added
filterByCriteria()andsortByCriteria()to ColorBlobLocatorProcessor.Util.- The filter and sort methods for specific criteria have been deprecated.
- The updated sample program
ConceptVisionColorLocatorprovides more details on the new syntax.
- Add Help menu item and Help page tha
