-
Notifications
You must be signed in to change notification settings - Fork 3
Servo Presets
The idea of servo presets is to replace "magic numbers" (numbers whose purpose is not obvious) with named servo positions. For example, instead of 7.341
, you can write ArmServoPresets.LEFT
-- much more readable.
Another feature of the servo presets is that you can modify the preset values without changing the app and re-uploading to the phone.
The way these two features are implemented is that each servo has an enum of presets:
//this stores all the possible values for the arm servo
public enum ArmServoPresets {
LEFT,
MIDDLE,
RIGHT
}
and each RobotCfg has a list of servos, each of which has a hardware name (such as "armServo"
) and a list of presets determined from the enum (such as ArmServoPresets.values()
)
To actually enter the preset values, you need to make and run a ServoTuneOp:
/sample/v3/SampleServoTuneOp.java
package org.firstinspires.ftc.teamcode.sample.v3;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import ftc.evlib.hardware.config.RobotCfg;
import ftc.evlib.opmodes.AbstractServoTuneOp;
/**
* This file was made by the electronVolts, FTC team 7393
* Date Created: 10/18/16
*
* This opmode is very short since the superclass, AbstractServoTuneOp does most of the work. It
* allows you to change your servo presets without changing the code and re-deploying it to the
* phone. This means that you can swap out a servo and re-tune it without having to go into the
* program and fix magic numbers. Note: It only works if you use presets everywhere instead of
* hardcoded values.
*
* How to use:
* Select this opmode from the TeleOp menu and run it.
* Use the dpad up and down to cycle through all the servos
* Use the dpad left and right to move through the presets for that servo.
* Press start to save the current preset of the current servo to the current value.
*
* The presets are saved in files that are retrieved when you run other opmodes to find the value of each preset.
*
*/
@TeleOp(name="SampleServoTuneOp")
public class SampleServoTuneOp extends AbstractServoTuneOp {
@Override
protected RobotCfg createHardwareCfg() {
//create a new SampleRobotConfig and return it.
//the superclass will extract the servos and do the rest.
return new SampleRobotCfg(hardwareMap);
}
}
The details of how the servos are initialized are in the next step: Adding Servos to the Configuration
This guide will step through the basics of how to set up OpModes using EVLib.
- Importing Into Your Project
- Sample Code
- Using EVLib Minimally
- Logging Example
- Robot Configuration
- Basic TeleOp Program
- Basic Autonomous Program
- Customizing StateMachineBuilder
- Servo Presets
- Adding Servos to the Configuration
- Adding Servos to TeleOp
- Adding Servos to Autonomous
- Vuforia and OpenCV Beacon Color Detection