YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
DCMotorSimSupplier.hpp
Go to the documentation of this file.
1// Copyright (c) 2026 Yet Another Software Suite
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
6#include <functional>
7#include <wpi/math/filter/LinearFilter.hpp>
8#include <wpi/simulation/DCMotorSim.hpp>
9#include <wpi/units/angle.hpp>
10#include <wpi/units/angular_acceleration.hpp>
11#include <wpi/units/angular_velocity.hpp>
12#include <wpi/units/current.hpp>
13#include <wpi/units/length.hpp>
14#include <wpi/units/time.hpp>
15#include <wpi/units/velocity.hpp>
16#include <wpi/units/voltage.hpp>
17
21
22namespace yams::motorcontrollers {
23class SmartMotorController;
24} // namespace yams::motorcontrollers
25
27
36 public:
46 DCMotorSimSupplier(wpi::sim::DCMotorSim& sim, SmartMotorController& smc);
47
48 void UpdateSim() override;
49 bool GetUpdatedSim() override;
50 void FeedUpdateSim() override;
51 void StarveUpdateSim() override;
52 bool IsInputFed() override;
53 void FeedInput() override;
54 void StarveInput() override;
55 void SetMechanismStatorDutyCycle(double dutyCycle) override;
56 wpi::units::volt_t GetMechanismSupplyVoltage() override;
57 wpi::units::volt_t GetMechanismStatorVoltage() override;
58 void SetMechanismStatorVoltage(wpi::units::volt_t volts) override;
59
60 wpi::units::turn_t GetMechanismPosition() override;
61 wpi::units::turns_per_second_t GetMechanismVelocity() override;
62 wpi::units::turns_per_second_squared_t GetMechanismAcceleration() override;
63 wpi::units::turn_t GetRotorPosition() override;
64 wpi::units::turns_per_second_t GetRotorVelocity() override;
65 wpi::units::turns_per_second_squared_t GetRotorAcceleration() override;
66
67 void SetMechanismPosition(wpi::units::turn_t angle) override;
68 void SetMechanismVelocity(wpi::units::turns_per_second_t velocity) override;
69 void SetRotorPosition(wpi::units::turn_t angle) override;
70 void SetRotorVelocity(wpi::units::turns_per_second_t velocity) override;
71
72 wpi::units::ampere_t GetStatorCurrent() override;
73 wpi::units::ampere_t GetSupplyCurrent() override;
74
75 private:
76 wpi::sim::DCMotorSim& m_sim;
77 std::function<double()> m_dutyCycleSupplier;
79 wpi::units::second_t m_period;
80 const void* m_batteryKey;
81 wpi::math::LinearFilter<double> m_supplyCurrentFilter;
82 bool m_inputFed{false};
83 bool m_simUpdated{false};
84 wpi::units::volt_t m_lastInputVoltage{0};
85};
86
87} // namespace yams::motorcontrollers::simulation
Definition MechanismGearing.hpp:19
Definition SimSupplier.hpp:22
Definition SmartMotorController.hpp:48
Definition DCMotorSimSupplier.hpp:35
void SetMechanismVelocity(wpi::units::turns_per_second_t velocity) override
void SetMechanismPosition(wpi::units::turn_t angle) override
wpi::units::turns_per_second_t GetMechanismVelocity() override
wpi::units::turns_per_second_squared_t GetRotorAcceleration() override
wpi::units::volt_t GetMechanismStatorVoltage() override
void SetMechanismStatorVoltage(wpi::units::volt_t volts) override
void SetMechanismStatorDutyCycle(double dutyCycle) override
wpi::units::ampere_t GetStatorCurrent() override
wpi::units::volt_t GetMechanismSupplyVoltage() override
wpi::units::turns_per_second_t GetRotorVelocity() override
void SetRotorVelocity(wpi::units::turns_per_second_t velocity) override
DCMotorSimSupplier(wpi::sim::DCMotorSim &sim, SmartMotorController &smc)
wpi::units::turns_per_second_squared_t GetMechanismAcceleration() override
void SetRotorPosition(wpi::units::turn_t angle) override
wpi::units::ampere_t GetSupplyCurrent() override
Definition SimSensorConfig.hpp:15
Definition SimSensorConfig.hpp:15