trajectory/ballistics/models/ConstantBM: Save args

This commit is contained in:
Ray Healy 2026-02-28 08:43:04 -05:00
parent 7b01f013e7
commit afdfed6fd5
1 changed files with 69 additions and 4 deletions

View File

@ -2,6 +2,8 @@ package org.fairportrobotics.frc.robolib.trajectory.ballistics.models;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import org.fairportrobotics.frc.robolib.trajectory.Velocity3d; import org.fairportrobotics.frc.robolib.trajectory.Velocity3d;
@ -10,6 +12,19 @@ import edu.wpi.first.units.measure.Distance;
import edu.wpi.first.units.measure.Time; import edu.wpi.first.units.measure.Time;
public class ConstantBM extends ReversableRadialBM<Integer> { public class ConstantBM extends ReversableRadialBM<Integer> {
//
// Internal classes
//
public record PositionAtTimeArgs(Velocity3d velocity, Time time) {};
public record GetTimeAtPosArgs(Velocity3d candidate, Distance radialDistance) {};
//
// Fields
//
private Velocity3d velocityResult; private Velocity3d velocityResult;
private Translation3d positionResult; private Translation3d positionResult;
private Time revResult; private Time revResult;
@ -20,6 +35,18 @@ public class ConstantBM extends ReversableRadialBM<Integer> {
private HashSet<Integer> computedParams; private HashSet<Integer> computedParams;
public List<Integer> getNeighborParamsArgs;
public List<Integer> getCandidateVelocityArgs;
public List<PositionAtTimeArgs> getPositionAtTimeArgs;
public List<GetTimeAtPosArgs> getTimeAtRadiusArgs;
public List<GetTimeAtPosArgs> getTimeAtXRelativeArgs;
public List<GetTimeAtPosArgs> getTimeAtYRelativeArgs;
public List<GetTimeAtPosArgs> getTimeAtXArgs;
public List<GetTimeAtPosArgs> getTimeAtYArgs;
public List<Velocity3d> getTimeAtTargetArgs;
public List<Integer> paramComputedArgs;
// //
// Setup code // Setup code
@ -43,38 +70,51 @@ public class ConstantBM extends ReversableRadialBM<Integer> {
this.minParam = 0; this.minParam = 0;
this.maxParam = 0; this.maxParam = 0;
this.computedParams = new HashSet<>(); this.computedParams = new HashSet<>();
}
this.getNeighborParamsArgs = new LinkedList<>();
this.getCandidateVelocityArgs = new LinkedList<>();
this.getPositionAtTimeArgs = new LinkedList<>();
this.getTimeAtRadiusArgs = new LinkedList<>();
this.getTimeAtXRelativeArgs = new LinkedList<>();
this.getTimeAtYRelativeArgs = new LinkedList<>();
this.getTimeAtXArgs = new LinkedList<>();
this.getTimeAtYArgs = new LinkedList<>();
this.getTimeAtTargetArgs = new LinkedList<>();
}
public ConstantBM setVelocityResult(Velocity3d velocityResult) { public ConstantBM setVelocityResult(Velocity3d velocityResult) {
this.velocityResult = velocityResult; this.velocityResult = velocityResult;
return this; return this;
} }
public ConstantBM setPositionResult(Distance x, Distance y, Distance z) {
return this.setPositionResult(new Translation3d(x, y, z));
}
public ConstantBM setPositionResult(Translation3d positionResult) { public ConstantBM setPositionResult(Translation3d positionResult) {
this.positionResult = positionResult; this.positionResult = positionResult;
return this; return this;
} }
public ConstantBM setRevResult(Time revResult) { public ConstantBM setRevResult(Time revResult) {
this.revResult = revResult; this.revResult = revResult;
return this; return this;
} }
public ConstantBM setInitParam(int initParam) { public ConstantBM setInitParam(int initParam) {
this.initParam = initParam; this.initParam = initParam;
return this; return this;
} }
public ConstantBM setMinParam(int minParam) { public ConstantBM setMinParam(int minParam) {
this.minParam = minParam; this.minParam = minParam;
return this; return this;
} }
public ConstantBM setMaxParam(int maxParam) {
this.maxParam = maxParam;
return this;
}
// //
// Parameter manipulation // Parameter manipulation
@ -86,6 +126,7 @@ public class ConstantBM extends ReversableRadialBM<Integer> {
public Integer[] getNeighborParams(Integer param) { public Integer[] getNeighborParams(Integer param) {
this.getNeighborParamsArgs.add(param);
ArrayList<Integer> neighbors = new ArrayList<>(); ArrayList<Integer> neighbors = new ArrayList<>();
if(param-1 >= minParam) neighbors.add(param-1); if(param-1 >= minParam) neighbors.add(param-1);
if(param+1 <= maxParam) neighbors.add(param+1); if(param+1 <= maxParam) neighbors.add(param+1);
@ -98,12 +139,14 @@ public class ConstantBM extends ReversableRadialBM<Integer> {
// //
public Velocity3d getCandidateVelocity(Integer param) { public Velocity3d getCandidateVelocity(Integer param) {
this.getCandidateVelocityArgs.add(param);
this.computedParams.add(param); this.computedParams.add(param);
return this.velocityResult; return this.velocityResult;
} }
public Translation3d positionAtTime(Velocity3d velocity, Time time) { public Translation3d positionAtTime(Velocity3d velocity, Time time) {
this.getPositionAtTimeArgs.add(new PositionAtTimeArgs(velocity, time));
return this.positionResult; return this.positionResult;
} }
@ -113,15 +156,37 @@ public class ConstantBM extends ReversableRadialBM<Integer> {
// //
public Time getTimeAtRadius(Velocity3d candidate, Distance radialDistance) { public Time getTimeAtRadius(Velocity3d candidate, Distance radialDistance) {
this.getTimeAtRadiusArgs.add(new GetTimeAtPosArgs(candidate, radialDistance));
return revResult; return revResult;
} }
public Time getTimeAtXRelative(Velocity3d candidate, Distance xDistance) {
this.getTimeAtXRelativeArgs.add(new GetTimeAtPosArgs(candidate, xDistance));
return super.getTimeAtXRelative(candidate, xDistance);
}
public Time getTimeAtYRelative(Velocity3d candidate, Distance yDistance) {
this.getTimeAtYRelativeArgs.add(new GetTimeAtPosArgs(candidate, yDistance));
return super.getTimeAtYRelative(candidate, yDistance);
}
public Time getTimeAtX(Velocity3d candidate, Distance xDistance) {
this.getTimeAtXArgs.add(new GetTimeAtPosArgs(candidate, xDistance));
return super.getTimeAtXRelative(candidate, xDistance);
}
public Time getTimeAtY(Velocity3d candidate, Distance yDistance) {
this.getTimeAtYArgs.add(new GetTimeAtPosArgs(candidate, yDistance));
return super.getTimeAtY(candidate, yDistance);
}
// //
// Candidate tracking // Candidate tracking
// //
public boolean paramComputed(Integer param) { public boolean paramComputed(Integer param) {
this.paramComputedArgs.add(param);
return this.computedParams.contains(param); return this.computedParams.contains(param);
} }