Work in progress. These tools are new and still changing, and some parts are not yet tested on a real robot. Please try them and tell us what works and what does not.

crossbotics

Resources for FTC Teams

Free tools and designs for FIRST Tech Challenge teams, from an FTC mentor.

1FTC-Helper-Lib —
Simplify Java Coding for FTC

Get a robot driving in 30 minutes
public class Robot extends RobotDefinition {
    public Intake intake;
    public Launcher launcher;

    @Override
    protected void define() {
        drive(Drive.tank("left_drive", "right_drive")
                .motor("gobilda-5203-312").wheelMm(96)
                .reversed("right_drive"));
        intake = add(Intake.motor("intake"));
        launcher = add(Launcher.flywheel("launcher", "gobilda-5203-6000")
                .feeder(Indexer.crServo("windmill").reversed()));
    }
}

2Part Designs —
real robot parts in CAD

The swivel turret shooter v8.1GB, a render of its 3D model

Free and open source. Add FTC-Helper-Lib to your robot project in about 10 minutes, then learn it one tutorial at a time.

Get a robot driving in 30 minutes Add it to your robot projectStart the tutorials

FTC-Helper-Lib Simplify Java Coding for FTC

A free Java library that makes each job a robot needs one or two lines of clear code. Made for students who are new to Java.

Odometry (goBILDA Pinpoint, SparkFun OTOS, dead wheels) and driving to field points are built in, with Pedro Pathing support for smooth paths.

Version 0.15.0 · FTC SDK 12.0 (2026-27 BIOBUZZ) · Android Studio

Read the docs The simulator guide

R304: software from past seasons, and software made before Kickoff, is allowed.

The same code, two ways

Six jobs every FTC robot needs. Left: the plain FTC SDK. Right: FTC-Helper-Lib. Pick a tab.

Field-centric mecanum driving; the left trigger slows it, the further you squeeze it; a tap of BACK pauses and holding BACK for 1 s resets forward.

Plain FTC SDK 29 lines
DcMotor fl = hardwareMap.get(DcMotor.class, "front_left");
DcMotor fr = hardwareMap.get(DcMotor.class, "front_right");
DcMotor bl = hardwareMap.get(DcMotor.class, "back_left");
DcMotor br = hardwareMap.get(DcMotor.class, "back_right");
fl.setDirection(DcMotor.Direction.REVERSE);
bl.setDirection(DcMotor.Direction.REVERSE);
for (DcMotor m : new DcMotor[] {fl, fr, bl, br})
    m.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
IMU imu = hardwareMap.get(IMU.class, "imu");
imu.initialize(new IMU.Parameters(new RevHubOrientationOnRobot(
        RevHubOrientationOnRobot.LogoFacingDirection.UP,
        RevHubOrientationOnRobot.UsbFacingDirection.FORWARD)));
imu.resetYaw();

waitForStart();
while (opModeIsActive()) {
    if (gamepad1.back) imu.resetYaw();
    double y = -gamepad1.left_stick_y, x = gamepad1.left_stick_x;
    double turn = gamepad1.right_stick_x;
    double h = imu.getRobotYawPitchRollAngles().getYaw(AngleUnit.RADIANS);
    double fx = x * Math.cos(-h) - y * Math.sin(-h);
    double fy = x * Math.sin(-h) + y * Math.cos(-h);
    double speed = gamepad1.left_trigger > 0.5 ? 0.3 : 1.0;
    double d = Math.max(Math.abs(fy) + Math.abs(fx) + Math.abs(turn), 1);
    fl.setPower((fy + fx + turn) / d * speed);
    bl.setPower((fy - fx + turn) / d * speed);
    fr.setPower((fy - fx - turn) / d * speed);
    br.setPower((fy + fx - turn) / d * speed);
}

The rotation math, motor directions and power scaling, all by hand.

With FTC-Helper-Lib 10 lines
// Robot.java
drive(Drive.mecanum("front_left", "front_right", "back_left", "back_right")
        .imu("imu", LogoFacingDirection.UP, UsbFacingDirection.FORWARD));

// Controls.java: the whole TeleOp
@TeleOp(name = "TeleOp")
public class Controls extends ControlMap<Robot> {
    @Override protected boolean startFieldCentric() { return true; }
    @Override protected void buttons(Robot robot, Pad g1, Pad g2) { }
}

Free, with no extra code:

  • Motor directions and brake, set up for you
  • Wheel powers scaled so no wheel goes past full power
  • Field-centric driving, and a reset of “forward”
  • A slower top speed in the PRACTICE profile
  • Pause everything with a tap of BACK
  • The button map on GUIDE
  • A clear message at INIT if a motor name is wrong, or the IMU does not start

Try your robot without a robot: the simulator

A real TeleOp, running on a laptop: the goBILDA starter bot drives, turns and fires.

Your real OpModes run on a laptop against a pretend Control Hub and Driver Hub, in a browser. No robot, no field, no phone.

  • This season's field in 3D, from the official field CAD, with physics: the robot bumps into field parts and pushes game pieces; intakes take them in and launchers shoot them.
  • Your robot's real size and parts, from your Robot.java or your CAD. It checks the 18 in start cube and the 18 × 24 × 29 in limits in every pose.
  • Drive it with the keyboard, a real gamepad (USB or Bluetooth) or a phone.
  • See inside: motors, servos, switches, cameras (with the AprilTags they see) and the telemetry on the Driver Hub.
  • Odometry and Pedro paths run too: a pretend Pinpoint or OTOS, and you can make it measure wrong to see what bad tuning does.
  • Scripted tests that press buttons and check results, to catch mistakes before a meeting.
  • Four BIOBUZZ starter bots to try, from the goBILDA, REV, AndyMark and Studica kits.
  1. Add the library to your robot project (about 10 minutes).
  2. In its folder, run ./gradlew :sim:fromRobot once (it builds the simulator's robot from your Robot.java), then ./gradlew :sim:run.
  3. Open http://localhost:8780 in a browser, choose an OpMode, press INIT, then START. To drive with the keyboard, set gamepad 1's list to "Keyboard" (or click the on-screen gamepad).

The simulator guide The four starter bots

Features

  1. Motors and servos in one line. Clear errors when a name in the configuration is wrong.
  2. Buttons made easy. Tap, hold, double-tap, tap then hold, pairs and buzzes, several on one button.
  3. Mecanum and tank drive. Robot-centric or field-centric, slow mode, and autonomous moves and turns.
  4. Lifts and arms that cannot hurt themselves. Named positions, soft limits, limit switches and homing.
  5. Intakes in one line. A motor, servo wheels, or both. In, out and on/off on any button, and push out while a button is held. With the motor's encoder cable plugged in, a jam is backed out by itself.
  6. A full shooter kit. Flywheel in RPM, hood, turret with safe limits, and a feeder that waits until the shot is ready.
  7. AprilTag aiming. A webcam or a Limelight 3A, through one interface.
  8. Autonomous as a list of steps. Before the match, pick your alliance and a start delay on the Driver Station. Write the moves once: on fields where the two sides are mirror images, they flip by themselves for the other alliance. A 30-second timer keeps time to park, and a report at the end says how each step went.
  9. Odometry: know where the robot is. goBILDA Pinpoint, SparkFun OTOS or dead wheels, with a tuner that measures the offsets. Drive to field points, and TeleOp starts where autonomous ended.
  10. Smooth paths with Pedro Pathing support. Lines and curves on the field, one after another with no stop. Write a path once, and it works from either alliance's side. Pedro's tuner uses your robot's own setup, so nothing is set up twice.
  11. The whole robot in a few short files. What is on it, its numbers, its buttons and its autonomous modes, each in its own file.
  12. Live tuning. Change numbers from the gamepad while the robot runs; saved on the hub.
  13. Finders. Ready-made OpModes that measure servo ends, lift limits, flywheel gains and more, and show the code to copy.
  14. Hardware check. A ready-made OpMode that tests every motor, servo and sensor.
  15. The simulator. Your real OpModes on a laptop, with the field in 3D.

All 20 modules · Search every class and method

Start here

Part Designs real robot parts in CAD

The CAD of real FTC robot parts, made in build123d (Python), with a 3D model you can turn in the browser, the design decisions and the checks behind them, and a parts list with real part numbers.

  • Swivel turret shooter v8.1GB and v8.1, current
    Two flywheels and an adjustable hood. Two options: v8.1GB on the goBILDA Gear-Driven Turret bearing, or v8.1 with no bearing to buy (plywood base, printed ring gear). 3D model, design decisions, engineering math, parts list, CAD downloads and a shot simulator. Every older version (v1 to v8) is there too.
  • More parts coming later
    A lifter and an intake are in progress.

Open the turret