YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
FlyWheel.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 <optional>
8#include <string>
9#include <wpi/commands2/CommandPtr.hpp>
10#include <wpi/commands2/button/Trigger.hpp>
11#include <wpi/math/geometry/Pose3d.hpp>
12#include <wpi/simulation/DCMotorSim.hpp>
13#include <wpi/units/angle.hpp>
14#include <wpi/units/angular_velocity.hpp>
15#include <wpi/units/length.hpp>
16#include <wpi/units/velocity.hpp>
17
20
22
73 public:
81
82 // ---- SmartMechanism overrides ---------------------------------------------
83
85 void SimIterate() override;
86
88 void UpdateTelemetry() override;
89
91 void VisualizationUpdate() override;
92
94 std::string GetName() const override;
95
96 // ---- SmartVelocityMechanism overrides -------------------------------------
97
104 wpi::cmd::Trigger Max() override;
105
112 wpi::cmd::Trigger Min() override;
113
114 // ---- FlyWheel-specific interface ------------------------------------------
115
121 wpi::units::degrees_per_second_t GetVelocity() const;
122
123 // ---- Run / RunTo interface ------------------------------------------------
124
131 wpi::cmd::CommandPtr Run(wpi::units::degrees_per_second_t velocity);
132
139 wpi::cmd::CommandPtr Run(std::function<wpi::units::degrees_per_second_t()> velocity);
140
149 wpi::cmd::CommandPtr Run(wpi::units::meters_per_second_t surfaceSpeed);
150
159 wpi::cmd::CommandPtr Run(std::function<wpi::units::meters_per_second_t()> surfaceSpeed);
160
170 wpi::cmd::CommandPtr RunTo(
171 wpi::units::degrees_per_second_t velocity,
172 wpi::units::degrees_per_second_t tolerance = wpi::units::degrees_per_second_t{5.0});
173
186 wpi::cmd::CommandPtr RunTo(
187 std::function<wpi::units::degrees_per_second_t()> velocity,
188 wpi::units::degrees_per_second_t tolerance = wpi::units::degrees_per_second_t{5.0});
189
201 wpi::cmd::CommandPtr RunTo(wpi::units::meters_per_second_t velocity,
202 wpi::units::meters_per_second_t tolerance);
203
215 wpi::cmd::CommandPtr RunTo(std::function<wpi::units::meters_per_second_t()> velocity,
216 wpi::units::meters_per_second_t tolerance);
217
218 // ---- Comparison triggers ---------------------------------------------------
219
226 wpi::cmd::Trigger Gte(wpi::units::degrees_per_second_t velocity);
227
234 wpi::cmd::Trigger Lte(wpi::units::degrees_per_second_t velocity);
235
243 wpi::cmd::Trigger Between(wpi::units::degrees_per_second_t start,
244 wpi::units::degrees_per_second_t end);
245
253 wpi::cmd::Trigger IsNear(
254 wpi::units::degrees_per_second_t velocity,
255 wpi::units::degrees_per_second_t within = wpi::units::degrees_per_second_t{5.0}) const;
256
257 // ---- Direct setpoint setters -----------------------------------------------
258
264 void SetVelocity(wpi::units::degrees_per_second_t velocity);
265
273 void SetSurfaceSpeed(wpi::units::meters_per_second_t speed);
274
283 void SetMeasurementVelocitySetpoint(wpi::units::meters_per_second_t velocity);
284
285 // ---- Misc ------------------------------------------------------------------
286
294 wpi::math::Pose3d GetPose3d() const override;
295
302
303 private:
304 config::FlyWheelConfig* m_flyWheelConfig{nullptr};
305 std::string m_name{"FlyWheel"};
306 std::optional<wpi::sim::DCMotorSim> m_dcMotorSim;
307};
308
309} // namespace yams::mechanisms::velocity
Definition FlyWheelConfig.hpp:21
Definition FlyWheel.hpp:72
wpi::cmd::CommandPtr Run(wpi::units::meters_per_second_t surfaceSpeed)
wpi::units::degrees_per_second_t GetVelocity() const
wpi::cmd::CommandPtr Run(wpi::units::degrees_per_second_t velocity)
std::string GetName() const override
wpi::cmd::Trigger Gte(wpi::units::degrees_per_second_t velocity)
void SetVelocity(wpi::units::degrees_per_second_t velocity)
void SetSurfaceSpeed(wpi::units::meters_per_second_t speed)
wpi::cmd::CommandPtr RunTo(wpi::units::meters_per_second_t velocity, wpi::units::meters_per_second_t tolerance)
void SetMeasurementVelocitySetpoint(wpi::units::meters_per_second_t velocity)
wpi::cmd::CommandPtr Run(std::function< wpi::units::degrees_per_second_t()> velocity)
wpi::cmd::CommandPtr RunTo(std::function< wpi::units::degrees_per_second_t()> velocity, wpi::units::degrees_per_second_t tolerance=wpi::units::degrees_per_second_t{5.0})
const config::FlyWheelConfig & GetConfig() const
wpi::cmd::CommandPtr RunTo(std::function< wpi::units::meters_per_second_t()> velocity, wpi::units::meters_per_second_t tolerance)
FlyWheel(config::FlyWheelConfig *config, motorcontrollers::SmartMotorController *smc)
wpi::cmd::CommandPtr RunTo(wpi::units::degrees_per_second_t velocity, wpi::units::degrees_per_second_t tolerance=wpi::units::degrees_per_second_t{5.0})
wpi::math::Pose3d GetPose3d() const override
wpi::cmd::Trigger IsNear(wpi::units::degrees_per_second_t velocity, wpi::units::degrees_per_second_t within=wpi::units::degrees_per_second_t{5.0}) const
wpi::cmd::Trigger Max() override
wpi::cmd::CommandPtr Run(std::function< wpi::units::meters_per_second_t()> surfaceSpeed)
wpi::cmd::Trigger Between(wpi::units::degrees_per_second_t start, wpi::units::degrees_per_second_t end)
wpi::cmd::Trigger Min() override
wpi::cmd::Trigger Lte(wpi::units::degrees_per_second_t velocity)
Definition SmartVelocityMechanism.hpp:21
Definition SmartMotorController.hpp:48
Definition FlyWheel.hpp:21