YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
Arm.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/SingleJointedArmSim.hpp>
13#include <wpi/smartdashboard/MechanismLigament2d.hpp>
14#include <wpi/units/angle.hpp>
15
18
20
70 public:
78
79 // ---- SmartMechanism overrides ---------------------------------------------
80
82 void SimIterate() override;
83
85 void UpdateTelemetry() override;
86
88 void VisualizationUpdate() override;
89
91 std::string GetName() const override;
92
93 // ---- SmartPositionalMechanism overrides -----------------------------------
94
101 wpi::cmd::Trigger Max() override;
102
109 wpi::cmd::Trigger Min() override;
110
111 // ---- Arm-specific interface -----------------------------------------------
112
119 wpi::cmd::CommandPtr Run(wpi::units::degree_t angle);
120
127 wpi::cmd::CommandPtr Run(std::function<wpi::units::degree_t()> angle);
128
136 wpi::cmd::CommandPtr RunTo(wpi::units::degree_t angle,
137 wpi::units::degree_t tolerance = wpi::units::degree_t{1.0});
138
148 wpi::cmd::CommandPtr RunTo(std::function<wpi::units::degree_t()> angle,
149 wpi::units::degree_t tolerance = wpi::units::degree_t{1.0});
150
156 wpi::units::degree_t GetAngle() const;
157
164 wpi::cmd::Trigger Gte(wpi::units::degree_t angle);
165
172 wpi::cmd::Trigger Lte(wpi::units::degree_t angle);
173
181 wpi::cmd::Trigger Between(wpi::units::degree_t start, wpi::units::degree_t end);
182
190 wpi::cmd::Trigger IsNear(wpi::units::degree_t angle,
191 wpi::units::degree_t within = wpi::units::degree_t{1.0});
192
199
207 wpi::math::Pose3d GetPose3d() const override;
208
214 void SetAngle(wpi::units::degree_t angle);
215
216 private:
217 config::ArmConfig* m_armConfig{nullptr};
218 std::string m_name{"Arm"};
219 std::optional<wpi::sim::SingleJointedArmSim> m_armSim;
220 wpi::MechanismLigament2d* m_setpointLigament{nullptr};
221};
222
223} // namespace yams::mechanisms::positional
Definition ArmConfig.hpp:24
wpi::units::degree_t GetAngle() const
wpi::cmd::Trigger Min() override
std::string GetName() const override
wpi::cmd::Trigger Between(wpi::units::degree_t start, wpi::units::degree_t end)
void SetAngle(wpi::units::degree_t angle)
wpi::cmd::CommandPtr Run(std::function< wpi::units::degree_t()> angle)
wpi::cmd::Trigger Max() override
wpi::cmd::CommandPtr Run(wpi::units::degree_t angle)
const config::ArmConfig & GetConfig() const
wpi::cmd::Trigger Lte(wpi::units::degree_t angle)
wpi::cmd::Trigger IsNear(wpi::units::degree_t angle, wpi::units::degree_t within=wpi::units::degree_t{1.0})
Arm(config::ArmConfig *config, motorcontrollers::SmartMotorController *smc)
wpi::cmd::CommandPtr RunTo(wpi::units::degree_t angle, wpi::units::degree_t tolerance=wpi::units::degree_t{1.0})
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 Gte(wpi::units::degree_t angle)
wpi::math::Pose3d GetPose3d() const override
Definition SmartPositionalMechanism.hpp:21
Definition SmartMotorController.hpp:48
Definition Arm.hpp:19