Avoidance
Overview
AvoidanceController
manages a set of VectorField
objects to provide drive power corrections for obstacle avoidance or field-based behaviors.
Creating an AvoidanceController
// Create VectorFields
VectorField field1 = new VectorField(0, 0, 10);
VectorField field2 = new VectorField(20, 10, 8);
// Initialize AvoidanceController with fields
AvoidanceController avoidanceController = new AvoidanceController(field1, field2);
Adding and Removing Fields
avoidanceController.addField(new VectorField(30, 15,5));
avoidanceController.
removeField(field1);
Using in Your OpMode
// Get drive coefficients for the robot's current position
Point robotPosition = new Point(5, 7);
DrivePowerCoefficients coefs = avoidanceController.update(robotPosition);
// Use coefs to set wheel power
Drawing Fields (Dashboard Visualization)
avoidanceController.drawFields();
Checking if a Point is in a Field
boolean isInField = avoidanceController.inField(robotPosition) != null;
Note:
update(point)
returnsDrivePowerCoefficients
for the current field, or zeros if not in any field.Each
VectorField
can be configured for X, Y, BOTH, or OFF avoidance using theavoidanceVectorType
parameter.
Example: Minimal OpMode
import org.firstinspires.ftc.teamcode.ggutil.AvoidanceController;
import org.firstinspires.ftc.teamcode.ggutil.VectorField;
import org.gentrifiedApps.gentrifiedAppsUtil.classes.drive.DrivePowerCoefficients;
import org.gentrifiedApps.gentrifiedAppsUtil.classes.generics.pointClasses.Point;
public class AvoidanceExample {
public void run() {
AvoidanceController avoidanceController = new AvoidanceController(new VectorField(0, 0, 10));
Point robotPosition = new Point(0, 5);
DrivePowerCoefficients coefs1 = // your coefs
DrivePowerCoefficients coefs2 = avoidanceController.update(robotPosition);
// Use coefs for driving logic
// set power to coefs1.applyAvoidance(coefs2);
}
}
Last modified: 22 May 2025