mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[wpimath] Rework odometry APIs to improve feature parity (#4645)
Co-authored-by: Ryan Blue <ryanzblue@gmail.com>
This commit is contained in:
@@ -72,7 +72,9 @@ public class Drivetrain {
|
||||
m_leftEncoder.reset();
|
||||
m_rightEncoder.reset();
|
||||
|
||||
m_odometry = new DifferentialDriveOdometry(m_gyro.getRotation2d());
|
||||
m_odometry =
|
||||
new DifferentialDriveOdometry(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -55,6 +55,8 @@ public class Drivetrain {
|
||||
private final DifferentialDrivePoseEstimator m_poseEstimator =
|
||||
new DifferentialDrivePoseEstimator(
|
||||
m_gyro.getRotation2d(),
|
||||
m_leftEncoder.getDistance(),
|
||||
m_rightEncoder.getDistance(),
|
||||
new Pose2d(),
|
||||
VecBuilder.fill(0.05, 0.05, Units.degreesToRadians(5), 0.01, 0.01),
|
||||
VecBuilder.fill(0.02, 0.02, Units.degreesToRadians(1)),
|
||||
|
||||
@@ -99,7 +99,7 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
* @param pose The pose to which to set the odometry.
|
||||
*/
|
||||
public void resetOdometry(Pose2d pose) {
|
||||
m_odometry.resetPosition(pose, m_gyro.getRotation2d(), getCurrentWheelDistances());
|
||||
m_odometry.resetPosition(m_gyro.getRotation2d(), getCurrentWheelDistances(), pose);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -57,8 +57,8 @@ public class Drivetrain {
|
||||
private final MecanumDrivePoseEstimator m_poseEstimator =
|
||||
new MecanumDrivePoseEstimator(
|
||||
m_gyro.getRotation2d(),
|
||||
new Pose2d(),
|
||||
getCurrentDistances(),
|
||||
new Pose2d(),
|
||||
m_kinematics,
|
||||
VecBuilder.fill(0.05, 0.05, Units.degreesToRadians(5), 0.05, 0.05, 0.05, 0.05),
|
||||
VecBuilder.fill(Units.degreesToRadians(0.01), 0.01, 0.01, 0.01, 0.01),
|
||||
|
||||
@@ -64,7 +64,9 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
m_rightEncoder.setDistancePerPulse(DriveConstants.kEncoderDistancePerPulse);
|
||||
|
||||
resetEncoders();
|
||||
m_odometry = new DifferentialDriveOdometry(m_gyro.getRotation2d());
|
||||
m_odometry =
|
||||
new DifferentialDriveOdometry(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,7 +101,8 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
*/
|
||||
public void resetOdometry(Pose2d pose) {
|
||||
resetEncoders();
|
||||
m_odometry.resetPosition(pose, m_gyro.getRotation2d());
|
||||
m_odometry.resetPosition(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance(), pose);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -73,7 +73,9 @@ public class Drivetrain {
|
||||
m_leftEncoder.reset();
|
||||
m_rightEncoder.reset();
|
||||
|
||||
m_odometry = new DifferentialDriveOdometry(m_gyro.getRotation2d());
|
||||
m_odometry =
|
||||
new DifferentialDriveOdometry(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,7 +118,8 @@ public class Drivetrain {
|
||||
* @param pose The position to reset to.
|
||||
*/
|
||||
public void resetOdometry(Pose2d pose) {
|
||||
m_odometry.resetPosition(pose, m_gyro.getRotation2d());
|
||||
m_odometry.resetPosition(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance(), pose);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -57,7 +57,8 @@ public class Drivetrain {
|
||||
private final DifferentialDriveKinematics m_kinematics =
|
||||
new DifferentialDriveKinematics(kTrackWidth);
|
||||
private final DifferentialDriveOdometry m_odometry =
|
||||
new DifferentialDriveOdometry(m_gyro.getRotation2d());
|
||||
new DifferentialDriveOdometry(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance());
|
||||
|
||||
// Gains are for example purposes only - must be determined for your own
|
||||
// robot!
|
||||
@@ -128,7 +129,8 @@ public class Drivetrain {
|
||||
m_leftEncoder.reset();
|
||||
m_rightEncoder.reset();
|
||||
m_drivetrainSimulator.setPose(pose);
|
||||
m_odometry.resetPosition(pose, m_gyro.getRotation2d());
|
||||
m_odometry.resetPosition(
|
||||
m_gyro.getRotation2d(), m_leftEncoder.getDistance(), m_rightEncoder.getDistance(), pose);
|
||||
}
|
||||
|
||||
/** Check the current robot pose. */
|
||||
|
||||
@@ -80,7 +80,11 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
m_rightEncoder.setDistancePerPulse(DriveConstants.kEncoderDistancePerPulse);
|
||||
|
||||
resetEncoders();
|
||||
m_odometry = new DifferentialDriveOdometry(Rotation2d.fromDegrees(getHeading()));
|
||||
m_odometry =
|
||||
new DifferentialDriveOdometry(
|
||||
Rotation2d.fromDegrees(getHeading()),
|
||||
m_leftEncoder.getDistance(),
|
||||
m_rightEncoder.getDistance());
|
||||
|
||||
if (RobotBase.isSimulation()) { // If our robot is simulated
|
||||
// This class simulates our drivetrain's motion around the field.
|
||||
@@ -174,7 +178,11 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
public void resetOdometry(Pose2d pose) {
|
||||
resetEncoders();
|
||||
m_drivetrainSimulator.setPose(pose);
|
||||
m_odometry.resetPosition(pose, Rotation2d.fromDegrees(getHeading()));
|
||||
m_odometry.resetPosition(
|
||||
Rotation2d.fromDegrees(getHeading()),
|
||||
m_leftEncoder.getDistance(),
|
||||
m_rightEncoder.getDistance(),
|
||||
pose);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,10 +37,10 @@ public class Drivetrain {
|
||||
m_kinematics,
|
||||
m_gyro.getRotation2d(),
|
||||
new SwerveModulePosition[] {
|
||||
new SwerveModulePosition(),
|
||||
new SwerveModulePosition(),
|
||||
new SwerveModulePosition(),
|
||||
new SwerveModulePosition()
|
||||
m_frontLeft.getPosition(),
|
||||
m_frontRight.getPosition(),
|
||||
m_backLeft.getPosition(),
|
||||
m_backRight.getPosition()
|
||||
});
|
||||
|
||||
public Drivetrain() {
|
||||
|
||||
@@ -62,10 +62,10 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
DriveConstants.kDriveKinematics,
|
||||
m_gyro.getRotation2d(),
|
||||
new SwerveModulePosition[] {
|
||||
new SwerveModulePosition(),
|
||||
new SwerveModulePosition(),
|
||||
new SwerveModulePosition(),
|
||||
new SwerveModulePosition()
|
||||
m_frontLeft.getPosition(),
|
||||
m_frontRight.getPosition(),
|
||||
m_rearLeft.getPosition(),
|
||||
m_rearRight.getPosition()
|
||||
});
|
||||
|
||||
/** Creates a new DriveSubsystem. */
|
||||
@@ -100,14 +100,14 @@ public class DriveSubsystem extends SubsystemBase {
|
||||
*/
|
||||
public void resetOdometry(Pose2d pose) {
|
||||
m_odometry.resetPosition(
|
||||
pose,
|
||||
m_gyro.getRotation2d(),
|
||||
new SwerveModulePosition[] {
|
||||
m_frontLeft.getPosition(),
|
||||
m_frontRight.getPosition(),
|
||||
m_rearLeft.getPosition(),
|
||||
m_rearRight.getPosition()
|
||||
});
|
||||
},
|
||||
pose);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,13 +48,13 @@ public class Drivetrain {
|
||||
Nat.N7(),
|
||||
Nat.N5(),
|
||||
m_gyro.getRotation2d(),
|
||||
new Pose2d(),
|
||||
new SwerveModulePosition[] {
|
||||
m_frontLeft.getPosition(),
|
||||
m_frontRight.getPosition(),
|
||||
m_backLeft.getPosition(),
|
||||
m_backRight.getPosition()
|
||||
},
|
||||
new Pose2d(),
|
||||
m_kinematics,
|
||||
VecBuilder.fill(0.05, 0.05, Units.degreesToRadians(5), 0.05, 0.05, 0.05, 0.05),
|
||||
VecBuilder.fill(Units.degreesToRadians(0.01), 0.01, 0.01, 0.01, 0.01),
|
||||
|
||||
Reference in New Issue
Block a user