blob: a77ab1572c85a625609cb6ebad07245ca0d9e722 [file] [log] [blame]
Brian Silverman17f503e2015-08-02 18:17:18 -07001#ifndef Y2014_CONTROL_LOOPS_DRIVETRAIN_H_
2#define Y2014_CONTROL_LOOPS_DRIVETRAIN_H_
3
4#include "Eigen/Dense"
5
6#include "aos/common/controls/polytope.h"
7#include "aos/common/controls/control_loop.h"
8#include "aos/common/controls/polytope.h"
9#include "y2014/control_loops/drivetrain/drivetrain.q.h"
Austin Schuh64ebab22015-11-26 13:28:30 -080010#include "y2014/control_loops/drivetrain/polydrivetrain.h"
11#include "y2014/control_loops/drivetrain/ssdrivetrain.h"
Brian Silverman17f503e2015-08-02 18:17:18 -070012#include "aos/common/util/log_interval.h"
13
Austin Schuh6197a182015-11-28 16:04:40 -080014namespace y2014 {
Brian Silverman17f503e2015-08-02 18:17:18 -070015namespace control_loops {
Austin Schuh6197a182015-11-28 16:04:40 -080016namespace drivetrain {
Brian Silverman17f503e2015-08-02 18:17:18 -070017
18class DrivetrainLoop
Austin Schuh6197a182015-11-28 16:04:40 -080019 : public aos::controls::ControlLoop<::frc971::control_loops::DrivetrainQueue> {
Brian Silverman17f503e2015-08-02 18:17:18 -070020 public:
21 // Constructs a control loop which can take a Drivetrain or defaults to the
22 // drivetrain at frc971::control_loops::drivetrain
Austin Schuh6197a182015-11-28 16:04:40 -080023 explicit DrivetrainLoop(
24 ::frc971::control_loops::DrivetrainQueue *my_drivetrain =
25 &::frc971::control_loops::drivetrain_queue)
Brian Silverman17f503e2015-08-02 18:17:18 -070026 : aos::controls::ControlLoop<control_loops::DrivetrainQueue>(
27 my_drivetrain) {
28 ::aos::controls::HPolytope<0>::Init();
29 }
30
31 protected:
32 // Executes one cycle of the control loop.
33 virtual void RunIteration(
Austin Schuh6197a182015-11-28 16:04:40 -080034 const ::frc971::control_loops::DrivetrainQueue::Goal *goal,
35 const ::frc971::control_loops::DrivetrainQueue::Position *position,
36 ::frc971::control_loops::DrivetrainQueue::Output *output,
37 ::frc971::control_loops::DrivetrainQueue::Status *status);
Brian Silverman17f503e2015-08-02 18:17:18 -070038
39 typedef ::aos::util::SimpleLogInterval SimpleLogInterval;
40 SimpleLogInterval no_position_ = SimpleLogInterval(
41 ::aos::time::Time::InSeconds(0.25), WARNING, "no position");
Austin Schuh64ebab22015-11-26 13:28:30 -080042
43 PolyDrivetrain dt_openloop_;
44 DrivetrainMotorsSS dt_closedloop_;
Brian Silverman17f503e2015-08-02 18:17:18 -070045};
46
Austin Schuh6197a182015-11-28 16:04:40 -080047} // namespace drivetrain
Brian Silverman17f503e2015-08-02 18:17:18 -070048} // namespace control_loops
Austin Schuh6197a182015-11-28 16:04:40 -080049} // namespace y2014
Brian Silverman17f503e2015-08-02 18:17:18 -070050
51#endif // Y2014_CONTROL_LOOPS_DRIVETRAIN_H_