Send drivetrain message in sensor_reader
This moves the logic from sending our drivetrain message in
sensor_reader from wpilib_interface to a helper function in
sensor_reader.h
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: Id5eabc4dceca77038eb656bfe4507fed49031d90
diff --git a/frc971/wpilib/BUILD b/frc971/wpilib/BUILD
index ac9446e..aec2a1d 100644
--- a/frc971/wpilib/BUILD
+++ b/frc971/wpilib/BUILD
@@ -401,6 +401,7 @@
"//aos/time",
"//aos/util:phased_loop",
"//frc971/control_loops:control_loops_fbs",
+ "//frc971/control_loops/drivetrain:drivetrain_position_fbs",
"//third_party:wpilib",
],
)
diff --git a/frc971/wpilib/sensor_reader.cc b/frc971/wpilib/sensor_reader.cc
index bbcc3b5..70d5c35 100644
--- a/frc971/wpilib/sensor_reader.cc
+++ b/frc971/wpilib/sensor_reader.cc
@@ -84,6 +84,32 @@
return monotonic_clock::epoch() + (new_fpga_time + *fpga_offset);
}
+void SensorReader::SendDrivetrainPosition(
+ aos::Sender<control_loops::drivetrain::Position> drivetrain_position_sender,
+ std::function<double(double input)> velocity_translate,
+ std::function<double(double input)> encoder_to_meters, bool left_inverted,
+ bool right_inverted) {
+ auto builder = drivetrain_position_sender.MakeBuilder();
+ frc971::control_loops::drivetrain::Position::Builder drivetrain_builder =
+ builder.MakeBuilder<frc971::control_loops::drivetrain::Position>();
+
+ drivetrain_builder.add_left_encoder(
+ (left_inverted ? -1.0 : 1.0) *
+ encoder_to_meters(drivetrain_left_encoder_->GetRaw()));
+ drivetrain_builder.add_left_speed(
+ (left_inverted ? -1.0 : 1.0) *
+ velocity_translate(drivetrain_left_encoder_->GetPeriod()));
+
+ drivetrain_builder.add_right_encoder(
+ (right_inverted ? -1.0 : 1.0) *
+ encoder_to_meters(drivetrain_right_encoder_->GetRaw()));
+ drivetrain_builder.add_right_speed(
+ (right_inverted ? -1.0 : 1.0) *
+ velocity_translate(drivetrain_right_encoder_->GetPeriod()));
+
+ builder.CheckOk(builder.Send(drivetrain_builder.Finish()));
+}
+
void SensorReader::DoStart() {
Start();
if (dma_synchronizer_) {
diff --git a/frc971/wpilib/sensor_reader.h b/frc971/wpilib/sensor_reader.h
index 59434a8..72a557e 100644
--- a/frc971/wpilib/sensor_reader.h
+++ b/frc971/wpilib/sensor_reader.h
@@ -9,6 +9,7 @@
#include "aos/stl_mutex/stl_mutex.h"
#include "aos/time/time.h"
#include "frc971/control_loops/control_loops_generated.h"
+#include "frc971/control_loops/drivetrain/drivetrain_position_generated.h"
#include "frc971/input/robot_state_generated.h"
#include "frc971/wpilib/ahal/DigitalGlitchFilter.h"
#include "frc971/wpilib/ahal/DigitalInput.h"
@@ -215,6 +216,13 @@
(2.0 * M_PI);
}
+ void SendDrivetrainPosition(
+ aos::Sender<control_loops::drivetrain::Position>
+ drivetrain_position_sender,
+ std::function<double(double input)> velocity_translate,
+ std::function<double(double input)> encoder_to_meters, bool left_inverted,
+ bool right_inverted);
+
::aos::EventLoop *event_loop_;
::aos::Sender<::aos::RobotState> robot_state_sender_;