No zeroing while moving for absolute encoders
Modified zeroing code for pot and absolute encoder to no longer
update estimates of offsets while moving. This causes a delay of
3 samples (due to a sample buffer size).
Change-Id: Iaf82ad83ebcfc68fa75ce23716c7d89a6e34a917
diff --git a/frc971/zeroing/zeroing_test.cc b/frc971/zeroing/zeroing_test.cc
index 87debdd..420ca61 100644
--- a/frc971/zeroing/zeroing_test.cc
+++ b/frc971/zeroing/zeroing_test.cc
@@ -22,6 +22,7 @@
static const size_t kSampleSize = 30;
static const double kAcceptableUnzeroedError = 0.2;
static const double kIndexErrorFraction = 0.3;
+static const size_t kMovingBufferSize = 3;
class ZeroingTest : public ::testing::Test {
protected:
@@ -319,15 +320,16 @@
const double start_pos = 2.1;
double measured_absolute_position = 0.3 * index_diff;
- PotAndAbsoluteEncoderZeroingConstants constants{
- kSampleSize, index_diff, measured_absolute_position, 0.1};
+ PotAndAbsoluteEncoderZeroingConstants constants{kSampleSize, index_diff,
+ measured_absolute_position,
+ 0.1, kMovingBufferSize};
sim.Initialize(start_pos, index_diff / 3.0, 0.0,
constants.measured_absolute_position);
PotAndAbsEncoderZeroingEstimator estimator(constants);
- for (size_t i = 0; i < kSampleSize - 1; ++i) {
+ for (size_t i = 0; i < kSampleSize + kMovingBufferSize - 1; ++i) {
MoveTo(&sim, &estimator, start_pos);
ASSERT_FALSE(estimator.zeroed());
}
@@ -345,15 +347,16 @@
const double start_pos = 10 * index_diff;
double measured_absolute_position = 0.3 * index_diff;
- PotAndAbsoluteEncoderZeroingConstants constants{
- kSampleSize, index_diff, measured_absolute_position, 0.1};
+ PotAndAbsoluteEncoderZeroingConstants constants{kSampleSize, index_diff,
+ measured_absolute_position,
+ 0.1, kMovingBufferSize};
sim.Initialize(start_pos, index_diff / 3.0, 0.0,
constants.measured_absolute_position);
PotAndAbsEncoderZeroingEstimator estimator(constants);
- for (size_t i = 0; i < kSampleSize - 1; ++i) {
+ for (size_t i = 0; i < kSampleSize + kMovingBufferSize - 1; ++i) {
MoveTo(&sim, &estimator, start_pos + i * index_diff);
ASSERT_FALSE(estimator.zeroed());
}