blob: 6c43863df917be54046f722f75ab60ac54110745 [file] [log] [blame]
Niko Sohmers3860f8a2024-01-12 21:05:19 -08001#ifndef Y2024_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
2#define Y2024_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
3
4#include "aos/events/event_loop.h"
5#include "aos/json_to_flatbuffer.h"
6#include "frc971/constants/constants_sender_lib.h"
7#include "frc971/control_loops/control_loop.h"
8#include "frc971/control_loops/drivetrain/drivetrain_can_position_generated.h"
9#include "frc971/control_loops/drivetrain/drivetrain_status_generated.h"
10#include "frc971/zeroing/absolute_encoder.h"
11#include "frc971/zeroing/pot_and_absolute_encoder.h"
12#include "y2024/constants.h"
13#include "y2024/constants/constants_generated.h"
Niko Sohmersc4d2c502024-02-19 19:35:35 -080014#include "y2024/control_loops/superstructure/shooter.h"
Niko Sohmers3860f8a2024-01-12 21:05:19 -080015#include "y2024/control_loops/superstructure/superstructure_goal_generated.h"
16#include "y2024/control_loops/superstructure/superstructure_output_generated.h"
17#include "y2024/control_loops/superstructure/superstructure_position_generated.h"
18#include "y2024/control_loops/superstructure/superstructure_status_generated.h"
19
Maxwell Henderson09a4b022024-01-19 21:39:51 -080020namespace y2024::control_loops::superstructure {
Niko Sohmers3860f8a2024-01-12 21:05:19 -080021
22class Superstructure
23 : public ::frc971::controls::ControlLoop<Goal, Position, Status, Output> {
24 public:
Niko Sohmers74b0ad52024-02-03 18:00:31 -080025 using AbsoluteEncoderSubsystem =
26 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
27 ::frc971::zeroing::AbsoluteEncoderZeroingEstimator,
28 ::frc971::control_loops::AbsoluteEncoderProfiledJointStatus>;
29
Niko Sohmersafc51fe2024-01-29 17:48:35 -080030 using PotAndAbsoluteEncoderSubsystem =
31 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
32 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator,
33 ::frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus>;
34
Niko Sohmers3860f8a2024-01-12 21:05:19 -080035 explicit Superstructure(::aos::EventLoop *event_loop,
36 std::shared_ptr<const constants::Values> values,
37 const ::std::string &name = "/superstructure");
38
Niko Sohmers74b0ad52024-02-03 18:00:31 -080039 inline const AbsoluteEncoderSubsystem &intake_pivot() const {
Niko Sohmersafc51fe2024-01-29 17:48:35 -080040 return intake_pivot_;
41 }
42
Filip Kujawa6d717632024-02-01 11:40:55 -080043 inline const PotAndAbsoluteEncoderSubsystem &climber() const {
44 return climber_;
45 }
46
Niko Sohmersc4d2c502024-02-19 19:35:35 -080047 inline const Shooter &shooter() const { return shooter_; }
48
Niko Sohmers3860f8a2024-01-12 21:05:19 -080049 double robot_velocity() const;
50
51 protected:
52 virtual void RunIteration(const Goal *unsafe_goal, const Position *position,
53 aos::Sender<Output>::Builder *output,
54 aos::Sender<Status>::Builder *status) override;
55
56 private:
57 std::shared_ptr<const constants::Values> values_;
58 frc971::constants::ConstantsFetcher<Constants> constants_fetcher_;
Niko Sohmersafc51fe2024-01-29 17:48:35 -080059 const Constants *robot_constants_;
Niko Sohmers3860f8a2024-01-12 21:05:19 -080060 aos::Fetcher<frc971::control_loops::drivetrain::Status>
61 drivetrain_status_fetcher_;
62 aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
63
64 aos::Alliance alliance_ = aos::Alliance::kInvalid;
65
Niko Sohmerse735fa82024-02-02 16:49:02 -080066 TransferRollerGoal transfer_goal_;
Niko Sohmers74b0ad52024-02-03 18:00:31 -080067 AbsoluteEncoderSubsystem intake_pivot_;
Filip Kujawa6d717632024-02-01 11:40:55 -080068 PotAndAbsoluteEncoderSubsystem climber_;
Niko Sohmers74b0ad52024-02-03 18:00:31 -080069
Niko Sohmersc4d2c502024-02-19 19:35:35 -080070 Shooter shooter_;
71
Niko Sohmers3860f8a2024-01-12 21:05:19 -080072 DISALLOW_COPY_AND_ASSIGN(Superstructure);
73};
74
Maxwell Henderson09a4b022024-01-19 21:39:51 -080075} // namespace y2024::control_loops::superstructure
Niko Sohmers3860f8a2024-01-12 21:05:19 -080076
77#endif // Y2024_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_