NOTICE
This repository contains the public FTC SDK for the BIOBUZZ (2026-2027) 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 Narwhal 3 Feature Drop 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:
FTC Blocks Online Tutorial
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:
git clone https://github.com/FIRST-Tech-Challenge/FtcRobotController.git
-
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:
FTC Javadoc Documentation
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 12.0 (20260907-090034)
Breaking Changes
- The new AprilTag Cluster capability breaks legacy AprilTag OpModes resulting in compile errors for software that uses AprilTagDetection objects in both Android Studio and OnBot Java.
-
Legacy AprilTag OpModes must be updated to check whether the returned AprilTag is a cluster or singleton,
and cast the returned detection into the correct type to access its elements. See below:
Old method for AprilTag processing
for (AprilTagDetection detection : currentDetections) {
// Do single Tag processing here
}
New method for AprilTag Singleton/Cluster processing
for (AprilTagDetection detection : currentDetections) {
if (detection instanceof AprilTagSingleDetection) {
AprilTagSingleDetection singleDet = (AprilTagSingleDetection) detection;
// Do single Tag processing here
} else {
AprilTagClusterDetection clusterDet = (AprilTagClusterDetection) detection;
// Do cluster Tag processing here
}
}
For more information about how to update your OpModes to fix the breaking change see: https://ftc-docs.firstinspires.org/apriltag-clusters
-
About AprilTag clusters:
- Clusters are co-planar groups of two or more AprilTags wherein the position of each member tag is defined relative to a common origin
- This origin may be placed outside the bounds of the tags themselves to provide a more suitable "aiming" target
- Clusters are resilient to partial occlusion. Full 6DOF pose can be estimated from a cluster even if only a single member tag is visible. Of course, the more tags that are visible, the better and more stable the pose estimate will be
- All AprilTag samples have been updated to differentiate between standalone tags and clusters
Enhancements
- Adds a tree view for robot configurations issue 1821
- Gamepad indicators on the Driver Station are now colored orange if the respective gamepads are connected to the Android generic gamepad driver instead of the Driver Station's usermode USB driver
- Updated AprilTag Library for BIOBUZZ. Notably, getCurrentGameTagLibrary() now returns BIOBUZZ tags.
- In BIOBUZZ, the Origin of each cluster is located in the center of the Cell opening for easy aiming.
- The Origin X,Y & Z Axes are now displayed by default on the preview image.
- Unfortunately, since BIOBUZZ AprilTags move, they are not suitable for absolute Field Localization.
- Supports OctoQuad MK2 firmware v3.1.0, which adds diagnostics parameters for the IMU and MCU uptime
Bug Fixes
- Fixes issue 2078 where battery
voltage was not updated on driver station if OpMode did not send any telemetry.
Version 11.2.1 (20260724-093406)
Bug Fixes
- Fixes issue 2099. Gradle and the AGP are now updated to 9.1 and 8.13.2 respectively.
Version 11.2 (20260707-102819)
Breaking Changes
- Gradle is upgraded to v9.1 and the Android Gradle Plugin is updated to v8.13.2. AGP v8.13.2 requires Android Studio Narwhal 3 Feature Drop or later. Earlier versions of Android Studio will fail to sync the project. Older versions of Android Studio may prompt the user to downgrade AGP. Do not do this. Gradle v9.1 removed support for features that older versions of the AGP use. Updating Gradle fixes a Windows 11 problem some teams may encounter if they have agressive security software installed on their machine. For more context see this Gradle issue
Enhancements
- New type of OpMode is now available. (
@Utility)
- Utility opmodes that are not disabled will show up in the Utility menu (requires 11.2 or later DS and RC)
- TestHardware Utility now available
- It allows you to test all servos, CR servos, motors, Color sensors, distance sensors, touch sensors, IMUs, webcams, and analog sensors in the config
- TestGamepad Utility now available
- It allows you to see the results of your two gamepads to make sure it is what you expect and find problems with your gamepads.
- Adds methods to PwmControl interface to allow you to setPulseWidth and getPulseWidth
- Both of these are in microseconds (uSeconds)
- This is an ADVANCED feature. There is not a supporting sample.
- NOTE: You may see a slight difference since the hardware is not accurate to the microsecond
- Adds ability to set UVC camera "quirks" from user code to control compatibility flags used inside the low level UVC driver. Addresses issue 1428
- Changes Apriltag Axis Display order on camera preview screen, to reflect updated Z axis direction.
- The Driver Station app init button has a light teal background with the word init 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)
Bug Fixes
- Fixes issue 1949 overwriting the group with the default group when registering a OpMode with OpModeManager.register(OpModeMeta name, Class<? extends OpMode> clazz)
- Fixes issue mentioned in 1890 where if
for a servo you change the direction or scaleRange and send the same setPosition that was sent
before, then it wouldn't update the servo.
- Fixes an issue where Self-Inspect doesn't flag a driver station using -RC in it's name. The message is now:
- The team numbers in the robot controller and driver station names do not match, or a device name is invalid. Refer to the FTC Competition Manual for device naming rules.
Version 11.1 (20251231-104637)
Enhancements
- Gamepad triggers can now be accessed as booleans and have edge detection supported.
- GoBildaPinpointDriver now supports Pinpoint v2 functionality
- Adds webcam calibrations for goBILDA's USB camera.
Bug Fixes
- Fixes issue [1654](https://github.com/F