blob: 63ca76c3abd62815eac5c6ee9168b545e3dbfdc1 [file] [log] [blame]
brians343bc112013-02-10 01:53:46 +00001#ifndef FRC971_CONTROL_LOOPS_DRIVETRAIN_H_
2#define FRC971_CONTROL_LOOPS_DRIVETRAIN_H_
3
Austin Schuh2054f5f2013-10-27 14:54:10 -07004#include "Eigen/Dense"
5
6#include "aos/controls/polytope.h"
brians343bc112013-02-10 01:53:46 +00007#include "aos/common/control_loop/ControlLoop.h"
James Kuszmaulf254c1a2013-03-10 16:31:26 -07008#include "frc971/control_loops/drivetrain/drivetrain.q.h"
brians343bc112013-02-10 01:53:46 +00009
10namespace frc971 {
11namespace control_loops {
12
Austin Schuh2054f5f2013-10-27 14:54:10 -070013Eigen::Matrix<double, 2, 1> CoerceGoal(aos::controls::HPolytope<2> &region,
14 const Eigen::Matrix<double, 1, 2> &K,
15 double w,
16 const Eigen::Matrix<double, 2, 1> &R);
17
brians343bc112013-02-10 01:53:46 +000018class DrivetrainLoop
19 : public aos::control_loops::ControlLoop<control_loops::Drivetrain> {
20 public:
21 // Constructs a control loop which can take a Drivetrain or defaults to the
22 // drivetrain at frc971::control_loops::drivetrain
23 explicit DrivetrainLoop(
24 control_loops::Drivetrain *my_drivetrain = &control_loops::drivetrain)
25 : aos::control_loops::ControlLoop<control_loops::Drivetrain>(
26 my_drivetrain) {}
27
28 protected:
29 // Executes one cycle of the control loop.
30 virtual void RunIteration(
31 const control_loops::Drivetrain::Goal *goal,
32 const control_loops::Drivetrain::Position *position,
33 control_loops::Drivetrain::Output *output,
34 control_loops::Drivetrain::Status *status);
35};
36
37} // namespace control_loops
38} // namespace frc971
39
40#endif // FRC971_CONTROL_LOOPS_DRIVETRAIN_H_