Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
modded_cascade_motor.hpp
Go to the documentation of this file.
1#pragma once
2
6
8
10
11#include <memory>
12
13namespace fang::motor
14{
31 template
32 <
33 typename Output,
34 typename Control,
35 typename Intermediate,
36 typename Time = Seconds,
37 typename MainError = Control,
38 typename IntermediateError = Intermediate
39 >
40 class ModdedCascadeMotor : virtual public system::ISystem
41 {
42 public:
47 <
48 Control,
49 Intermediate,
50 Output,
51 Time,
52 MainError,
53 IntermediateError
54 >;
58
60 const Config& config,
61 std::unique_ptr<ControlledMotor> motor,
62 std::unique_ptr<ControlTelemetry> controlTelemetry,
63 std::unique_ptr<IntermediateTelemetry> intermediateTelemetry,
64 std::unique_ptr<MainModder> mainModder = std::make_unique<trap::algorithms::NullPidModder<Intermediate>>(),
65 std::unique_ptr<IntermediateModder> intermediateModder = std::make_unique<trap::algorithms::NullPidModder<Output>>()
66 ):
67 pid_{config, std::move(mainModder), std::move(intermediateModder)},
68 motor_{std::move(motor)},
69 controlTelemetry_{std::move(controlTelemetry)},
70 intermediateTelemetry_{std::move(intermediateTelemetry)}
71 {
72 }
73
74 void initialize() override
75 {
76 motor_->initialize();
77 }
78
79 void update() override
80 {
81 syncMotorToPid();
82 motor_->update();
83 }
84
89 void update(const Time& delta)
90 {
91 const Output kOutput
92 {
93 pid_.runController(
94 controlTelemetry_->getData(),
95 intermediateTelemetry_->getData(),
96 delta
97 )
98 };
99 motor_->setTargetOutput(kOutput);
100 motor_->update();
101 }
102
103 void setTarget(const Control& control)
104 {
105 pid_.setTarget(control);
106 }
107
108 private:
109 Pid pid_;
110 std::unique_ptr<ControlledMotor> motor_;
111 std::unique_ptr<ControlTelemetry> controlTelemetry_;
112 std::unique_ptr<IntermediateTelemetry> intermediateTelemetry_;
113
114 void syncMotorToPid()
115 {
116 const Output kOutput
117 {
118 pid_.runController(
119 controlTelemetry_->getData(),
120 intermediateTelemetry_->getData()
121 )
122 };
123 motor_->setTargetOutput(kOutput);
124 }
125 };
126}
Definition modded_cascade_motor.hpp:41
telemetry::ITelemetry< Control > ControlTelemetry
Definition modded_cascade_motor.hpp:44
void update() override
Definition modded_cascade_motor.hpp:79
void setTarget(const Control &control)
Definition modded_cascade_motor.hpp:103
void update(const Time &delta)
Definition modded_cascade_motor.hpp:89
void initialize() override
Definition modded_cascade_motor.hpp:74
ModdedCascadeMotor(const Config &config, std::unique_ptr< ControlledMotor > motor, std::unique_ptr< ControlTelemetry > controlTelemetry, std::unique_ptr< IntermediateTelemetry > intermediateTelemetry, std::unique_ptr< MainModder > mainModder=std::make_unique< trap::algorithms::NullPidModder< Intermediate > >(), std::unique_ptr< IntermediateModder > intermediateModder=std::make_unique< trap::algorithms::NullPidModder< Output > >())
Definition modded_cascade_motor.hpp:59
IOutputMotor< Output > ControlledMotor
Definition modded_cascade_motor.hpp:43
trap::algorithms::DualModdedPid< Control, Intermediate, Output, Time, MainError, IntermediateError > Pid
Definition modded_cascade_motor.hpp:54
telemetry::ITelemetry< Intermediate > IntermediateTelemetry
Definition modded_cascade_motor.hpp:45
Definition dual_modded_pid.hpp:37
void setTarget(const MainType &mainTarget)
Definition dual_modded_pid.hpp:118
OutputType runController(const MainType &mainCurrent, const IntermediateType &intermediateCurrent)
Definition dual_modded_pid.hpp:71
IPidModder< IntermediateType > MainModder
Definition dual_modded_pid.hpp:41
IPidModder< OutputType > IntermediateModder
Definition dual_modded_pid.hpp:42
Definition ipid_modder.hpp:14
Definition ipid_modder.hpp:28
Definition pwm_info.hpp:4
Definition directionality.hpp:6
rail::motor::IOutputMotor< Output > IOutputMotor
Definition ioutput_motor.hpp:7
rail::system::ISystem ISystem
Definition isystem.hpp:5
rail::telemetry::ITelemetry< DataType > ITelemetry
Definition itelemetry.hpp:8
Definition brushlessutils.cpp:4
Definition dual_modded_pid.hpp:45
units::time::second_t Seconds
Definition units_alias.hpp:11