[wpimath] Add support for varying vision standard deviations in pose estimators (#2956)

Exposes the R passed to vision correct to users.
This commit is contained in:
Matt
2020-12-24 16:05:07 -08:00
committed by GitHub
parent df299d6edd
commit 6b567e0066
8 changed files with 233 additions and 69 deletions

View File

@@ -30,10 +30,7 @@ DifferentialDrivePoseEstimator::DifferentialDrivePoseEstimator(
frc::AngleMean<3, 5>(2), frc::AngleResidual<5>(2),
frc::AngleResidual<3>(2), frc::AngleAdd<5>(2), nominalDt),
m_nominalDt(nominalDt) {
// Create R (covariances) for vision measurements.
Eigen::Matrix<double, 3, 3> visionContR =
frc::MakeCovMatrix(visionMeasurmentStdDevs);
m_visionDiscR = frc::DiscretizeR<3>(visionContR, m_nominalDt);
SetVisionMeasurementStdDevs(visionMeasurmentStdDevs);
// Create correction mechanism for vision measurements.
m_visionCorrect = [&](const Eigen::Matrix<double, 3, 1>& u,
@@ -51,6 +48,14 @@ DifferentialDrivePoseEstimator::DifferentialDrivePoseEstimator(
m_observer.SetXhat(FillStateVector(initialPose, 0_m, 0_m));
}
void DifferentialDrivePoseEstimator::SetVisionMeasurementStdDevs(
const std::array<double, 3>& visionMeasurmentStdDevs) {
// Create R (covariances) for vision measurements.
Eigen::Matrix<double, 3, 3> visionContR =
frc::MakeCovMatrix(visionMeasurmentStdDevs);
m_visionDiscR = frc::DiscretizeR<3>(visionContR, m_nominalDt);
}
void DifferentialDrivePoseEstimator::ResetPosition(
const Pose2d& pose, const Rotation2d& gyroAngle) {
m_previousAngle = pose.Rotation();