Class CharacterizerOpMode

java.lang.Object
com.qualcomm.robotcore.eventloop.opmode.OpMode
com.qualcomm.robotcore.eventloop.opmode.LinearOpMode
com.crossbotics.ftchelper.finders.FinderOpMode
com.crossbotics.ftchelper.finders.CharacterizerOpMode

public abstract class CharacterizerOpMode extends FinderOpMode
Measures how the real robot moves, so the simulator (and your code) can use real numbers: for the drivetrain, each lift or arm, and each flywheel, it finds the feedforward numbers (kS = power to start moving, kV = power per speed, kA = power per speeding-up, kG = power to hold a lift) and how fast a flywheel coasts down. It gives each motor slow ramps of power and quick steps, logs the battery, power and speed, and fits the numbers (see CharacterizeMath).
 D-pad up/down = choose a test, A = run it, B = stop it now.
   Drive: ramps forward then back, then quick steps. About 5 ft clear in FRONT and BEHIND.
   Turn:  turns in place both ways (needs the IMU).
   Each lift/arm from mechanisms(): start it at the BOTTOM. It moves between your soft limits.
   Each flywheel: spins up slowly, coasts, spins up fast, coasts. Hands and pieces away.
 
The results are lines for the simulator's robot file and Feedforward lines for your code; they are saved with the other finders' results. Each test's log is saved too (characterizer/*.csv in the same folder) for the simulator's fit tool. In your TeamCode:

 @TeleOp(name = "Characterizer", group = "Finders")
 public class Characterizer extends CharacterizerOpMode {
     protected RobotConfig robotConfig() { return new RobotSettings(); }
     protected List<Mechanism> mechanisms() {
         return Arrays.asList(Mechanism.lift("lift", 0, 2700), Mechanism.flywheel("flywheel"));
     }
 }
 
Docs: docs/modules/finders.md ("Characterizer"). Guide: docs/guides/simulator.md ("Real numbers")
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static final class 
    A lift, arm or flywheel to measure.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    com.qualcomm.robotcore.hardware.Gamepad
     
    com.qualcomm.robotcore.hardware.Gamepad
     
    com.qualcomm.robotcore.hardware.HardwareMap
     
    static final int
     
    int
    Deprecated.
    org.firstinspires.ftc.robotcore.external.Telemetry
     

    Fields inherited from class com.crossbotics.ftchelper.finders.FinderOpMode

    results, t

    Fields inherited from class com.qualcomm.robotcore.eventloop.opmode.OpMode

    blackboard, msStuckDetectInit, msStuckDetectInitLoop, msStuckDetectLoop, msStuckDetectStart, time
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    Binds gamepad 1 buttons.
    protected double
    The highest power the drive and turn ramps reach (default 0.4, at most 0.5).
    protected String
    The finder's name, e.g.
    protected String[]
    The help page: every button and the steps, a line each (at most 13 lines, about 50 characters each, to fit on the Driver Station).
    protected int
    The farthest the drive test may roll in one go, in wheel counts (default 2500: about 4.5 ft with 312 rpm motors and 104 mm wheels; fewer feet with smaller counts per inch).
    The lifts, arms and flywheels to measure.
    final void
     
    protected abstract RobotConfig
    Your robot's settings (drive motors, IMU).
    protected void
    Sets up the hardware, in INIT.
    protected void
    The finder's own screen lines, every loop.
    protected void
    What INIT shows (the controls, a safety note).
    protected void
    Runs once every loop after the buttons: moves things, measures.
    protected void
    Stops every motor and servo it moves.

    Methods inherited from class com.crossbotics.ftchelper.finders.FinderOpMode

    helpKeyDown, inputsReady, openHelp, pause, runOpMode

    Methods inherited from class com.qualcomm.robotcore.eventloop.opmode.LinearOpMode

    idle, init, init_loop, isStarted, isStopRequested, loop, opModeInInit, opModeIsActive, sleep, start, stop, waitForStart

    Methods inherited from class com.qualcomm.robotcore.eventloop.opmode.OpMode

    getRuntime, internalPostInitLoop, internalPostLoop, internalPreInit, internalUpdateTelemetryNow, resetRuntime, terminateOpModeNow, updateTelemetry

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MS_BEFORE_FORCE_STOP_AFTER_STOP_REQUESTED

      public static final int MS_BEFORE_FORCE_STOP_AFTER_STOP_REQUESTED
      See Also:
    • gamepad1

      public volatile com.qualcomm.robotcore.hardware.Gamepad gamepad1
    • gamepad2

      public volatile com.qualcomm.robotcore.hardware.Gamepad gamepad2
    • telemetry

      public org.firstinspires.ftc.robotcore.external.Telemetry telemetry
    • hardwareMap

      public volatile com.qualcomm.robotcore.hardware.HardwareMap hardwareMap
    • msStuckDetectStop

      @Deprecated public int msStuckDetectStop
      Deprecated.
  • Constructor Details

    • CharacterizerOpMode

      public CharacterizerOpMode()
  • Method Details

    • robotConfig

      protected abstract RobotConfig robotConfig()
      Your robot's settings (drive motors, IMU).
    • mechanisms

      protected List<CharacterizerOpMode.Mechanism> mechanisms()
      The lifts, arms and flywheels to measure. Default: none (drive and turn only).
    • driveRampMax

      protected double driveRampMax()
      The highest power the drive and turn ramps reach (default 0.4, at most 0.5). Lower it for a small space.
    • maxDriveCounts

      protected int maxDriveCounts()
      The farthest the drive test may roll in one go, in wheel counts (default 2500: about 4.5 ft with 312 rpm motors and 104 mm wheels; fewer feet with smaller counts per inch). A ramp or step that gets this far ends early. Lower it for a small space.
    • finderName

      protected String finderName()
      Description copied from class: FinderOpMode
      The finder's name, e.g. "Servo finder".
      Specified by:
      finderName in class FinderOpMode
    • setup

      protected void setup()
      Description copied from class: FinderOpMode
      Sets up the hardware, in INIT. Nothing may move here.
      Specified by:
      setup in class FinderOpMode
    • showInit

      protected void showInit(RobotTelemetry t)
      Description copied from class: FinderOpMode
      What INIT shows (the controls, a safety note).
      Overrides:
      showInit in class FinderOpMode
    • helpLines

      protected String[] helpLines()
      Description copied from class: FinderOpMode
      The help page: every button and the steps, a line each (at most 13 lines, about 50 characters each, to fit on the Driver Station). GUIDE (or START held 1 s) shows it, in INIT or while running. Default: a page that says there is no help yet.
      Overrides:
      helpLines in class FinderOpMode
    • bind

      protected void bind(ControllerBindings c)
      Description copied from class: FinderOpMode
      Binds gamepad 1 buttons. Actions must be quick: never wait.
      Specified by:
      bind in class FinderOpMode
    • step

      protected void step()
      Description copied from class: FinderOpMode
      Runs once every loop after the buttons: moves things, measures. Never waits.
      Specified by:
      step in class FinderOpMode
    • show

      protected void show(RobotTelemetry t)
      Description copied from class: FinderOpMode
      The finder's own screen lines, every loop.
      Specified by:
      show in class FinderOpMode
    • stopAll

      protected void stopAll()
      Description copied from class: FinderOpMode
      Stops every motor and servo it moves. Called at the end, always.
      Specified by:
      stopAll in class FinderOpMode
    • requestOpModeStop

      public final void requestOpModeStop()