YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
Pivot.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/smartdashboard/MechanismLigament2d.hpp>
14#include <wpi/units/angle.hpp>
15
18
20
71 public:
79
80 // ---- SmartMechanism overrides ---------------------------------------------
81
83 void SimIterate() override;
84
86 void UpdateTelemetry() override;
87
89 void VisualizationUpdate() override;
90
92 std::string GetName() const override;
93
94 // ---- SmartPositionalMechanism overrides -----------------------------------
95
102 wpi::cmd::Trigger Max() override;
103
110 wpi::cmd::Trigger Min() override;
111
112 // ---- Pivot-specific interface ---------------------------------------------
113
120 wpi::cmd::CommandPtr Run(wpi::units::degree_t angle);
121
128 wpi::cmd::CommandPtr Run(std::function<wpi::units::degree_t()> angle);
129
137 wpi::cmd::CommandPtr RunTo(wpi::units::degree_t angle,
138 wpi::units::degree_t tolerance = wpi::units::degree_t{1.0});
139
149 wpi::cmd::CommandPtr RunTo(std::function<wpi::units::degree_t()> angle,
150 wpi::units::degree_t tolerance = wpi::units::degree_t{1.0});
151
157 wpi::units::degree_t GetAngle() const;
158
165 wpi::cmd::Trigger Gte(wpi::units::degree_t angle);
166
173 wpi::cmd::Trigger Lte(wpi::units::degree_t angle);
174
182 wpi::cmd::Trigger Between(wpi::units::degree_t start, wpi::units::degree_t end);
183
191 wpi::cmd::Trigger IsNear(wpi::units::degree_t angle,
192 wpi::units::degree_t within = wpi::units::degree_t{1.0});
193
200
208 wpi::math::Pose3d GetPose3d() const override;
209
215 void SetAngle(wpi::units::degree_t angle);
216
217 private:
218 config::PivotConfig* m_pivotConfig{nullptr};
219 std::string m_name{"Pivot"};
220 std::optional<wpi::sim::DCMotorSim> m_dcMotorSim;
221 wpi::MechanismLigament2d* m_setpointLigament{nullptr};
222};
223
224} // namespace yams::mechanisms::positional
Definition PivotConfig.hpp:25
std::string GetName() const override
wpi::cmd::Trigger Gte(wpi::units::degree_t angle)
wpi::units::degree_t GetAngle() const
const config::PivotConfig & GetConfig() const
void SetAngle(wpi::units::degree_t angle)
wpi::math::Pose3d GetPose3d() const override
wpi::cmd::Trigger IsNear(wpi::units::degree_t angle, wpi::units::degree_t within=wpi::units::degree_t{1.0})
wpi::cmd::Trigger Max() override
wpi::cmd::Trigger Lte(wpi::units::degree_t angle)
wpi::cmd::Trigger Min() override
wpi::cmd::CommandPtr RunTo(std::function< wpi::units::degree_t()> angle, wpi::units::degree_t tolerance=wpi::units::degree_t{1.0})
wpi::cmd::Trigger Between(wpi::units::degree_t start, wpi::units::degree_t end)
wpi::cmd::CommandPtr RunTo(wpi::units::degree_t angle, wpi::units::degree_t tolerance=wpi::units::degree_t{1.0})
wpi::cmd::CommandPtr Run(wpi::units::degree_t angle)
wpi::cmd::CommandPtr Run(std::function< wpi::units::degree_t()> angle)
Pivot(config::PivotConfig *config, motorcontrollers::SmartMotorController *smc)
Definition SmartPositionalMechanism.hpp:21
Definition SmartMotorController.hpp:48
Definition Arm.hpp:19