blob: 0171e47aa75b237d5a8e2b36a7cb3703f35650b4 [file] [log] [blame]
Brian Silverman431500a2013-10-28 19:50:15 -07001#ifndef FRC971_CONSTANTS_H_
2#define FRC971_CONSTANTS_H_
Brian Silverman2c590c32013-11-04 18:08:54 -08003
Austin Schuh5f01f152017-02-11 21:34:08 -08004#include <cstddef>
5
brians343bc112013-02-10 01:53:46 +00006namespace frc971 {
7namespace constants {
8
Austin Schuh55934032017-03-11 12:45:27 -08009struct HallEffectZeroingConstants {
10 // The absolute position of the lower edge of the hall effect sensor.
11 double lower_hall_position;
12 // The absolute position of the upper edge of the hall effect sensor.
13 double upper_hall_position;
14 // The difference in scaled units between two hall effect edges. This is the
15 // number of units/cycle.
16 double index_difference;
17 // Number of cycles we need to see the hall effect high.
18 size_t hall_trigger_zeroing_length;
19 // Direction the system must be moving in order to zero. True is positive,
20 // False is negative direction.
21 bool zeroing_move_direction;
22};
23
Tyler Chatowf8f03112017-02-05 14:31:34 -080024struct PotAndIndexPulseZeroingConstants {
Brian Silvermanb691f5e2015-08-02 11:37:55 -070025 // The number of samples in the moving average filter.
Austin Schuh5f01f152017-02-11 21:34:08 -080026 size_t average_filter_size;
Brian Silvermanb691f5e2015-08-02 11:37:55 -070027 // The difference in scaled units between two index pulses.
28 double index_difference;
29 // The absolute position in scaled units of one of the index pulses.
30 double measured_index_position;
31 // Value between 0 and 1 which determines a fraction of the index_diff
32 // you want to use.
33 double allowable_encoder_error;
Brian Silverman431500a2013-10-28 19:50:15 -070034};
35
Tyler Chatow61f77972017-02-04 17:41:14 -080036struct EncoderPlusIndexZeroingConstants {
Isaac Wilcove0851ffd2017-02-16 04:13:14 +000037 // The amount of index pulses in the joint's range of motion.
38 int index_pulse_count;
39 // The difference in scaled units between two index pulses.
40 double index_difference;
41 // The absolute position in scaled units of one of the index pulses.
42 double measured_index_position;
43 // The index pulse that is known, going from lowest in the range of motion to
44 // highest (Starting at 0).
45 int known_index_pulse;
Tyler Chatow61f77972017-02-04 17:41:14 -080046};
47
48struct PotAndAbsoluteEncoderZeroingConstants {
Austin Schuh5f01f152017-02-11 21:34:08 -080049 // The number of samples in the moving average filter.
50 size_t average_filter_size;
Tyler Chatow61f77972017-02-04 17:41:14 -080051 // The distance that the absolute encoder needs to complete a full rotation.
Austin Schuh5f01f152017-02-11 21:34:08 -080052 double one_revolution_distance;
53 // Measured absolute position of the encoder when at zero.
54 double measured_absolute_position;
55
Brian Silvermana10d20a2017-02-19 14:28:53 -080056 // Treshold for deciding if we are moving. moving_buffer_size samples need to
57 // be within this distance of each other before we use the middle one to zero.
Austin Schuh5f01f152017-02-11 21:34:08 -080058 double zeroing_threshold;
Diana Vandenberg8fea6ea2017-02-18 17:24:45 -080059 // Buffer size for deciding if we are moving.
60 size_t moving_buffer_size;
Brian Silvermana10d20a2017-02-19 14:28:53 -080061
62 // Value between 0 and 1 indicating what fraction of one_revolution_distance
63 // it is acceptable for the offset to move.
64 double allowable_encoder_error;
Tyler Chatow61f77972017-02-04 17:41:14 -080065};
66
Brian Silvermanebca77a2016-02-14 22:14:00 -050067// Defines a range of motion for a subsystem.
68// These are all absolute positions in scaled units.
69struct Range {
70 double lower_hard;
71 double upper_hard;
72 double lower;
73 double upper;
74};
75
brians343bc112013-02-10 01:53:46 +000076} // namespace constants
77} // namespace frc971
Brian Silverman431500a2013-10-28 19:50:15 -070078
79#endif // FRC971_CONSTANTS_H_