mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
[wpiunits] Java units API rewrite (#6958)
Java generics are too limited to do what we need. This refactors generic code previously in Unit and Measure into unit-specific classes that can have unit-safe math operations (notably, times and divide) that can return values in known units instead of a wildcarded Measure<?>. Unit-specific measure implementations are automatically generated by ./wpiunits/generate_units.py, which generates generic interfaces and mutable and immutable implementations of those interfaces. These make up the bulk of the diff of this PR (approximately 9300 LOC). This also adds units for angular and linear velocities, accelerations, and momenta; moment of inertia; and torque.
This commit is contained in:
@@ -9,9 +9,10 @@ import static edu.wpi.first.units.Units.Volts;
|
||||
import edu.wpi.first.math.controller.proto.SimpleMotorFeedforwardProto;
|
||||
import edu.wpi.first.math.controller.struct.SimpleMotorFeedforwardStruct;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.PerUnit;
|
||||
import edu.wpi.first.units.TimeUnit;
|
||||
import edu.wpi.first.units.Unit;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.Voltage;
|
||||
import edu.wpi.first.units.measure.Voltage;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
|
||||
@@ -156,7 +157,7 @@ public class SimpleMotorFeedforward implements ProtobufSerializable, StructSeria
|
||||
* @param setpoint The velocity setpoint.
|
||||
* @return The computed feedforward.
|
||||
*/
|
||||
public <U extends Unit<U>> Measure<Voltage> calculate(Measure<Velocity<U>> setpoint) {
|
||||
public <U extends Unit> Voltage calculate(Measure<? extends PerUnit<U, TimeUnit>> setpoint) {
|
||||
return calculate(setpoint, setpoint);
|
||||
}
|
||||
|
||||
@@ -168,8 +169,9 @@ public class SimpleMotorFeedforward implements ProtobufSerializable, StructSeria
|
||||
* @param nextVelocity The next velocity setpoint.
|
||||
* @return The computed feedforward.
|
||||
*/
|
||||
public <U extends Unit<U>> Measure<Voltage> calculate(
|
||||
Measure<Velocity<U>> currentVelocity, Measure<Velocity<U>> nextVelocity) {
|
||||
public <U extends Unit> Voltage calculate(
|
||||
Measure<? extends PerUnit<U, TimeUnit>> currentVelocity,
|
||||
Measure<? extends PerUnit<U, TimeUnit>> nextVelocity) {
|
||||
if (ka == 0.0) {
|
||||
// Given the following discrete feedforward model
|
||||
//
|
||||
|
||||
@@ -13,8 +13,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import edu.wpi.first.math.geometry.proto.Pose2dProto;
|
||||
import edu.wpi.first.math.geometry.struct.Pose2dStruct;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Collections;
|
||||
@@ -76,7 +75,7 @@ public class Pose2d implements Interpolatable<Pose2d>, ProtobufSerializable, Str
|
||||
* @param y The y component of the translational component of the pose.
|
||||
* @param rotation The rotational component of the pose.
|
||||
*/
|
||||
public Pose2d(Measure<Distance> x, Measure<Distance> y, Rotation2d rotation) {
|
||||
public Pose2d(Distance x, Distance y, Rotation2d rotation) {
|
||||
this(x.in(Meters), y.in(Meters), rotation);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,7 @@ import edu.wpi.first.math.geometry.proto.Rotation2dProto;
|
||||
import edu.wpi.first.math.geometry.struct.Rotation2dStruct;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.math.util.Units;
|
||||
import edu.wpi.first.units.Angle;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Angle;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -130,7 +129,7 @@ public class Rotation2d
|
||||
*
|
||||
* @param angle The angle of the rotation.
|
||||
*/
|
||||
public Rotation2d(Measure<Angle> angle) {
|
||||
public Rotation2d(Angle angle) {
|
||||
this(angle.in(Radians));
|
||||
}
|
||||
|
||||
@@ -244,7 +243,7 @@ public class Rotation2d
|
||||
*
|
||||
* @return The measure of the Rotation2d.
|
||||
*/
|
||||
public Measure<Angle> getMeasure() {
|
||||
public Angle getMeasure() {
|
||||
return Radians.of(getRadians());
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,7 @@ import static edu.wpi.first.units.Units.Meters;
|
||||
|
||||
import edu.wpi.first.math.geometry.proto.Transform2dProto;
|
||||
import edu.wpi.first.math.geometry.struct.Transform2dStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -75,7 +74,7 @@ public class Transform2d implements ProtobufSerializable, StructSerializable {
|
||||
* @param y The y component of the translational component of the transform.
|
||||
* @param rotation The rotational component of the transform.
|
||||
*/
|
||||
public Transform2d(Measure<Distance> x, Measure<Distance> y, Rotation2d rotation) {
|
||||
public Transform2d(Distance x, Distance y, Rotation2d rotation) {
|
||||
this(x.in(Meters), y.in(Meters), rotation);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,8 +17,7 @@ import edu.wpi.first.math.geometry.proto.Translation2dProto;
|
||||
import edu.wpi.first.math.geometry.struct.Translation2dStruct;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.math.numbers.N2;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Collections;
|
||||
@@ -84,7 +83,7 @@ public class Translation2d
|
||||
* @param x The x component of the translation.
|
||||
* @param y The y component of the translation.
|
||||
*/
|
||||
public Translation2d(Measure<Distance> x, Measure<Distance> y) {
|
||||
public Translation2d(Distance x, Distance y) {
|
||||
this(x.in(Meters), y.in(Meters));
|
||||
}
|
||||
|
||||
|
||||
@@ -17,8 +17,7 @@ import edu.wpi.first.math.geometry.proto.Translation3dProto;
|
||||
import edu.wpi.first.math.geometry.struct.Translation3dStruct;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.math.numbers.N3;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -89,7 +88,7 @@ public class Translation3d
|
||||
* @param y The y component of the translation.
|
||||
* @param z The z component of the translation.
|
||||
*/
|
||||
public Translation3d(Measure<Distance> x, Measure<Distance> y, Measure<Distance> z) {
|
||||
public Translation3d(Distance x, Distance y, Distance z) {
|
||||
this(x.in(Meters), y.in(Meters), z.in(Meters));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,11 +14,9 @@ import edu.wpi.first.math.geometry.Translation2d;
|
||||
import edu.wpi.first.math.geometry.Twist2d;
|
||||
import edu.wpi.first.math.kinematics.proto.ChassisSpeedsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.ChassisSpeedsStruct;
|
||||
import edu.wpi.first.units.Angle;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.Time;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.measure.AngularVelocity;
|
||||
import edu.wpi.first.units.measure.LinearVelocity;
|
||||
import edu.wpi.first.units.measure.Time;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -72,10 +70,7 @@ public class ChassisSpeeds implements ProtobufSerializable, StructSerializable {
|
||||
* @param vy Sideways velocity.
|
||||
* @param omega Angular velocity.
|
||||
*/
|
||||
public ChassisSpeeds(
|
||||
Measure<Velocity<Distance>> vx,
|
||||
Measure<Velocity<Distance>> vy,
|
||||
Measure<Velocity<Angle>> omega) {
|
||||
public ChassisSpeeds(LinearVelocity vx, LinearVelocity vy, AngularVelocity omega) {
|
||||
this(vx.in(MetersPerSecond), vy.in(MetersPerSecond), omega.in(RadiansPerSecond));
|
||||
}
|
||||
|
||||
@@ -148,10 +143,7 @@ public class ChassisSpeeds implements ProtobufSerializable, StructSerializable {
|
||||
* @return Discretized ChassisSpeeds.
|
||||
*/
|
||||
public static ChassisSpeeds discretize(
|
||||
Measure<Velocity<Distance>> vx,
|
||||
Measure<Velocity<Distance>> vy,
|
||||
Measure<Velocity<Angle>> omega,
|
||||
Measure<Time> dt) {
|
||||
LinearVelocity vx, LinearVelocity vy, AngularVelocity omega, Time dt) {
|
||||
return discretize(
|
||||
vx.in(MetersPerSecond), vy.in(MetersPerSecond), omega.in(RadiansPerSecond), dt.in(Seconds));
|
||||
}
|
||||
@@ -219,10 +211,7 @@ public class ChassisSpeeds implements ProtobufSerializable, StructSerializable {
|
||||
* @return ChassisSpeeds object representing the speeds in the robot's frame of reference.
|
||||
*/
|
||||
public static ChassisSpeeds fromFieldRelativeSpeeds(
|
||||
Measure<Velocity<Distance>> vx,
|
||||
Measure<Velocity<Distance>> vy,
|
||||
Measure<Velocity<Angle>> omega,
|
||||
Rotation2d robotAngle) {
|
||||
LinearVelocity vx, LinearVelocity vy, AngularVelocity omega, Rotation2d robotAngle) {
|
||||
return fromFieldRelativeSpeeds(
|
||||
vx.in(MetersPerSecond), vy.in(MetersPerSecond), omega.in(RadiansPerSecond), robotAngle);
|
||||
}
|
||||
@@ -287,10 +276,7 @@ public class ChassisSpeeds implements ProtobufSerializable, StructSerializable {
|
||||
* @return ChassisSpeeds object representing the speeds in the field's frame of reference.
|
||||
*/
|
||||
public static ChassisSpeeds fromRobotRelativeSpeeds(
|
||||
Measure<Velocity<Distance>> vx,
|
||||
Measure<Velocity<Distance>> vy,
|
||||
Measure<Velocity<Angle>> omega,
|
||||
Rotation2d robotAngle) {
|
||||
LinearVelocity vx, LinearVelocity vy, AngularVelocity omega, Rotation2d robotAngle) {
|
||||
return fromRobotRelativeSpeeds(
|
||||
vx.in(MetersPerSecond), vy.in(MetersPerSecond), omega.in(RadiansPerSecond), robotAngle);
|
||||
}
|
||||
|
||||
@@ -11,8 +11,7 @@ import edu.wpi.first.math.MathUsageId;
|
||||
import edu.wpi.first.math.geometry.Twist2d;
|
||||
import edu.wpi.first.math.kinematics.proto.DifferentialDriveKinematicsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.DifferentialDriveKinematicsStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
|
||||
@@ -58,7 +57,7 @@ public class DifferentialDriveKinematics
|
||||
* between the left wheels and right wheels. However, the empirical value may be larger than
|
||||
* the physical measured value due to scrubbing effects.
|
||||
*/
|
||||
public DifferentialDriveKinematics(Measure<Distance> trackWidth) {
|
||||
public DifferentialDriveKinematics(Distance trackWidth) {
|
||||
this(trackWidth.in(Meters));
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,7 @@ import edu.wpi.first.math.MathSharedStore;
|
||||
import edu.wpi.first.math.MathUsageId;
|
||||
import edu.wpi.first.math.geometry.Pose2d;
|
||||
import edu.wpi.first.math.geometry.Rotation2d;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
|
||||
/**
|
||||
* Class for differential drive odometry. Odometry allows you to track the robot's position on the
|
||||
@@ -55,8 +54,8 @@ public class DifferentialDriveOdometry extends Odometry<DifferentialDriveWheelPo
|
||||
*/
|
||||
public DifferentialDriveOdometry(
|
||||
Rotation2d gyroAngle,
|
||||
Measure<Distance> leftDistance,
|
||||
Measure<Distance> rightDistance,
|
||||
Distance leftDistance,
|
||||
Distance rightDistance,
|
||||
Pose2d initialPoseMeters) {
|
||||
this(gyroAngle, leftDistance.in(Meters), rightDistance.in(Meters), initialPoseMeters);
|
||||
}
|
||||
@@ -81,7 +80,7 @@ public class DifferentialDriveOdometry extends Odometry<DifferentialDriveWheelPo
|
||||
* @param rightDistance The distance traveled by the right encoder.
|
||||
*/
|
||||
public DifferentialDriveOdometry(
|
||||
Rotation2d gyroAngle, Measure<Distance> leftDistance, Measure<Distance> rightDistance) {
|
||||
Rotation2d gyroAngle, Distance leftDistance, Distance rightDistance) {
|
||||
this(gyroAngle, leftDistance, rightDistance, Pose2d.kZero);
|
||||
}
|
||||
|
||||
@@ -119,10 +118,7 @@ public class DifferentialDriveOdometry extends Odometry<DifferentialDriveWheelPo
|
||||
* @param poseMeters The position on the field that your robot is at.
|
||||
*/
|
||||
public void resetPosition(
|
||||
Rotation2d gyroAngle,
|
||||
Measure<Distance> leftDistance,
|
||||
Measure<Distance> rightDistance,
|
||||
Pose2d poseMeters) {
|
||||
Rotation2d gyroAngle, Distance leftDistance, Distance rightDistance, Pose2d poseMeters) {
|
||||
resetPosition(gyroAngle, leftDistance.in(Meters), rightDistance.in(Meters), poseMeters);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,7 @@ import edu.wpi.first.math.MathUtil;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.math.kinematics.proto.DifferentialDriveWheelPositionsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.DifferentialDriveWheelPositionsStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import java.util.Objects;
|
||||
|
||||
/** Represents the wheel positions for a differential drive drivetrain. */
|
||||
@@ -48,7 +47,7 @@ public class DifferentialDriveWheelPositions
|
||||
* @param left Distance measured by the left side.
|
||||
* @param right Distance measured by the right side.
|
||||
*/
|
||||
public DifferentialDriveWheelPositions(Measure<Distance> left, Measure<Distance> right) {
|
||||
public DifferentialDriveWheelPositions(Distance left, Distance right) {
|
||||
this(left.in(Meters), right.in(Meters));
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,7 @@ import static edu.wpi.first.units.Units.MetersPerSecond;
|
||||
|
||||
import edu.wpi.first.math.kinematics.proto.DifferentialDriveWheelSpeedsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.DifferentialDriveWheelSpeedsStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.measure.LinearVelocity;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
|
||||
@@ -50,8 +48,7 @@ public class DifferentialDriveWheelSpeeds implements ProtobufSerializable, Struc
|
||||
* @param left The left speed.
|
||||
* @param right The right speed.
|
||||
*/
|
||||
public DifferentialDriveWheelSpeeds(
|
||||
Measure<Velocity<Distance>> left, Measure<Velocity<Distance>> right) {
|
||||
public DifferentialDriveWheelSpeeds(LinearVelocity left, LinearVelocity right) {
|
||||
this(left.in(MetersPerSecond), right.in(MetersPerSecond));
|
||||
}
|
||||
|
||||
@@ -85,7 +82,7 @@ public class DifferentialDriveWheelSpeeds implements ProtobufSerializable, Struc
|
||||
*
|
||||
* @param attainableMaxSpeed The absolute max speed that a wheel can reach.
|
||||
*/
|
||||
public void desaturate(Measure<Velocity<Distance>> attainableMaxSpeed) {
|
||||
public void desaturate(LinearVelocity attainableMaxSpeed) {
|
||||
desaturate(attainableMaxSpeed.in(MetersPerSecond));
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,7 @@ import edu.wpi.first.math.MathUtil;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.math.kinematics.proto.MecanumDriveWheelPositionsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.MecanumDriveWheelPositionsStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -71,10 +70,7 @@ public class MecanumDriveWheelPositions
|
||||
* @param rearRight Distance measured by the rear right wheel.
|
||||
*/
|
||||
public MecanumDriveWheelPositions(
|
||||
Measure<Distance> frontLeft,
|
||||
Measure<Distance> frontRight,
|
||||
Measure<Distance> rearLeft,
|
||||
Measure<Distance> rearRight) {
|
||||
Distance frontLeft, Distance frontRight, Distance rearLeft, Distance rearRight) {
|
||||
this(frontLeft.in(Meters), frontRight.in(Meters), rearLeft.in(Meters), rearRight.in(Meters));
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,7 @@ import static edu.wpi.first.units.Units.MetersPerSecond;
|
||||
|
||||
import edu.wpi.first.math.kinematics.proto.MecanumDriveWheelSpeedsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.MecanumDriveWheelSpeedsStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.measure.LinearVelocity;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
|
||||
@@ -65,10 +63,10 @@ public class MecanumDriveWheelSpeeds implements ProtobufSerializable, StructSeri
|
||||
* @param rearRight Speed of the rear right wheel.
|
||||
*/
|
||||
public MecanumDriveWheelSpeeds(
|
||||
Measure<Velocity<Distance>> frontLeft,
|
||||
Measure<Velocity<Distance>> frontRight,
|
||||
Measure<Velocity<Distance>> rearLeft,
|
||||
Measure<Velocity<Distance>> rearRight) {
|
||||
LinearVelocity frontLeft,
|
||||
LinearVelocity frontRight,
|
||||
LinearVelocity rearLeft,
|
||||
LinearVelocity rearRight) {
|
||||
this(
|
||||
frontLeft.in(MetersPerSecond),
|
||||
frontRight.in(MetersPerSecond),
|
||||
@@ -114,7 +112,7 @@ public class MecanumDriveWheelSpeeds implements ProtobufSerializable, StructSeri
|
||||
*
|
||||
* @param attainableMaxSpeed The absolute max speed that a wheel can reach.
|
||||
*/
|
||||
public void desaturate(Measure<Velocity<Distance>> attainableMaxSpeed) {
|
||||
public void desaturate(LinearVelocity attainableMaxSpeed) {
|
||||
desaturate(attainableMaxSpeed.in(MetersPerSecond));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,10 +14,8 @@ import edu.wpi.first.math.geometry.Translation2d;
|
||||
import edu.wpi.first.math.geometry.Twist2d;
|
||||
import edu.wpi.first.math.kinematics.proto.SwerveDriveKinematicsProto;
|
||||
import edu.wpi.first.math.kinematics.struct.SwerveDriveKinematicsStruct;
|
||||
import edu.wpi.first.units.Angle;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.measure.AngularVelocity;
|
||||
import edu.wpi.first.units.measure.LinearVelocity;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.Struct;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
@@ -307,7 +305,7 @@ public class SwerveDriveKinematics
|
||||
* @param attainableMaxSpeed The absolute max speed that a module can reach.
|
||||
*/
|
||||
public static void desaturateWheelSpeeds(
|
||||
SwerveModuleState[] moduleStates, Measure<Velocity<Distance>> attainableMaxSpeed) {
|
||||
SwerveModuleState[] moduleStates, LinearVelocity attainableMaxSpeed) {
|
||||
desaturateWheelSpeeds(moduleStates, attainableMaxSpeed.in(MetersPerSecond));
|
||||
}
|
||||
|
||||
@@ -379,9 +377,9 @@ public class SwerveDriveKinematics
|
||||
public static void desaturateWheelSpeeds(
|
||||
SwerveModuleState[] moduleStates,
|
||||
ChassisSpeeds desiredChassisSpeed,
|
||||
Measure<Velocity<Distance>> attainableMaxModuleSpeed,
|
||||
Measure<Velocity<Distance>> attainableMaxTranslationalSpeed,
|
||||
Measure<Velocity<Angle>> attainableMaxRotationalVelocity) {
|
||||
LinearVelocity attainableMaxModuleSpeed,
|
||||
LinearVelocity attainableMaxTranslationalSpeed,
|
||||
AngularVelocity attainableMaxRotationalVelocity) {
|
||||
desaturateWheelSpeeds(
|
||||
moduleStates,
|
||||
desiredChassisSpeed,
|
||||
|
||||
@@ -11,8 +11,7 @@ import edu.wpi.first.math.geometry.Rotation2d;
|
||||
import edu.wpi.first.math.interpolation.Interpolatable;
|
||||
import edu.wpi.first.math.kinematics.proto.SwerveModulePositionProto;
|
||||
import edu.wpi.first.math.kinematics.struct.SwerveModulePositionStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.measure.Distance;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -55,7 +54,7 @@ public class SwerveModulePosition
|
||||
* @param distance The distance measured by the wheel of the module.
|
||||
* @param angle The angle of the module.
|
||||
*/
|
||||
public SwerveModulePosition(Measure<Distance> distance, Rotation2d angle) {
|
||||
public SwerveModulePosition(Distance distance, Rotation2d angle) {
|
||||
this(distance.in(Meters), angle);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,9 +9,7 @@ import static edu.wpi.first.units.Units.MetersPerSecond;
|
||||
import edu.wpi.first.math.geometry.Rotation2d;
|
||||
import edu.wpi.first.math.kinematics.proto.SwerveModuleStateProto;
|
||||
import edu.wpi.first.math.kinematics.struct.SwerveModuleStateStruct;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.measure.LinearVelocity;
|
||||
import edu.wpi.first.util.protobuf.ProtobufSerializable;
|
||||
import edu.wpi.first.util.struct.StructSerializable;
|
||||
import java.util.Objects;
|
||||
@@ -51,7 +49,7 @@ public class SwerveModuleState
|
||||
* @param speed The speed of the wheel of the module.
|
||||
* @param angle The angle of the module.
|
||||
*/
|
||||
public SwerveModuleState(Measure<Velocity<Distance>> speed, Rotation2d angle) {
|
||||
public SwerveModuleState(LinearVelocity speed, Rotation2d angle) {
|
||||
this(speed.in(MetersPerSecond), angle);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,9 +14,8 @@ import edu.wpi.first.math.trajectory.constraint.DifferentialDriveKinematicsConst
|
||||
import edu.wpi.first.math.trajectory.constraint.MecanumDriveKinematicsConstraint;
|
||||
import edu.wpi.first.math.trajectory.constraint.SwerveDriveKinematicsConstraint;
|
||||
import edu.wpi.first.math.trajectory.constraint.TrajectoryConstraint;
|
||||
import edu.wpi.first.units.Distance;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import edu.wpi.first.units.measure.LinearAcceleration;
|
||||
import edu.wpi.first.units.measure.LinearVelocity;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -55,9 +54,7 @@ public class TrajectoryConfig {
|
||||
* @param maxVelocity The max velocity for the trajectory.
|
||||
* @param maxAcceleration The max acceleration for the trajectory.
|
||||
*/
|
||||
public TrajectoryConfig(
|
||||
Measure<Velocity<Distance>> maxVelocity,
|
||||
Measure<Velocity<Velocity<Distance>>> maxAcceleration) {
|
||||
public TrajectoryConfig(LinearVelocity maxVelocity, LinearAcceleration maxAcceleration) {
|
||||
this(maxVelocity.in(MetersPerSecond), maxAcceleration.in(MetersPerSecondPerSecond));
|
||||
}
|
||||
|
||||
@@ -145,7 +142,7 @@ public class TrajectoryConfig {
|
||||
* @param startVelocity The start velocity of the trajectory.
|
||||
* @return Instance of the current config object.
|
||||
*/
|
||||
public TrajectoryConfig setStartVelocity(Measure<Velocity<Distance>> startVelocity) {
|
||||
public TrajectoryConfig setStartVelocity(LinearVelocity startVelocity) {
|
||||
return setStartVelocity(startVelocity.in(MetersPerSecond));
|
||||
}
|
||||
|
||||
@@ -175,7 +172,7 @@ public class TrajectoryConfig {
|
||||
* @param endVelocity The end velocity of the trajectory.
|
||||
* @return Instance of the current config object.
|
||||
*/
|
||||
public TrajectoryConfig setEndVelocity(Measure<Velocity<Distance>> endVelocity) {
|
||||
public TrajectoryConfig setEndVelocity(LinearVelocity endVelocity) {
|
||||
return setEndVelocity(endVelocity.in(MetersPerSecond));
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@ package edu.wpi.first.math.trajectory;
|
||||
import edu.wpi.first.math.MathSharedStore;
|
||||
import edu.wpi.first.math.MathUsageId;
|
||||
import edu.wpi.first.units.Measure;
|
||||
import edu.wpi.first.units.PerUnit;
|
||||
import edu.wpi.first.units.TimeUnit;
|
||||
import edu.wpi.first.units.Unit;
|
||||
import edu.wpi.first.units.Velocity;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -79,8 +80,10 @@ public class TrapezoidProfile {
|
||||
* @param maxVelocity maximum velocity
|
||||
* @param maxAcceleration maximum acceleration
|
||||
*/
|
||||
public <U extends Unit<U>> Constraints(
|
||||
Measure<Velocity<U>> maxVelocity, Measure<Velocity<Velocity<U>>> maxAcceleration) {
|
||||
public <U extends Unit> Constraints(
|
||||
Measure<? extends PerUnit<? extends U, TimeUnit>> maxVelocity,
|
||||
Measure<? extends PerUnit<? extends PerUnit<? extends U, TimeUnit>, TimeUnit>>
|
||||
maxAcceleration) {
|
||||
this(maxVelocity.baseUnitMagnitude(), maxAcceleration.baseUnitMagnitude());
|
||||
}
|
||||
}
|
||||
@@ -114,7 +117,8 @@ public class TrapezoidProfile {
|
||||
* @param position The position at this state.
|
||||
* @param velocity The velocity at this state.
|
||||
*/
|
||||
public <U extends Unit<U>> State(Measure<U> position, Measure<Velocity<U>> velocity) {
|
||||
public <U extends Unit> State(
|
||||
Measure<U> position, Measure<? extends PerUnit<? extends U, TimeUnit>> velocity) {
|
||||
this(position.baseUnitMagnitude(), velocity.baseUnitMagnitude());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user