blob: 4d5913202899985e5017aa9e1a5d56cdb9e664b6 [file] [log] [blame]
Tyler Chatowe51334a2019-01-20 16:58:16 -08001#ifndef Y2019_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
2#define Y2019_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
3
Alex Perrycb7da4b2019-08-28 19:35:56 -07004#include "aos/events/event_loop.h"
Philipp Schrader790cb542023-07-05 21:06:52 -07005#include "frc971/control_loops/control_loop.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07006#include "frc971/control_loops/drivetrain/drivetrain_status_generated.h"
Theo Bafrali00e42272019-02-12 01:07:46 -08007#include "frc971/control_loops/static_zeroing_single_dof_profiled_subsystem.h"
James Kuszmaulec635d22023-08-12 18:39:24 -07008#include "frc971/zeroing/absolute_encoder.h"
9#include "frc971/zeroing/pot_and_absolute_encoder.h"
Theo Bafrali00e42272019-02-12 01:07:46 -080010#include "y2019/constants.h"
11#include "y2019/control_loops/superstructure/collision_avoidance.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070012#include "y2019/control_loops/superstructure/superstructure_goal_generated.h"
13#include "y2019/control_loops/superstructure/superstructure_output_generated.h"
14#include "y2019/control_loops/superstructure/superstructure_position_generated.h"
15#include "y2019/control_loops/superstructure/superstructure_status_generated.h"
Theo Bafrali3274a182019-02-17 20:01:38 -080016#include "y2019/control_loops/superstructure/vacuum.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070017#include "y2019/status_light_generated.h"
Tyler Chatowe51334a2019-01-20 16:58:16 -080018
19namespace y2019 {
20namespace control_loops {
21namespace superstructure {
22
23class Superstructure
James Kuszmaul61750662021-06-21 21:32:33 -070024 : public ::frc971::controls::ControlLoop<Goal, Position, Status, Output> {
Tyler Chatowe51334a2019-01-20 16:58:16 -080025 public:
Alex Perrycb7da4b2019-08-28 19:35:56 -070026 explicit Superstructure(::aos::EventLoop *event_loop,
27 const ::std::string &name = "/superstructure");
Tyler Chatowe51334a2019-01-20 16:58:16 -080028
Theo Bafrali00e42272019-02-12 01:07:46 -080029 using PotAndAbsoluteEncoderSubsystem =
30 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
31 ::frc971::zeroing::PotAndAbsoluteEncoderZeroingEstimator,
32 ::frc971::control_loops::PotAndAbsoluteEncoderProfiledJointStatus>;
33 using AbsoluteEncoderSubsystem =
34 ::frc971::control_loops::StaticZeroingSingleDOFProfiledSubsystem<
35 ::frc971::zeroing::AbsoluteEncoderZeroingEstimator,
36 ::frc971::control_loops::AbsoluteEncoderProfiledJointStatus>;
37
Theo Bafrali09517b92019-02-16 15:59:17 -080038 const PotAndAbsoluteEncoderSubsystem &elevator() const { return elevator_; }
39 const PotAndAbsoluteEncoderSubsystem &wrist() const { return wrist_; }
40 const AbsoluteEncoderSubsystem &intake() const { return intake_; }
41 const PotAndAbsoluteEncoderSubsystem &stilts() const { return stilts_; }
Theo Bafrali3274a182019-02-17 20:01:38 -080042 const Vacuum &vacuum() const { return vacuum_; }
Theo Bafrali00e42272019-02-12 01:07:46 -080043
Tyler Chatowe51334a2019-01-20 16:58:16 -080044 protected:
Alex Perrycb7da4b2019-08-28 19:35:56 -070045 virtual void RunIteration(const Goal *unsafe_goal, const Position *position,
46 aos::Sender<Output>::Builder *output,
47 aos::Sender<Status>::Builder *status) override;
Tyler Chatowe51334a2019-01-20 16:58:16 -080048
49 private:
Austin Schuhff973552019-05-19 16:49:28 -070050 void SendColors(float red, float green, float blue);
51
52 ::aos::Sender<::y2019::StatusLight> status_light_sender_;
Alex Perrycb7da4b2019-08-28 19:35:56 -070053 ::aos::Fetcher<::frc971::control_loops::drivetrain::Status>
Austin Schuhbd0a40f2019-06-30 14:56:31 -070054 drivetrain_status_fetcher_;
Austin Schuhff973552019-05-19 16:49:28 -070055
Theo Bafrali00e42272019-02-12 01:07:46 -080056 PotAndAbsoluteEncoderSubsystem elevator_;
57 PotAndAbsoluteEncoderSubsystem wrist_;
58 AbsoluteEncoderSubsystem intake_;
59 PotAndAbsoluteEncoderSubsystem stilts_;
Theo Bafrali3274a182019-02-17 20:01:38 -080060 Vacuum vacuum_;
Theo Bafrali00e42272019-02-12 01:07:46 -080061
62 CollisionAvoidance collision_avoidance_;
Tyler Chatowe51334a2019-01-20 16:58:16 -080063
Austin Schuh194c43c2019-03-22 20:40:53 -070064 int line_blink_count_ = 0;
65
Theo Bafrali09517b92019-02-16 15:59:17 -080066 static constexpr double kMinIntakeAngleForRollers = -0.7;
67
Tyler Chatowe51334a2019-01-20 16:58:16 -080068 DISALLOW_COPY_AND_ASSIGN(Superstructure);
69};
70
71} // namespace superstructure
72} // namespace control_loops
73} // namespace y2019
74
Austin Schuh55a13dc2019-01-27 22:39:03 -080075#endif // Y2019_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_