YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
SmartMechanism.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/Commands.hpp>
11#include <wpi/commands2/SubsystemBase.hpp>
12#include <wpi/math/geometry/Pose3d.hpp>
13#include <wpi/smartdashboard/Mechanism2d.hpp>
14#include <wpi/units/angle.hpp>
15#include <wpi/units/angular_velocity.hpp>
16#include <wpi/units/length.hpp>
17#include <wpi/units/velocity.hpp>
18#include <wpi/units/voltage.hpp>
19
21
22namespace yams::mechanisms {
23
31 public:
33 virtual ~SmartMechanism() = default;
34
35 // ---- Pure virtual interface -----------------------------------------------
36
38 virtual void SimIterate() = 0;
39
41 virtual void UpdateTelemetry() = 0;
42
44 virtual void VisualizationUpdate() = 0;
45
47 virtual std::string GetName() const = 0;
48
55 virtual wpi::math::Pose3d GetPose3d() const = 0;
56
57 // ---- Open-loop command factories ------------------------------------------
58
66 wpi::cmd::CommandPtr Set(double dutycycle);
67
74 wpi::cmd::CommandPtr Set(std::function<double()> dutycycle);
75
82 wpi::cmd::CommandPtr SetVoltage(wpi::units::volt_t volts);
83
90 wpi::cmd::CommandPtr SetVoltage(std::function<wpi::units::volt_t()> volts);
91
92 // ---- Direct setpoint helpers (no command wrapper) -------------------------
93
95 void SetMechanismVelocitySetpoint(wpi::units::turns_per_second_t velocity);
96
98 void SetMeasurementVelocitySetpoint(wpi::units::meters_per_second_t velocity);
99
101 void SetMechanismPositionSetpoint(wpi::units::turn_t angle);
102
104 void SetMeasurementPositionSetpoint(wpi::units::meter_t distance);
105
111 void SetVoltageSetpoint(wpi::units::volt_t voltage);
112
118 void SetDutyCycleSetpoint(double dutycycle);
119
120 // ---- Accessors ------------------------------------------------------------
121
124
130 std::optional<wpi::units::turn_t> GetMechanismSetpoint();
131
139 std::optional<wpi::units::meter_t> GetMeasurementSetpoint();
140
146 wpi::Mechanism2d* GetMechanismWindow();
147
148 protected:
150 wpi::cmd::SubsystemBase* m_subsystem{nullptr};
151
154
156 std::optional<wpi::Mechanism2d> m_mechanismWindow;
157};
158
159} // namespace yams::mechanisms
Definition SmartMechanism.hpp:30
virtual void VisualizationUpdate()=0
SmartMechanism()
Definition SmartMechanism.hpp:32
void SetDutyCycleSetpoint(double dutycycle)
wpi::cmd::CommandPtr Set(std::function< double()> dutycycle)
motorcontrollers::SmartMotorController * GetMotorController()
wpi::cmd::CommandPtr SetVoltage(std::function< wpi::units::volt_t()> volts)
void SetMechanismPositionSetpoint(wpi::units::turn_t angle)
void SetVoltageSetpoint(wpi::units::volt_t voltage)
std::optional< wpi::Mechanism2d > m_mechanismWindow
Definition SmartMechanism.hpp:156
wpi::cmd::CommandPtr Set(double dutycycle)
std::optional< wpi::units::meter_t > GetMeasurementSetpoint()
void SetMeasurementVelocitySetpoint(wpi::units::meters_per_second_t velocity)
virtual ~SmartMechanism()=default
virtual wpi::math::Pose3d GetPose3d() const =0
wpi::cmd::SubsystemBase * m_subsystem
Definition SmartMechanism.hpp:150
motorcontrollers::SmartMotorController * m_smc
Definition SmartMechanism.hpp:153
virtual std::string GetName() const =0
void SetMeasurementPositionSetpoint(wpi::units::meter_t distance)
std::optional< wpi::units::turn_t > GetMechanismSetpoint()
void SetMechanismVelocitySetpoint(wpi::units::turns_per_second_t velocity)
wpi::Mechanism2d * GetMechanismWindow()
wpi::cmd::CommandPtr SetVoltage(wpi::units::volt_t volts)
Definition SmartMotorController.hpp:48
Definition ArmConfig.hpp:17