YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
ArmSimSupplier.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/SingleJointedArmSim.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
35 public:
45 ArmSimSupplier(wpi::sim::SingleJointedArmSim& sim, SmartMotorController& smc);
46
47 void UpdateSim() override;
48 bool GetUpdatedSim() override;
49 void FeedUpdateSim() override;
50 void StarveUpdateSim() override;
51 bool IsInputFed() override;
52 void FeedInput() override;
53 void StarveInput() override;
54 void SetMechanismStatorDutyCycle(double dutyCycle) override;
55 wpi::units::volt_t GetMechanismSupplyVoltage() override;
56 wpi::units::volt_t GetMechanismStatorVoltage() override;
57 void SetMechanismStatorVoltage(wpi::units::volt_t volts) override;
58
59 wpi::units::turn_t GetMechanismPosition() override;
60 wpi::units::turns_per_second_t GetMechanismVelocity() override;
61 wpi::units::turns_per_second_squared_t GetMechanismAcceleration() override;
62 wpi::units::turn_t GetRotorPosition() override;
63 wpi::units::turns_per_second_t GetRotorVelocity() override;
64 wpi::units::turns_per_second_squared_t GetRotorAcceleration() override;
65
66 void SetMechanismPosition(wpi::units::turn_t angle) override;
67 void SetMechanismVelocity(wpi::units::turns_per_second_t velocity) override;
68 void SetRotorPosition(wpi::units::turn_t angle) override;
69 void SetRotorVelocity(wpi::units::turns_per_second_t velocity) override;
70
71 wpi::units::ampere_t GetStatorCurrent() override;
72 wpi::units::ampere_t GetSupplyCurrent() override;
73
74 private:
75 wpi::sim::SingleJointedArmSim& m_sim;
76 std::function<double()> m_dutyCycleSupplier;
78 wpi::units::second_t m_period;
79 const void* m_batteryKey;
80 wpi::math::LinearFilter<double> m_supplyCurrentFilter;
81 bool m_inputFed{false};
82 bool m_simUpdated{false};
83 wpi::units::volt_t m_lastInputVoltage{0};
84 math::DerivativeTimeFilter m_rotorAccelFilter;
85};
86
87} // namespace yams::motorcontrollers::simulation
Definition MechanismGearing.hpp:19
Definition DerivativeTimeFilter.hpp:18
Definition SimSupplier.hpp:22
Definition SmartMotorController.hpp:48
void SetMechanismStatorVoltage(wpi::units::volt_t volts) override
wpi::units::turn_t GetMechanismPosition() override
wpi::units::ampere_t GetSupplyCurrent() override
void SetRotorVelocity(wpi::units::turns_per_second_t velocity) override
wpi::units::ampere_t GetStatorCurrent() override
wpi::units::turns_per_second_t GetRotorVelocity() override
void SetMechanismVelocity(wpi::units::turns_per_second_t velocity) override
wpi::units::turn_t GetRotorPosition() override
wpi::units::turns_per_second_squared_t GetRotorAcceleration() override
void SetMechanismPosition(wpi::units::turn_t angle) override
wpi::units::volt_t GetMechanismSupplyVoltage() override
void SetRotorPosition(wpi::units::turn_t angle) override
wpi::units::volt_t GetMechanismStatorVoltage() override
wpi::units::turns_per_second_squared_t GetMechanismAcceleration() override
void SetMechanismStatorDutyCycle(double dutyCycle) override
ArmSimSupplier(wpi::sim::SingleJointedArmSim &sim, SmartMotorController &smc)
wpi::units::turns_per_second_t GetMechanismVelocity() override
Definition SimSensorConfig.hpp:15
Definition SimSensorConfig.hpp:15