blob: e387cf2cbf3ae215cbc0a0062474f49c9db77f32 [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
John Park33858a32018-09-28 23:05:48 -07006#include "aos/controls/control_loop.h"
Austin Schuhb6c5c852019-05-19 20:13:31 -07007#include "aos/events/event-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"
Austin Schuhcd3237a2017-02-18 14:19:26 -080013#include "y2017/control_loops/superstructure/superstructure.q.h"
Parker Schuh208a58d2017-04-12 20:51:38 -070014#include "y2017/control_loops/superstructure/vision_distance_average.h"
Austin Schuh87c10632017-02-05 19:02:17 -080015
16namespace y2017 {
17namespace control_loops {
18namespace superstructure {
19
20class Superstructure
21 : public ::aos::controls::ControlLoop<control_loops::SuperstructureQueue> {
22 public:
23 explicit Superstructure(
Austin Schuh55a13dc2019-01-27 22:39:03 -080024 ::aos::EventLoop *event_loop,
25 const ::std::string &name = ".y2017.control_loops.superstructure_queue");
Austin Schuh87c10632017-02-05 19:02:17 -080026
Adam Snaidercfe13062017-02-05 18:23:09 -080027 const hood::Hood &hood() const { return hood_; }
Adam Snaider79900c22017-02-08 20:23:15 -080028 const intake::Intake &intake() const { return intake_; }
Austin Schuhcd3237a2017-02-18 14:19:26 -080029 const shooter::Shooter &shooter() const { return shooter_; }
Austin Schuhd5ccb862017-03-11 22:06:36 -080030 const column::Column &column() const { return column_; }
31
32 // Sets the ignore collisions bit. This should *not* be used on the robot.
33 void set_ignore_collisions(bool ignore_collisions) {
34 ignore_collisions_ = ignore_collisions;
35 }
Austin Schuh87c10632017-02-05 19:02:17 -080036
37 protected:
38 virtual void RunIteration(
39 const control_loops::SuperstructureQueue::Goal *unsafe_goal,
40 const control_loops::SuperstructureQueue::Position *position,
41 control_loops::SuperstructureQueue::Output *output,
42 control_loops::SuperstructureQueue::Status *status) override;
43
44 private:
Austin Schuhb6c5c852019-05-19 20:13:31 -070045 ::aos::Fetcher<::y2017::vision::VisionStatus> vision_status_fetcher_;
46
Austin Schuh87c10632017-02-05 19:02:17 -080047 hood::Hood hood_;
Adam Snaider79900c22017-02-08 20:23:15 -080048 intake::Intake intake_;
Tyler Chatow2737d2a2017-02-08 21:20:51 -080049 shooter::Shooter shooter_;
Austin Schuhd5ccb862017-03-11 22:06:36 -080050 column::Column column_;
51
52 // If true, we ignore collisions.
53 bool ignore_collisions_ = false;
Austin Schuh87c10632017-02-05 19:02:17 -080054
Parker Schuh208a58d2017-04-12 20:51:38 -070055 VisionDistanceAverage distance_average_;
56
Austin Schuhe8b00752017-04-16 19:14:31 -070057 ::frc971::shooter_interpolation::InterpolationTable<
58 ::y2017::constants::Values::ShotParams>
59 shot_interpolation_table_;
60
Austin Schuh87c10632017-02-05 19:02:17 -080061 DISALLOW_COPY_AND_ASSIGN(Superstructure);
62};
63
64} // namespace superstructure
65} // namespace control_loops
66} // namespace y2017
67
68#endif // Y2017_CONTROL_LOOPS_SUPERSTRUCTURE_SUPERSTRUCTURE_H_