Don't latch IMU faults in 2022 localizer
We get occasional checksum failures. Don't brick the localizer because
of that.
Change-Id: I67fa55264ac56127b7a8f150db35bf7747af7468
Signed-off-by: James Kuszmaul <jabukuszmaul@gmail.com>
diff --git a/y2022/localizer/localizer.cc b/y2022/localizer/localizer.cc
index 1aa2458..964bf74 100644
--- a/y2022/localizer/localizer.cc
+++ b/y2022/localizer/localizer.cc
@@ -862,6 +862,7 @@
aos::EventLoop *event_loop,
const control_loops::drivetrain::DrivetrainConfig<double> &dt_config)
: event_loop_(event_loop),
+ dt_config_(dt_config),
model_based_(dt_config),
status_sender_(event_loop_->MakeSender<LocalizerStatus>("/localizer")),
output_sender_(event_loop_->MakeSender<LocalizerOutput>("/localizer")),
@@ -962,7 +963,7 @@
const Eigen::Vector2d encoders{
left_encoder_.Unwrap(value->left_encoder()),
right_encoder_.Unwrap(value->right_encoder())};
- if (zeroer_.Zeroed()) {
+ {
const aos::monotonic_clock::time_point pico_timestamp{
std::chrono::microseconds(value->pico_timestamp_us())};
// TODO(james): If we get large enough drift off of the pico,
@@ -984,8 +985,13 @@
(output_fetcher_.context().monotonic_event_time +
std::chrono::milliseconds(10) <
event_loop_->context().monotonic_event_time);
+ const bool zeroed = zeroer_.Zeroed();
model_based_.HandleImu(
- sample_timestamp, zeroer_.ZeroedGyro(), zeroer_.ZeroedAccel(),
+ sample_timestamp,
+ zeroed ? zeroer_.ZeroedGyro().value() : Eigen::Vector3d::Zero(),
+ zeroed ? zeroer_.ZeroedAccel().value()
+ : dt_config_.imu_transform.transpose() *
+ Eigen::Vector3d::UnitZ(),
encoders,
disabled ? Eigen::Vector2d::Zero()
: Eigen::Vector2d{output_fetcher_->left_voltage(),