2024-Robot
Robot code for 2024 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/length.h>
10#include <units/time.h>
11#include <units/velocity.h>
12
13#include <numbers>
14
15#include "custom_units.h"
16
18 namespace swerve_drive {
19 namespace turn {
20 constexpr double sensorConversionFactor = 1;
21 constexpr units::angle::turn_t ToSensorUnit(const units::degree_t degrees) {
22 return degrees / sensorConversionFactor;
23 }
24 constexpr units::degree_t ToAngle(const units::angle::turn_t sensorunit) {
25 return sensorunit * sensorConversionFactor;
26 }
27 constexpr double turnGearRatio = 12.8;
28 constexpr units::turn_t MotorToWheelAngle(const units::angle::turn_t motorPosition) {
29 return motorPosition / turnGearRatio;
30 }
31 constexpr units::turn_t WheelToMotorAngle(const units::angle::turn_t wheelPosition) {
32 return wheelPosition * turnGearRatio;
33 }
34 } // namespace turn
35 namespace drive {
36 constexpr auto wheelDiameter = 4.0_in / units::angle::turn_t{1};
37 constexpr auto wheelCircumference = wheelDiameter * std::numbers::pi;
38 constexpr auto driveGearRatio = 5.49;
39
40 constexpr units::inch_t ToDistance(const units::angle::turn_t sensorunit) {
41 return wheelCircumference * (sensorunit / driveGearRatio);
42 }
43 constexpr units::angle::turn_t ToSensorPosition(const units::inch_t distance) {
44 return (distance / wheelCircumference) * driveGearRatio;
45 }
46
47 constexpr units::inches_per_second_t ToVelocity(
48 const units::angular_velocity::revolutions_per_minute_t sensorVelocity) {
49 return ToDistance(sensorVelocity * units::second_t{1}) / units::second_t{1};
50 }
51 constexpr units::angular_velocity::revolutions_per_minute_t ToSensorVelocity(
52 const units::inches_per_second_t velocity) {
53 return ToSensorPosition(velocity * units::second_t{1}) / units::second_t{1};
54 }
55 } // namespace drive
56 } // namespace swerve_drive
57
58 namespace climber {
59 constexpr auto sensorConversionFactor = 4_in / 20_tr;
60 // inches per sensor unit. 20:1 gear ratio, 4in/sprocket revolution -> 4in/20turns = 1inch/5turns
61
62 constexpr units::inch_t ToHeight(units::angle::turn_t sensorunit) { // 0 sensor units = minimum climber height
63 return sensorunit * sensorConversionFactor;
64 }
65 constexpr units::angle::turn_t ToSensorUnit(units::inch_t distance) {
66 return distance / sensorConversionFactor;
67 }
68
69 } // namespace climber
70
71 namespace elevator {
72 namespace lift {
73 constexpr auto sensorConversionFactor = 1_in / 3_tr;
74 constexpr units::inch_t ToHeight(const units::angle::turn_t sensorUnit) {
75 return sensorConversionFactor * sensorUnit;
76 }
77
78 constexpr units::angle::turn_t ToSensorUnit(const units::inch_t height) {
79 return height / sensorConversionFactor;
80 }
81 } // namespace lift
82 namespace carriage {
83 constexpr auto sensorConversionFactor = (1.0 / 9.0) * (15.0 / 72.0);
84 constexpr units::angle::turn_t ToSensorUnit(const units::degree_t degrees) {
85 return degrees / sensorConversionFactor;
86 }
87 constexpr units::degree_t ToAngle(const units::angle::turn_t sensorUnit) {
88 return sensorUnit * sensorConversionFactor;
89 }
90 } // namespace carriage
91 } // namespace elevator
92} // namespace sensor_conversions
constexpr auto sensorConversionFactor
Definition sensor_conversions.h:59
constexpr units::angle::turn_t ToSensorUnit(units::inch_t distance)
Definition sensor_conversions.h:65
constexpr units::inch_t ToHeight(units::angle::turn_t sensorunit)
Definition sensor_conversions.h:62
constexpr units::degree_t ToAngle(const units::angle::turn_t sensorUnit)
Definition sensor_conversions.h:87
constexpr auto sensorConversionFactor
Definition sensor_conversions.h:83
constexpr units::angle::turn_t ToSensorUnit(const units::degree_t degrees)
Definition sensor_conversions.h:84
constexpr units::angle::turn_t ToSensorUnit(const units::inch_t height)
Definition sensor_conversions.h:78
constexpr auto sensorConversionFactor
Definition sensor_conversions.h:73
constexpr units::inch_t ToHeight(const units::angle::turn_t sensorUnit)
Definition sensor_conversions.h:74
constexpr units::angular_velocity::revolutions_per_minute_t ToSensorVelocity(const units::inches_per_second_t velocity)
Definition sensor_conversions.h:51
constexpr auto wheelCircumference
Definition sensor_conversions.h:37
constexpr units::angle::turn_t ToSensorPosition(const units::inch_t distance)
Definition sensor_conversions.h:43
constexpr units::inches_per_second_t ToVelocity(const units::angular_velocity::revolutions_per_minute_t sensorVelocity)
Definition sensor_conversions.h:47
constexpr auto wheelDiameter
Definition sensor_conversions.h:36
constexpr units::inch_t ToDistance(const units::angle::turn_t sensorunit)
Definition sensor_conversions.h:40
constexpr auto driveGearRatio
Definition sensor_conversions.h:38
constexpr units::turn_t MotorToWheelAngle(const units::angle::turn_t motorPosition)
Definition sensor_conversions.h:28
constexpr units::degree_t ToAngle(const units::angle::turn_t sensorunit)
Definition sensor_conversions.h:24
constexpr double sensorConversionFactor
multiply to convert raw sensor units to module degrees
Definition sensor_conversions.h:20
constexpr double turnGearRatio
Definition sensor_conversions.h:27
constexpr units::turn_t WheelToMotorAngle(const units::angle::turn_t wheelPosition)
Definition sensor_conversions.h:31
constexpr units::angle::turn_t ToSensorUnit(const units::degree_t degrees)
Definition sensor_conversions.h:21
Definition sensor_conversions.h:17