blob: cb95df8f19b9d140e12b4f58c0552dd546b6865d [file] [log] [blame]
Brian Silvermane0a95462014-02-17 00:41:09 -08001package frc971;
2
Philipp Schraderfd6335e2017-02-04 01:26:40 +00003// Represents all of the data for a single indexed encoder. In other words,
4// just a relative encoder with an index pulse.
5// The units on all of the positions are the same.
6// All encoder values are relative to where the encoder was at some arbitrary
7// point in time. All potentiometer values are relative to some arbitrary 0
8// position which varies with each robot.
9struct IndexPosition {
10 // Current position read from the encoder.
11 double encoder;
12 // Position from the encoder latched at the last index pulse.
13 double latched_encoder;
14 // How many index pulses we've seen since startup. Starts at 0.
15 uint32_t index_pulses;
16};
17
Brian Silverman0a7f6062015-01-24 17:41:33 -050018// Represents all of the data for a single potentiometer and indexed encoder
19// pair.
20// The units on all of the positions are the same.
21// All encoder values are relative to where the encoder was at some arbitrary
22// point in time. All potentiometer values are relative to some arbitrary 0
23// position which varies with each robot.
24struct PotAndIndexPosition {
25 // Current position read from the encoder.
26 double encoder;
27 // Current position read from the potentiometer.
28 double pot;
29
30 // Position from the encoder latched at the last index pulse.
31 double latched_encoder;
32 // Position from the potentiometer latched at the last index pulse.
33 double latched_pot;
34
35 // How many index pulses we've seen since startup. Starts at 0.
36 uint32_t index_pulses;
Brian Silvermane0a95462014-02-17 00:41:09 -080037};
Brian Silverman5b433df2014-02-17 11:57:37 -080038
Diana Vandenbergabb3d192017-01-28 16:19:43 -080039// Represents all of the data for a single potentiometer with an absolute and
40// relative encoder pair.
41// The units on all of the positions are the same.
42// The relative encoder values are relative to where the encoder was at some
43// arbitrary point in time. All potentiometer values are relative to some
44// arbitrary 0 position which varies with each robot.
45struct PotAndAbsolutePosition {
46 // Current position read from each encoder.
Austin Schuh5f01f152017-02-11 21:34:08 -080047 double encoder;
Diana Vandenbergabb3d192017-01-28 16:19:43 -080048 double absolute_encoder;
49
50 // Current position read from the potentiometer.
51 double pot;
52};
53
Daniel Pettiab274232015-02-16 19:15:34 -080054// The internal state of a zeroing estimator.
55struct EstimatorState {
56 // If true, there has been a fatal error for the estimator.
57 bool error;
58 // If the joint has seen an index pulse and is zeroed.
59 bool zeroed;
60 // The estimated position of the joint.
61 double position;
Austin Schuhbe133ed2016-03-11 21:23:34 -080062
63 // The estimated position not using the index pulse.
64 double pot_position;
Daniel Pettiab274232015-02-16 19:15:34 -080065};
66
Austin Schuh5f01f152017-02-11 21:34:08 -080067// The internal state of a zeroing estimator.
68struct AbsoluteEstimatorState {
69 // If true, there has been a fatal error for the estimator.
70 bool error;
71 // If the joint has seen an index pulse and is zeroed.
72 bool zeroed;
73 // The estimated position of the joint.
74 double position;
75
76 // The estimated position not using the index pulse.
77 double pot_position;
78};
79
Brian Silvermanf37839c2017-02-19 18:07:15 -080080// The internal state of a zeroing estimator.
81struct IndexEstimatorState {
82 // If true, there has been a fatal error for the estimator.
83 bool error;
84 // If the joint has seen an index pulse and is zeroed.
85 bool zeroed;
86 // The estimated position of the joint. This is just the position relative to
87 // where we started if we're not zeroed yet.
88 double position;
89
90 // The positions of the extreme index pulses we've seen.
91 double min_index_position;
92 double max_index_position;
93 // The number of index pulses we've seen.
94 int32_t index_pulses_seen;
95};
96
Brian Silverman0a7f6062015-01-24 17:41:33 -050097// A left/right pair of PotAndIndexPositions.
98struct PotAndIndexPair {
99 PotAndIndexPosition left;
100 PotAndIndexPosition right;
Austin Schuh60c56662014-02-17 14:37:19 -0800101};
Brian Silverman17f503e2015-08-02 18:17:18 -0700102
103// Records edges captured on a single hall effect sensor.
104struct HallEffectStruct {
105 bool current;
106 int32_t posedge_count;
107 int32_t negedge_count;
Brian Silvermand3efb182015-05-13 23:04:29 -0400108 double posedge_value;
109 double negedge_value;
Brian Silverman17f503e2015-08-02 18:17:18 -0700110};
111
112// Records the positions for a mechanism with edge-capturing sensors on it.
113struct HallEffectPositions {
114 double current;
115 double posedge;
116 double negedge;
117};
118
119// Records edges captured on a single hall effect sensor.
120struct PosedgeOnlyCountedHallEffectStruct {
121 bool current;
122 int32_t posedge_count;
123 int32_t negedge_count;
124 double posedge_value;
125};
Austin Schuhedbb64f2016-03-19 01:18:09 -0700126
127// Parameters for the motion profiles.
128struct ProfileParameters {
129 // Maximum velocity for the profile.
130 float max_velocity;
131 // Maximum acceleration for the profile.
132 float max_acceleration;
133};