blob: 13d5decfa73cef24033e355893b1a330932225c9 [file] [log] [blame]
Henry Speiser354d2782022-07-22 13:56:48 -07001#ifndef Y2022_BOT3_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
2#define Y2022_BOT3_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
3
4#include "aos/events/event_loop.h"
5#include "frc971/control_loops/control_loop.h"
6#include "frc971/control_loops/drivetrain/drivetrain_status_generated.h"
James Kuszmaulec635d22023-08-12 18:39:24 -07007#include "frc971/zeroing/pot_and_absolute_encoder.h"
Henry Speiser354d2782022-07-22 13:56:48 -07008#include "y2022_bot3/constants.h"
9#include "y2022_bot3/control_loops/superstructure/superstructure_goal_generated.h"
10#include "y2022_bot3/control_loops/superstructure/superstructure_output_generated.h"
11#include "y2022_bot3/control_loops/superstructure/superstructure_position_generated.h"
12#include "y2022_bot3/control_loops/superstructure/superstructure_status_generated.h"
13
14namespace y2022_bot3 {
15namespace control_loops {
16namespace superstructure {
17
18class Superstructure
19 : public ::frc971::controls::ControlLoop<Goal, Position, Status, Output> {
20 public:
21 using RelativeEncoderSubsystem =
22 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
23 ::frc971::zeroing::RelativeEncoderZeroingEstimator,
24 ::frc971::control_loops::RelativeEncoderProfiledJointStatus>;
25
26 using PotAndAbsoluteEncoderSubsystem =
27 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
28 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator,
29 ::frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus>;
30
31 explicit Superstructure(::aos::EventLoop *event_loop,
32 std::shared_ptr<const constants::Values> values,
33 const ::std::string &name = "/superstructure");
34
Niko Sohmers74c5b592022-09-10 13:41:46 -070035 inline const PotAndAbsoluteEncoderSubsystem &intake() const {
36 return intake_;
37 }
38 inline const PotAndAbsoluteEncoderSubsystem &climber_left() const {
39 return climber_left_;
40 }
41 inline const PotAndAbsoluteEncoderSubsystem &climber_right() const {
42 return climber_right_;
43 }
44
Henry Speiser354d2782022-07-22 13:56:48 -070045 protected:
46 virtual void RunIteration(const Goal *unsafe_goal, const Position *position,
47 aos::Sender<Output>::Builder *output,
48 aos::Sender<Status>::Builder *status) override;
49
50 private:
51 std::shared_ptr<const constants::Values> values_;
52
Niko Sohmers74c5b592022-09-10 13:41:46 -070053 PotAndAbsoluteEncoderSubsystem climber_left_;
54 PotAndAbsoluteEncoderSubsystem climber_right_;
55 PotAndAbsoluteEncoderSubsystem intake_;
56
Henry Speiser354d2782022-07-22 13:56:48 -070057 aos::Fetcher<frc971::control_loops::drivetrain::Status>
58 drivetrain_status_fetcher_;
59 aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
60
61 aos::Alliance alliance_ = aos::Alliance::kInvalid;
62
63 DISALLOW_COPY_AND_ASSIGN(Superstructure);
64};
65
66} // namespace superstructure
67} // namespace control_loops
68} // namespace y2022_bot3
69
70#endif // Y2022_BOT3_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_