2022-Robot
Robot code for 2022 FRC Season by Argos, FRC team #1756
Loading...
Searching...
No Matches
sensor_conversions.h
Go to the documentation of this file.
1
4
5#pragma once
6#include "units/acceleration.h"
7#include "units/angle.h"
8#include "units/angular_velocity.h"
9#include "units/base.h"
10#include "units/length.h"
11#include "units/time.h"
12#include "units/velocity.h"
13
14namespace units {
15 UNIT_ADD(velocity,
16 inches_per_second,
17 inches_per_second,
18 ips,
19 units::compound_unit<units::length::inches, units::inverse<units::time::second>>)
20 UNIT_ADD(acceleration,
24 units::compound_unit<units::length::inches, units::inverse<units::squared<units::time::second>>>)
25} // namespace units
26
28 namespace swerve_drive {
29 namespace turn {
30 constexpr double sensorConversionFactor =
31 360.0 / 4096;
32 constexpr double ToSensorUnit(const units::degree_t degrees) {
33 return degrees.to<double>() / sensorConversionFactor;
34 }
35 constexpr units::degree_t ToAngle(const double sensorunit) {
36 return units::make_unit<units::degree_t>(sensorunit * sensorConversionFactor);
37 }
38 } // namespace turn
39 namespace drive {
40 constexpr auto wheelDiameter = 4_in;
41 constexpr auto wheelCircumference = wheelDiameter * M_PI;
42 constexpr double sensorUnitsPerMotorRevolution = 2048;
43 constexpr double driveGearRatio = 8.16;
44
45 constexpr units::inch_t ToDistance(const double sensorunit) {
47 }
48 constexpr double ToSensorPosition(const units::inch_t distance) {
50 }
51
52 constexpr units::inches_per_second_t ToVelocity(const double sensorVelocity) {
53 return ToDistance(sensorVelocity) / units::decisecond_t{1};
54 }
55 constexpr double ToSensorVelocity(const units::inches_per_second_t velocity) {
56 return ToSensorPosition(velocity * units::decisecond_t{1});
57 }
58 } // namespace drive
59 } // namespace swerve_drive
60 namespace turret {
61 constexpr double sensorConversionFactor =
62 4096.0 / 360;
63 constexpr double ToSensorUnit(const units::degree_t degrees) {
64 return sensorConversionFactor * degrees.to<double>();
65 }
66 constexpr units::degree_t ToAngle(const double sensorunit) {
67 return units::make_unit<units::degree_t>(sensorunit / sensorConversionFactor);
68 }
69 } // namespace turret
70 namespace hood {
71 constexpr double sensorConversionFactor =
72 360.0 / 4096;
73 constexpr double sensorConversionDegTeeth =
74 16.0 / 360;
75 constexpr double sensorConversionTeethIn =
76 4.0 / 16;
77 constexpr double sensorConversionInAngle =
78 360.0 / (2 * M_PI * 11.5);
79 constexpr double ToSensorUnit(const units::degree_t degrees) {
81 sensorConversionFactor;
82 }
83 constexpr units::degree_t ToAngle(const double sensorunit) {
84 return units::make_unit<units::degree_t>(sensorunit * sensorConversionFactor * sensorConversionDegTeeth *
86 }
87 } // namespace hood
88 namespace shooter {
89 constexpr double sensorConversionFactor =
90 10.0 * 60 / 2048;
91 constexpr double ToSensorUnit(const units::revolutions_per_minute_t rpm) {
92 return rpm.to<double>() / sensorConversionFactor;
93 }
94 constexpr units::revolutions_per_minute_t ToVelocity(const double sensorunit) {
95 return units::make_unit<units::revolutions_per_minute_t>(sensorunit * sensorConversionFactor);
96 }
97 } // namespace shooter
98 namespace climb_arms {
99 constexpr double sensorToMotorRev = 1.0 / 2048;
100 constexpr double gearboxReduction = 10.0 / 30;
101 constexpr double extensionMillimetersPerRevolution = 4.0;
102 constexpr double fudgeFactor = 1.1;
103 constexpr units::inch_t ToExtension(const double sensorUnit) {
104 return units::make_unit<units::millimeter_t>(sensorUnit * sensorToMotorRev * gearboxReduction *
106 }
107 constexpr double ToSensorUnit(const units::millimeter_t extension) {
108 return extension.to<double>() / fudgeFactor / extensionMillimetersPerRevolution / gearboxReduction /
110 }
111
112 constexpr double ToSensorVelocity(const units::meters_per_second_t velocity) {
113 return ToSensorUnit(velocity * units::decisecond_t{1});
114 }
115
116 constexpr units::meters_per_second_t ToVelocity(double sensorVelocity) {
117 return units::meters_per_second_t{ToExtension(sensorVelocity) / units::decisecond_t{1}};
118 }
119
120 constexpr double ToSensorAccel(const units::meters_per_second_squared_t accel) {
121 return ToSensorVelocity(accel * 1_s);
122 }
123
124 constexpr units::meters_per_second_squared_t ToAccel(double sensorAccel) {
125 return ToVelocity(sensorAccel) / 1_s;
126 }
127
128 } // namespace climb_arms
129 namespace climb_hooks {
130 constexpr double sensorToMotorRev = 1.0 / 2048;
131 constexpr double gearboxReduction = 1.0 / 12;
132 constexpr double driveSprocketTeethPerRevolution = 18.0;
133 constexpr double extensionInchesPerDriveSprocketTooth = 0.25 / 1;
134 constexpr double fudgeFactor = 1.0;
135 constexpr units::inch_t ToExtension(const double sensorUnit) {
136 return units::make_unit<units::inch_t>(sensorUnit * sensorToMotorRev * gearboxReduction *
138 fudgeFactor);
139 }
140 constexpr double ToSensorUnit(const units::inch_t extension) {
141 return extension.to<double>() / fudgeFactor / extensionInchesPerDriveSprocketTooth /
142 driveSprocketTeethPerRevolution / gearboxReduction / sensorToMotorRev;
143 }
144
145 constexpr double ToSensorVelocity(const units::meters_per_second_t velocity) {
146 return ToSensorUnit(velocity * units::decisecond_t{1});
147 }
148
149 constexpr units::meters_per_second_t ToVelocity(double sensorVelocity) {
150 return units::meters_per_second_t{ToExtension(sensorVelocity) / units::decisecond_t{1}};
151 }
152
153 constexpr double ToSensorAccel(const units::meters_per_second_squared_t accel) {
154 return ToSensorVelocity(accel * 1_s);
155 }
156
157 constexpr units::meters_per_second_squared_t ToAccel(double sensorAccel) {
158 return ToVelocity(sensorAccel) / 1_s;
159 }
160 } // namespace climb_hooks
161} // namespace sensor_conversions
constexpr units::inch_t ToExtension(const double sensorUnit)
Definition: sensor_conversions.h:103
constexpr double fudgeFactor
Definition: sensor_conversions.h:102
constexpr double sensorToMotorRev
Definition: sensor_conversions.h:99
constexpr double extensionMillimetersPerRevolution
Definition: sensor_conversions.h:101
constexpr double ToSensorAccel(const units::meters_per_second_squared_t accel)
Definition: sensor_conversions.h:120
constexpr units::meters_per_second_squared_t ToAccel(double sensorAccel)
Definition: sensor_conversions.h:124
constexpr double gearboxReduction
Definition: sensor_conversions.h:100
constexpr double driveSprocketTeethPerRevolution
Definition: sensor_conversions.h:132
constexpr double extensionInchesPerDriveSprocketTooth
Definition: sensor_conversions.h:133
constexpr double sensorConversionInAngle
multiply to convert hood extension distance to hood angle
Definition: sensor_conversions.h:77
constexpr double sensorConversionTeethIn
multiply to convert hood sproket teeth to hood extension distance
Definition: sensor_conversions.h:75
constexpr double sensorConversionDegTeeth
multiply to convert motor output shaft degrees to hood sproket teeth
Definition: sensor_conversions.h:73
constexpr auto wheelCircumference
Definition: sensor_conversions.h:41
constexpr double ToSensorVelocity(const units::inches_per_second_t velocity)
Definition: sensor_conversions.h:55
constexpr double sensorUnitsPerMotorRevolution
Definition: sensor_conversions.h:42
constexpr auto wheelDiameter
Definition: sensor_conversions.h:40
constexpr double ToSensorPosition(const units::inch_t distance)
Definition: sensor_conversions.h:48
constexpr units::inch_t ToDistance(const double sensorunit)
Definition: sensor_conversions.h:45
constexpr double driveGearRatio
Definition: sensor_conversions.h:43
constexpr units::inches_per_second_t ToVelocity(const double sensorVelocity)
Definition: sensor_conversions.h:52
constexpr double ToSensorUnit(const units::degree_t degrees)
Definition: sensor_conversions.h:32
constexpr double sensorConversionFactor
multiply to convert raw sensor units to module degrees
Definition: sensor_conversions.h:30
constexpr units::degree_t ToAngle(const double sensorunit)
Definition: sensor_conversions.h:35
Definition: sensor_conversions.h:27
Definition: sensor_conversions.h:14
ips2
Definition: sensor_conversions.h:23
inches_per_second_squared
Definition: sensor_conversions.h:21
UNIT_ADD(velocity, inches_per_second, inches_per_second, ips, units::compound_unit< units::length::inches, units::inverse< units::time::second > >) UNIT_ADD(acceleration