blob: 16fa3d0109b7713d050d15945f2864893b545e79 [file] [log] [blame]
Ravago Jones486de802021-05-19 20:47:55 -07001#include "y2021_bot3/control_loops/superstructure/superstructure.h"
2
3#include "aos/events/event_loop.h"
4
Stephan Pleinesf63bde82024-01-13 15:59:33 -08005namespace y2021_bot3::control_loops::superstructure {
Ravago Jones486de802021-05-19 20:47:55 -07006
7using frc971::control_loops::AbsoluteEncoderProfiledJointStatus;
8using frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus;
9
10Superstructure::Superstructure(::aos::EventLoop *event_loop,
11 const ::std::string &name)
James Kuszmaul61750662021-06-21 21:32:33 -070012 : frc971::controls::ControlLoop<Goal, Position, Status, Output>(event_loop,
13 name) {
Ravago Jones486de802021-05-19 20:47:55 -070014 event_loop->SetRuntimeRealtimePriority(30);
15}
16
Sabina Leaverc59171b2021-08-14 14:22:18 -070017void Superstructure::RunIteration(const Goal *unsafe_goal,
Ravago Jones486de802021-05-19 20:47:55 -070018 const Position * /*position*/,
19 aos::Sender<Output>::Builder *output,
20 aos::Sender<Status>::Builder *status) {
21 if (WasReset()) {
22 AOS_LOG(ERROR, "WPILib reset, restarting\n");
23 }
24
Sabina Leaverc59171b2021-08-14 14:22:18 -070025 if (output != nullptr && unsafe_goal != nullptr) {
Ravago Jones486de802021-05-19 20:47:55 -070026 OutputT output_struct;
Sabina Leaverc59171b2021-08-14 14:22:18 -070027
28 output_struct.intake_volts =
29 std::clamp(unsafe_goal->intake_speed(), -12.0, 12.0);
30 output_struct.outtake_volts =
31 std::clamp(unsafe_goal->outtake_speed(), -12.0, 12.0);
Sabina Leaver4a326b12021-09-29 20:14:23 -070032 output_struct.climber_volts =
33 std::clamp(unsafe_goal->climber_speed(), -12.0, 12.0);
milind1f1dca32021-07-03 13:50:07 -070034 output->CheckOk(output->Send(Output::Pack(*output->fbb(), &output_struct)));
Ravago Jones486de802021-05-19 20:47:55 -070035 }
36
37 Status::Builder status_builder = status->MakeBuilder<Status>();
38
39 status_builder.add_zeroed(true);
40 status_builder.add_estopped(false);
41
Sabina Leaverc59171b2021-08-14 14:22:18 -070042 if (unsafe_goal != nullptr) {
43 status_builder.add_intake_speed(unsafe_goal->intake_speed());
44 status_builder.add_outtake_speed(unsafe_goal->outtake_speed());
Sabina Leaver4a326b12021-09-29 20:14:23 -070045 status_builder.add_climber_speed(unsafe_goal->climber_speed());
Sabina Leaverc59171b2021-08-14 14:22:18 -070046 }
47
milind1f1dca32021-07-03 13:50:07 -070048 (void)status->Send(status_builder.Finish());
Ravago Jones486de802021-05-19 20:47:55 -070049}
50
Stephan Pleinesf63bde82024-01-13 15:59:33 -080051} // namespace y2021_bot3::control_loops::superstructure