blob: c10ebbd10938e371e1a4f8ae4814f6b07ada05f1 [file] [log] [blame]
Austin Schuh87c10632017-02-05 19:02:17 -08001#ifndef Y2017_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
2#define Y2017_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_
3
4#include <memory>
5
Alex Perrycb7da4b2019-08-28 19:35:56 -07006#include "aos/events/event_loop.h"
Philipp Schrader790cb542023-07-05 21:06:52 -07007#include "frc971/control_loops/control_loop.h"
Austin Schuh87c10632017-02-05 19:02:17 -08008#include "frc971/control_loops/state_feedback_loop.h"
Parker Schuh208a58d2017-04-12 20:51:38 -07009#include "y2017/control_loops/superstructure/column/column.h"
Austin Schuh87c10632017-02-05 19:02:17 -080010#include "y2017/control_loops/superstructure/hood/hood.h"
Adam Snaider79900c22017-02-08 20:23:15 -080011#include "y2017/control_loops/superstructure/intake/intake.h"
Tyler Chatow2737d2a2017-02-08 21:20:51 -080012#include "y2017/control_loops/superstructure/shooter/shooter.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -070013#include "y2017/control_loops/superstructure/superstructure_goal_generated.h"
14#include "y2017/control_loops/superstructure/superstructure_output_generated.h"
15#include "y2017/control_loops/superstructure/superstructure_position_generated.h"
16#include "y2017/control_loops/superstructure/superstructure_status_generated.h"
Parker Schuh208a58d2017-04-12 20:51:38 -070017#include "y2017/control_loops/superstructure/vision_distance_average.h"
Austin Schuh87c10632017-02-05 19:02:17 -080018
19namespace y2017 {
20namespace control_loops {
21namespace superstructure {
22
23class Superstructure
James Kuszmaul61750662021-06-21 21:32:33 -070024 : public ::frc971::controls::ControlLoop<Goal, Position, Status, Output> {
Austin Schuh87c10632017-02-05 19:02:17 -080025 public:
Alex Perrycb7da4b2019-08-28 19:35:56 -070026 explicit Superstructure(::aos::EventLoop *event_loop,
27 const ::std::string &name = "/superstructure");
Austin Schuh87c10632017-02-05 19:02:17 -080028
Adam Snaidercfe13062017-02-05 18:23:09 -080029 const hood::Hood &hood() const { return hood_; }
Adam Snaider79900c22017-02-08 20:23:15 -080030 const intake::Intake &intake() const { return intake_; }
Austin Schuhcd3237a2017-02-18 14:19:26 -080031 const shooter::Shooter &shooter() const { return shooter_; }
Austin Schuhd5ccb862017-03-11 22:06:36 -080032 const column::Column &column() const { return column_; }
33
34 // Sets the ignore collisions bit. This should *not* be used on the robot.
35 void set_ignore_collisions(bool ignore_collisions) {
36 ignore_collisions_ = ignore_collisions;
37 }
Austin Schuh87c10632017-02-05 19:02:17 -080038
39 protected:
Alex Perrycb7da4b2019-08-28 19:35:56 -070040 virtual void RunIteration(const Goal *unsafe_goal, const Position *position,
41 aos::Sender<Output>::Builder *output,
42 aos::Sender<Status>::Builder *status) override;
Austin Schuh87c10632017-02-05 19:02:17 -080043
44 private:
Austin Schuhb6c5c852019-05-19 20:13:31 -070045 ::aos::Fetcher<::y2017::vision::VisionStatus> vision_status_fetcher_;
Alex Perrycb7da4b2019-08-28 19:35:56 -070046 ::aos::Fetcher<::frc971::control_loops::drivetrain::Status>
Austin Schuhbd0a40f2019-06-30 14:56:31 -070047 drivetrain_status_fetcher_;
Austin Schuhb6c5c852019-05-19 20:13:31 -070048
Austin Schuh87c10632017-02-05 19:02:17 -080049 hood::Hood hood_;
Adam Snaider79900c22017-02-08 20:23:15 -080050 intake::Intake intake_;
Tyler Chatow2737d2a2017-02-08 21:20:51 -080051 shooter::Shooter shooter_;
Austin Schuhd5ccb862017-03-11 22:06:36 -080052 column::Column column_;
53
54 // If true, we ignore collisions.
55 bool ignore_collisions_ = false;
Austin Schuh87c10632017-02-05 19:02:17 -080056
Parker Schuh208a58d2017-04-12 20:51:38 -070057 VisionDistanceAverage distance_average_;
58
Austin Schuhe8b00752017-04-16 19:14:31 -070059 ::frc971::shooter_interpolation::InterpolationTable<
60 ::y2017::constants::Values::ShotParams>
61 shot_interpolation_table_;
62
Austin Schuh87c10632017-02-05 19:02:17 -080063 DISALLOW_COPY_AND_ASSIGN(Superstructure);
64};
65
66} // namespace superstructure
67} // namespace control_loops
68} // namespace y2017
69
70#endif // Y2017_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_