Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ public class WPILibPoseEstimatorConstants {

public static final StandardDeviations2D DEFAULT_VISION_STD_DEV = new StandardDeviations2D(0.0003, 0.0003, 0.003);

public static final StandardDeviations2D VISION_STD_DEV_COLLISION_REDUCTION = new StandardDeviations2D();

public static final double MINIMUM_COLLISION_IMU_ACCELERATION_G = 2;

public static final Rotation2d MINIMUM_TILT_IMU_ROLL = Rotation2d.fromDegrees(4);
Expand All @@ -29,6 +27,8 @@ public class WPILibPoseEstimatorConstants {

public static final double SKID_ODOMETRY_ACCURACY_REDUCTION_FACTOR = 0;

public static final double CALIBRATED_IMU_OFFSET_VISION_ANGLE_STD_DEVS_ADDITION = 0;

/**
* constant represents the addition to odometryAccuracy when the compensated vision X and Y StdDevs average is equal to one
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,11 +229,16 @@ private void updateOdometryAccuracy(OdometryData data) {
}

private void updateVision(RobotPoseObservation visionRobotPoseObservation) {
addVisionMeasurement(visionRobotPoseObservation);
RobotPoseObservation compensatedVisionObservation = new RobotPoseObservation(
visionRobotPoseObservation.timestampSeconds(),
visionRobotPoseObservation.robotPose(),
compensateByPoseEstimatorConditions(visionRobotPoseObservation.stdDevs())
);
addVisionMeasurement(compensatedVisionObservation);

getEstimatedPoseToIMUYawDifference(
imuYawBuffer.getSample(visionRobotPoseObservation.timestampSeconds()),
visionRobotPoseObservation.timestampSeconds()
imuYawBuffer.getSample(compensatedVisionObservation.timestampSeconds()),
compensatedVisionObservation.timestampSeconds()
).ifPresent(yawDifference -> {
poseToIMUYawDifferenceBuffer.insert(yawDifference);

Expand All @@ -247,11 +252,25 @@ private void addVisionMeasurement(RobotPoseObservation visionObservation) {
poseEstimator.addVisionMeasurement(
visionObservation.robotPose(),
visionObservation.timestampSeconds(),
compensateByOdometryAccuracy(visionObservation.stdDevs()).asColumnVector()
visionObservation.stdDevs().asColumnVector()
);
this.lastVisionObservation = visionObservation;
}

private StandardDeviations2D compensateByPoseEstimatorConditions(StandardDeviations2D visionStdDevs) {
return compensateByIsIMUOffsetCalibrated(compensateByOdometryAccuracy(visionStdDevs));
}

private StandardDeviations2D compensateByIsIMUOffsetCalibrated(StandardDeviations2D visionStdDevs) {
return new StandardDeviations2D(
visionStdDevs.xStandardDeviations(),
visionStdDevs.yStandardDeviations(),
isIMUOffsetCalibrated
? visionStdDevs.angleStandardDeviations() + WPILibPoseEstimatorConstants.CALIBRATED_IMU_OFFSET_VISION_ANGLE_STD_DEVS_ADDITION
: visionStdDevs.angleStandardDeviations()
);
}

private StandardDeviations2D compensateByOdometryAccuracy(StandardDeviations2D visionStdDevs) {
StandardDeviations2D compensatedStdDevs = new StandardDeviations2D(
visionStdDevs.xStandardDeviations() * odometryAccuracy,
Expand Down