blob: 963d8c407dd0aa9408bb8f6dd14d1ba66f4928e3 [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"
Filip Kujawa7a799602024-02-23 12:27:47 -08006#include "aos/time/time.h"
Niko Sohmers3860f8a2024-01-12 21:05:19 -08007#include "frc971/constants/constants_sender_lib.h"
8#include "frc971/control_loops/control_loop.h"
9#include "frc971/control_loops/drivetrain/drivetrain_can_position_generated.h"
10#include "frc971/control_loops/drivetrain/drivetrain_status_generated.h"
11#include "frc971/zeroing/absolute_encoder.h"
12#include "frc971/zeroing/pot_and_absolute_encoder.h"
13#include "y2024/constants.h"
14#include "y2024/constants/constants_generated.h"
Niko Sohmersc4d2c502024-02-19 19:35:35 -080015#include "y2024/control_loops/superstructure/shooter.h"
Niko Sohmers3860f8a2024-01-12 21:05:19 -080016#include "y2024/control_loops/superstructure/superstructure_goal_generated.h"
17#include "y2024/control_loops/superstructure/superstructure_output_generated.h"
18#include "y2024/control_loops/superstructure/superstructure_position_generated.h"
19#include "y2024/control_loops/superstructure/superstructure_status_generated.h"
20
Maxwell Henderson09a4b022024-01-19 21:39:51 -080021namespace y2024::control_loops::superstructure {
Niko Sohmers3860f8a2024-01-12 21:05:19 -080022
23class Superstructure
24 : public ::frc971::controls::ControlLoop<Goal, Position, Status, Output> {
25 public:
Niko Sohmers74b0ad52024-02-03 18:00:31 -080026 using AbsoluteEncoderSubsystem =
27 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
28 ::frc971::zeroing::AbsoluteEncoderZeroingEstimator,
29 ::frc971::control_loops::AbsoluteEncoderProfiledJointStatus>;
30
Niko Sohmersafc51fe2024-01-29 17:48:35 -080031 using PotAndAbsoluteEncoderSubsystem =
32 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
33 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator,
34 ::frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus>;
35
Niko Sohmers3860f8a2024-01-12 21:05:19 -080036 explicit Superstructure(::aos::EventLoop *event_loop,
Niko Sohmers3860f8a2024-01-12 21:05:19 -080037 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_; }
Filip Kujawa7a799602024-02-23 12:27:47 -080048 inline const PotAndAbsoluteEncoderSubsystem &extend() const {
49 return extend_;
50 }
Niko Sohmersc4d2c502024-02-19 19:35:35 -080051
Niko Sohmers3860f8a2024-01-12 21:05:19 -080052 double robot_velocity() const;
53
54 protected:
55 virtual void RunIteration(const Goal *unsafe_goal, const Position *position,
56 aos::Sender<Output>::Builder *output,
57 aos::Sender<Status>::Builder *status) override;
58
59 private:
Niko Sohmers3860f8a2024-01-12 21:05:19 -080060 frc971::constants::ConstantsFetcher<Constants> constants_fetcher_;
Niko Sohmersafc51fe2024-01-29 17:48:35 -080061 const Constants *robot_constants_;
Niko Sohmers3860f8a2024-01-12 21:05:19 -080062 aos::Fetcher<frc971::control_loops::drivetrain::Status>
63 drivetrain_status_fetcher_;
64 aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
65
Niko Sohmersac4d8872024-02-23 13:55:47 -080066 CollisionAvoidance collision_avoidance_;
67
Niko Sohmers3860f8a2024-01-12 21:05:19 -080068 aos::Alliance alliance_ = aos::Alliance::kInvalid;
69
Filip Kujawa7a799602024-02-23 12:27:47 -080070 bool catapult_requested_ = false;
71
72 SuperstructureState state_ = SuperstructureState::IDLE;
73
74 aos::monotonic_clock::time_point transfer_start_time_ =
75 aos::monotonic_clock::time_point::min();
76
Niko Sohmers74b0ad52024-02-03 18:00:31 -080077 AbsoluteEncoderSubsystem intake_pivot_;
Filip Kujawa6d717632024-02-01 11:40:55 -080078 PotAndAbsoluteEncoderSubsystem climber_;
Niko Sohmers74b0ad52024-02-03 18:00:31 -080079
Niko Sohmersc4d2c502024-02-19 19:35:35 -080080 Shooter shooter_;
81
Filip Kujawa7a799602024-02-23 12:27:47 -080082 PotAndAbsoluteEncoderSubsystem extend_;
Niko Sohmers3860f8a2024-01-12 21:05:19 -080083 DISALLOW_COPY_AND_ASSIGN(Superstructure);
84};
85
Maxwell Henderson09a4b022024-01-19 21:39:51 -080086} // namespace y2024::control_loops::superstructure
Niko Sohmers3860f8a2024-01-12 21:05:19 -080087
88#endif // Y2024_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_