2022-02-11 18:53:13 -07:00
|
|
|
package frc4388.utility;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
2022-03-01 20:23:01 -07:00
|
|
|
import java.io.OutputStream;
|
|
|
|
|
import java.io.Writer;
|
2022-02-11 18:53:13 -07:00
|
|
|
import java.util.Optional;
|
2022-02-16 22:31:00 -07:00
|
|
|
|
2022-02-11 18:53:13 -07:00
|
|
|
import com.diffplug.common.base.Errors;
|
2022-02-16 22:31:00 -07:00
|
|
|
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
2022-02-11 18:53:13 -07:00
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
|
|
|
|
|
|
2022-02-16 22:31:00 -07:00
|
|
|
import edu.wpi.first.math.geometry.Translation2d;
|
2022-02-11 18:53:13 -07:00
|
|
|
|
2022-02-16 22:31:00 -07:00
|
|
|
public final class PathPlannerUtil {
|
|
|
|
|
public static final class Path {
|
|
|
|
|
public Optional<Waypoint[]> waypoints;
|
2022-02-11 18:53:13 -07:00
|
|
|
public Optional<Double> maxVelocity;
|
|
|
|
|
public Optional<Double> maxAcceleration;
|
|
|
|
|
public Optional<Boolean> isReversed;
|
|
|
|
|
|
|
|
|
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
2022-02-16 22:31:00 -07:00
|
|
|
static {
|
|
|
|
|
objectMapper.registerModule(new Jdk8Module());
|
2022-02-27 22:59:32 -07:00
|
|
|
objectMapper.setSerializationInclusion(Include.ALWAYS);
|
2022-02-16 22:31:00 -07:00
|
|
|
}
|
2022-02-11 18:53:13 -07:00
|
|
|
|
|
|
|
|
public static Path read(File src) {
|
|
|
|
|
return Errors.log().getWithDefault(() -> objectMapper.readValue(src, Path.class), null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void write(File resultFile) {
|
|
|
|
|
Errors.log().run(() -> objectMapper.writeValue(resultFile, this));
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-01 20:23:01 -07:00
|
|
|
public void write(Writer writer) {
|
|
|
|
|
Errors.log().run(() -> objectMapper.writeValue(writer, this));
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-16 22:31:00 -07:00
|
|
|
public static final class Waypoint {
|
|
|
|
|
public Optional<Translation2d> anchorPoint;
|
|
|
|
|
public Optional<Translation2d> prevControl;
|
|
|
|
|
public Optional<Translation2d> nextControl;
|
|
|
|
|
public Optional<Double> holonomicAngle;
|
|
|
|
|
public Optional<Boolean> isReversal;
|
|
|
|
|
public Optional<Double> velOverride;
|
|
|
|
|
public Optional<Boolean> isLocked;
|
|
|
|
|
|
|
|
|
|
public Waypoint() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Waypoint(Translation2d anchorPoint, Translation2d prevControl, Translation2d nextControl, Double holonomicAngle, Boolean isReversal, Double velOverride, Boolean isLocked) {
|
|
|
|
|
this.anchorPoint = Optional.ofNullable(anchorPoint);
|
|
|
|
|
this.prevControl = Optional.ofNullable(prevControl);
|
|
|
|
|
this.nextControl = Optional.ofNullable(nextControl);
|
|
|
|
|
this.holonomicAngle = Optional.ofNullable(holonomicAngle);
|
|
|
|
|
this.isReversal = Optional.ofNullable(isReversal);
|
|
|
|
|
this.velOverride = Optional.ofNullable(velOverride);
|
|
|
|
|
this.isLocked = Optional.ofNullable(isLocked);
|
|
|
|
|
}
|
2022-02-11 18:53:13 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|