LRT13  1.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
Drivetrain.h
1 #ifndef DRIVETRAIN_H_
2 #define DRIVETRAIN_H_
3 
4 #include "../ComponentData/RobotData.h"
5 #include "../Config/Configurable.h"
6 #include "../Log/Loggable.h"
7 #include "Component.h"
8 #include "../Utils/PID.h"
9 #include "../Utils/ProfiledPID.h"
10 #include "../Utils/TrapezoidProfile.h"
11 #include "../ComponentData/DrivetrainData.h"
12 
13 using namespace data;
14 
15 class ESC;
16 
17 class DriveEncoders;
18 
23 class Drivetrain : public Component, public Configurable, public Loggable
24 {
25 public:
26  Drivetrain();
27  ~Drivetrain();
28 
29  virtual void onEnable();
30  virtual void onDisable();
31 
32  virtual void enabledPeriodic();
33  virtual void disabledPeriodic();
34 
35  virtual void Configure();
36  virtual void Log();
37 private:
38  const static int POSITION = 0;
39  const static int VELOCITY = 1;
40  PID m_PIDs[2][2];
41  TrapezoidProfile *m_profiles[2];
42  ProfiledPID* m_profiled[2];
43  double m_timeToMax[2];
44 
45  DriveEncoders* m_driveEncoders;
46  ESC *m_escs[4];
47 
48  double m_errorThreshold;
49 
50  double m_scale;
51  double m_arcGain;
52 
53  NetworkTable *table;
54  ofstream m_log_file;
55 
56  double lastSpeed[4];
57 
58  void ConfigurePIDObject(PID *pid, std::string objName, bool feedForward);
59  void ConfigureForwardCurrentLimit();
60  void ConfigureReverseCurrentLimit();
61  double ComputeOutput(data::drivetrain::ForwardOrTurn axis);
62  double ComputeSide(data::drivetrain::Side side, double forward, double turn);
63 };
64 
65 #endif