Don't disable drivetrain outputs on missing IMU
This also makes it so that the down-estimator doesn't assume that the
2024 robot exists in simulation....
Change-Id: I308f3d88fc0956766a5d46c7438331aeec00b754
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/frc971/control_loops/drivetrain/drivetrain.cc b/frc971/control_loops/drivetrain/drivetrain.cc
index 81f1d8d..242495f 100644
--- a/frc971/control_loops/drivetrain/drivetrain.cc
+++ b/frc971/control_loops/drivetrain/drivetrain.cc
@@ -579,9 +579,7 @@
// If the filters aren't ready/valid, then disable all outputs (currently,
// this only happens if the IMU is faulted or has not zeroed).
- // TODO(james): Add exceptions so that during competitive play the driver
- // can retain minimal control of the robot.
- if (!filters_.Ready()) {
+ if (dt_config_.require_imu_for_output && !filters_.Ready()) {
output_struct.left_voltage = 0.0;
output_struct.right_voltage = 0.0;
}
diff --git a/frc971/control_loops/drivetrain/drivetrain_config.fbs b/frc971/control_loops/drivetrain/drivetrain_config.fbs
index 0947063..3d03fb0 100644
--- a/frc971/control_loops/drivetrain/drivetrain_config.fbs
+++ b/frc971/control_loops/drivetrain/drivetrain_config.fbs
@@ -148,4 +148,5 @@
top_button_use:PistolTopButtonUse = kShift (id: 17);
second_button_use:PistolSecondButtonUse = kShiftLow (id: 18);
bottom_button_use:PistolBottomButtonUse = kSlowDown (id: 19);
+ require_imu_for_output:bool = true (id: 21);
}
diff --git a/frc971/control_loops/drivetrain/drivetrain_config.h b/frc971/control_loops/drivetrain/drivetrain_config.h
index 3f56082..4c35b6a 100644
--- a/frc971/control_loops/drivetrain/drivetrain_config.h
+++ b/frc971/control_loops/drivetrain/drivetrain_config.h
@@ -154,6 +154,9 @@
SplineFollowerConfig spline_follower_config{};
+ // If set, then the IMU must be zeroed before we will send any outputs.
+ bool require_imu_for_output = true;
+
// Converts the robot state to a linear distance position, velocity.
static Eigen::Matrix<Scalar, 2, 1> LeftRightToLinear(
const Eigen::Matrix<Scalar, 7, 1> &left_right) {
@@ -261,6 +264,7 @@
ASSIGN(bottom_button_use),
.spline_follower_config = SplineFollowerConfig::FromFlatbuffer(
fbs.spline_follower_config()),
+ ASSIGN(require_imu_for_output),
#undef ASSIGN
};
}