10 #include <units/units.h>
11 #include <wpi/MathExtras.h>
18 template <
class Distance>
22 units::compound_unit<Distance, units::inverse<units::seconds>>;
24 units::compound_unit<Velocity, units::inverse<units::seconds>>;
25 using kv_unit = units::compound_unit<units::volts, units::inverse<Velocity>>;
27 units::compound_unit<units::volts, units::inverse<Acceleration>>;
39 units::volt_t kS, units::unit_t<kv_unit> kV,
40 units::unit_t<ka_unit> kA = units::unit_t<ka_unit>(0))
41 : kS(kS), kV(kV), kA(kA) {}
50 constexpr units::volt_t
Calculate(units::unit_t<Velocity> velocity,
51 units::unit_t<Acceleration> acceleration =
52 units::unit_t<Acceleration>(0))
const {
53 return kS * wpi::sgn(velocity) + kV * velocity + kA * acceleration;
71 units::volt_t maxVoltage, units::unit_t<Acceleration> acceleration) {
73 return (maxVoltage - kS - kA * acceleration) / kV;
88 units::volt_t maxVoltage, units::unit_t<Acceleration> acceleration) {
90 return (-maxVoltage + kS - kA * acceleration) / kV;
105 units::volt_t maxVoltage, units::unit_t<Velocity> velocity) {
106 return (maxVoltage - kS * wpi::sgn(velocity) - kV * velocity) / kA;
121 units::volt_t maxVoltage, units::unit_t<Velocity> velocity) {
126 units::unit_t<kv_unit> kV{0};
127 units::unit_t<ka_unit> kA{0};