Linear vs Iterative OpModes

OpMode Types in FTC

FTC supports two main OpMode types: LinearOpMode and Iterative OpMode. Understanding the difference helps you choose the right structure for your code.

A LinearOpMode runs your code from top to bottom, like a script. An Iterative OpMode runs your code in a loop, giving you more control over timing and state.

See: gm0: OpMode Types

Key Differences

LinearOpMode vs Iterative OpMode:

  • LinearOpMode: Code runs sequentially, like a script.
  • Iterative OpMode: Code runs in repeated loop() calls.
  • LinearOpMode: Easier for beginners and autonomous routines.
  • Iterative OpMode: More control, better for advanced TeleOp.

LinearOpMode Example

A LinearOpMode is great for simple autonomous or TeleOp routines. All your code runs in the runOpMode() method, and you can use waitForStart() and sleep() for timing.

@TeleOp(name = "LinearTeleOp")
public class LinearTeleOp extends LinearOpMode {
    private DcMotor leftDrive, rightDrive;

    @Override
    public void runOpMode() {
        leftDrive = hardwareMap.get(DcMotor.class, "left_drive");
        rightDrive = hardwareMap.get(DcMotor.class, "right_drive");
        waitForStart();
        while (opModeIsActive()) {
            double leftPower = -gamepad1.left_stick_y;
            double rightPower = -gamepad1.right_stick_y;
            leftDrive.setPower(leftPower);
            rightDrive.setPower(rightPower);
            telemetry.addData("Left Power", leftPower);
            telemetry.addData("Right Power", rightPower);
            telemetry.update();
        }
    }
}

Iterative OpMode Example

An Iterative OpMode gives you more control over timing and state. You implement init() for setup and loop() for repeated logic. This is useful for advanced TeleOp and state machines.

@TeleOp(name = "IterativeTeleOp")
public class IterativeTeleOp extends OpMode {
    private DcMotor leftDrive, rightDrive;

    @Override
    public void init() {
        leftDrive = hardwareMap.get(DcMotor.class, "left_drive");
        rightDrive = hardwareMap.get(DcMotor.class, "right_drive");
    }

    @Override
    public void loop() {
        double leftPower = -gamepad1.left_stick_y;
        double rightPower = -gamepad1.right_stick_y;
        leftDrive.setPower(leftPower);
        rightDrive.setPower(rightPower);
        telemetry.addData("Left Power", leftPower);
        telemetry.addData("Right Power", rightPower);
        telemetry.update();
    }
}

When to Use Each Type

Choose based on your needs:

  • Use LinearOpMode for simple autonomous or TeleOp routines.
  • Use Iterative OpMode for advanced TeleOp with state machines or timing.
  • Start with LinearOpMode if you are new to FTC.
  • Convert to Iterative OpMode as your code grows more complex.

Converting Between Types

You can convert a LinearOpMode to an Iterative OpMode by moving your logic into the loop() method and managing state with variables. For example, if you have a sequence of actions in LinearOpMode, you can use a state variable in Iterative OpMode to step through them.

Further Reading & Resources

Next Steps

Practice: OpMode Types

Try these to reinforce your understanding:

  • Write a LinearOpMode that drives a motor.
  • Convert it to an Iterative OpMode.
  • Compare the structure and behavior of both types.

Open full interactive app