Zero gyros when enabled.
Change-Id: Ifc300f1b65b0c7ab7a0b3b6d3c4c48f100c53103
diff --git a/frc971/wpilib/ADIS16448.cc b/frc971/wpilib/ADIS16448.cc
index c5e083e..cf1a6f8 100644
--- a/frc971/wpilib/ADIS16448.cc
+++ b/frc971/wpilib/ADIS16448.cc
@@ -7,6 +7,7 @@
#include <math.h>
#include "aos/common/logging/queue_logging.h"
+#include "aos/common/messages/robot_state.q.h"
#include "aos/common/time.h"
#include "aos/linux_code/init.h"
@@ -198,22 +199,30 @@
// The first few seconds of samples are averaged and subtracted from
// subsequent samples for zeroing purposes.
- if (!gyros_are_zeroed()) {
+ if (!gyros_are_zeroed_) {
average_gyro_x.AddData(message->gyro_x);
average_gyro_y.AddData(message->gyro_y);
average_gyro_z.AddData(message->gyro_z);
if (average_gyro_x.full() && average_gyro_y.full() &&
average_gyro_z.full()) {
- gyro_x_zeroed_offset_ = average_gyro_x.GetAverage();
- gyro_y_zeroed_offset_ = average_gyro_y.GetAverage();
- gyro_z_zeroed_offset_ = average_gyro_z.GetAverage();
- LOG(DEBUG, "total gyro zero offset X:%f, Y:%f, Z:%f\n",
- gyro_x_zeroed_offset_, gyro_y_zeroed_offset_, gyro_z_zeroed_offset_);
- gyros_are_zeroed_.store(true);
+ ::aos::joystick_state.FetchLatest();
+ if (::aos::joystick_state.get() && ::aos::joystick_state->enabled) {
+ gyro_x_zeroed_offset_ = -average_gyro_x.GetAverage();
+ gyro_y_zeroed_offset_ = -average_gyro_y.GetAverage();
+ gyro_z_zeroed_offset_ = -average_gyro_z.GetAverage();
+ LOG(INFO, "total gyro zero offset X:%f, Y:%f, Z:%f\n",
+ gyro_x_zeroed_offset_, gyro_y_zeroed_offset_,
+ gyro_z_zeroed_offset_);
+ gyros_are_zeroed_ = true;
+ }
}
}
+ message->gyro_x += gyro_x_zeroed_offset_;
+ message->gyro_y += gyro_y_zeroed_offset_;
+ message->gyro_z += gyro_z_zeroed_offset_;
+
message->accelerometer_x =
ConvertValue(&to_receive[10], kAccelerometerLsbG);
message->accelerometer_y =