Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
counter_yaw_modder.hpp
Go to the documentation of this file.
1#pragma once
4
5#include <memory>
6#include <cmath>
7
8namespace fang::turret
9{
21{
22public:
27 struct Config
28 {
29 double correctionScale = 1.0;
30 };
31
40 CounterYawModder(std::unique_ptr<telemetry::IAngularVelocity> baseYawVelocitySensor, const Config& config):
41 baseYawVelocitySensor_{std::move(baseYawVelocitySensor)},
42 config_{config}
43 {}
44
49 RPM getModdedOutput(const RPM& output) override
50 {
51 // These calculations are not unit sensitive
52 const RPM kBaseSpeed{baseYawVelocitySensor_->getAngularVelocity()};
53 const RPM kCounterRotation{-kBaseSpeed};
54
55 // Account for slight innacuracies
56 const RPM kCorrection{config_.correctionScale * kCounterRotation};
57
58 // The turret is targeting a specific position, but
59 // the rotation of the base should not affect the final position
60 // or else it would keep chasing said positoin
61 return output + kCorrection;
62 };
63private:
64 std::unique_ptr<telemetry::IAngularVelocity> baseYawVelocitySensor_;
65 Config config_;
66};
67}
Definition counter_yaw_modder.hpp:21
RPM getModdedOutput(const RPM &output) override
Definition counter_yaw_modder.hpp:49
CounterYawModder(std::unique_ptr< telemetry::IAngularVelocity > baseYawVelocitySensor, const Config &config)
Definition counter_yaw_modder.hpp:40
Definition ipid_modder.hpp:14
Config(double p, double i, double d, double maxIntegralAccumulation, double maxOutput, double errorDerivativeFloor, double errorDeadzone=0.0, double tQDerivativeKalman=1.0, double tRDerivativeKalman=0.0, tRProportionalKalman=1.0)
Definition dimensional_smooth_pid.hpp:16
Definition pwm_info.hpp:4
Definition activate_booster_command.cpp:5
Definition counter_yaw_modder.hpp:28
double correctionScale
Definition counter_yaw_modder.hpp:29
units::angular_velocity::revolutions_per_minute_t RPM
Definition units_alias.hpp:30