WPILibC++ 2024.3.2
|
Represents a simulated arm mechanism. More...
#include <frc/simulation/SingleJointedArmSim.h>
Public Member Functions | |
SingleJointedArmSim (const LinearSystem< 2, 1, 1 > &system, const DCMotor &gearbox, double gearing, units::meter_t armLength, units::radian_t minAngle, units::radian_t maxAngle, bool simulateGravity, units::radian_t startingAngle, const std::array< double, 1 > &measurementStdDevs={0.0}) | |
Creates a simulated arm mechanism. More... | |
SingleJointedArmSim (const DCMotor &gearbox, double gearing, units::kilogram_square_meter_t moi, units::meter_t armLength, units::radian_t minAngle, units::radian_t maxAngle, bool simulateGravity, units::radian_t startingAngle, const std::array< double, 1 > &measurementStdDevs={0.0}) | |
Creates a simulated arm mechanism. More... | |
void | SetState (units::radian_t angle, units::radians_per_second_t velocity) |
Sets the arm's state. More... | |
bool | WouldHitLowerLimit (units::radian_t armAngle) const |
Returns whether the arm would hit the lower limit. More... | |
bool | WouldHitUpperLimit (units::radian_t armAngle) const |
Returns whether the arm would hit the upper limit. More... | |
bool | HasHitLowerLimit () const |
Returns whether the arm has hit the lower limit. More... | |
bool | HasHitUpperLimit () const |
Returns whether the arm has hit the upper limit. More... | |
units::radian_t | GetAngle () const |
Returns the current arm angle. More... | |
units::radians_per_second_t | GetVelocity () const |
Returns the current arm velocity. More... | |
units::ampere_t | GetCurrentDraw () const override |
Returns the arm current draw. More... | |
void | SetInputVoltage (units::volt_t voltage) |
Sets the input voltage for the arm. More... | |
void | SetState (const Vectord< States > &state) |
Sets the system state. More... | |
Public Member Functions inherited from frc::sim::LinearSystemSim< 2, 1, 1 > | |
LinearSystemSim (const LinearSystem< States, Inputs, Outputs > &system, const std::array< double, Outputs > &measurementStdDevs={}) | |
Creates a simulated generic linear system. More... | |
virtual | ~LinearSystemSim ()=default |
void | Update (units::second_t dt) |
Updates the simulation. More... | |
const Vectord< Outputs > & | GetOutput () const |
Returns the current output of the plant. More... | |
double | GetOutput (int row) const |
Returns an element of the current output of the plant. More... | |
void | SetInput (const Vectord< Inputs > &u) |
Sets the system inputs (usually voltages). More... | |
void | SetInput (int row, double value) |
void | SetState (const Vectord< States > &state) |
Sets the system state. More... | |
virtual units::ampere_t | GetCurrentDraw () const |
Returns the current drawn by this simulated system. More... | |
Static Public Member Functions | |
static constexpr units::kilogram_square_meter_t | EstimateMOI (units::meter_t length, units::kilogram_t mass) |
Calculates a rough estimate of the moment of inertia of an arm given its length and mass. More... | |
Protected Member Functions | |
Vectord< 2 > | UpdateX (const Vectord< 2 > ¤tXhat, const Vectord< 1 > &u, units::second_t dt) override |
Updates the state estimate of the arm. More... | |
Protected Member Functions inherited from frc::sim::LinearSystemSim< 2, 1, 1 > | |
virtual Vectord< States > | UpdateX (const Vectord< States > ¤tXhat, const Vectord< Inputs > &u, units::second_t dt) |
Updates the state estimate of the system. More... | |
Vectord< Inputs > | ClampInput (Vectord< Inputs > u) |
Clamp the input vector such that no element exceeds the given voltage. More... | |
Additional Inherited Members | |
Protected Attributes inherited from frc::sim::LinearSystemSim< 2, 1, 1 > | |
LinearSystem< States, Inputs, Outputs > | m_plant |
The plant that represents the linear system. More... | |
Vectord< States > | m_x |
State vector. More... | |
Vectord< Inputs > | m_u |
Input vector. More... | |
Vectord< Outputs > | m_y |
Output vector. More... | |
std::array< double, Outputs > | m_measurementStdDevs |
The standard deviations of measurements, used for adding noise to the measurements. More... | |
Represents a simulated arm mechanism.
frc::sim::SingleJointedArmSim::SingleJointedArmSim | ( | const LinearSystem< 2, 1, 1 > & | system, |
const DCMotor & | gearbox, | ||
double | gearing, | ||
units::meter_t | armLength, | ||
units::radian_t | minAngle, | ||
units::radian_t | maxAngle, | ||
bool | simulateGravity, | ||
units::radian_t | startingAngle, | ||
const std::array< double, 1 > & | measurementStdDevs = {0.0} |
||
) |
Creates a simulated arm mechanism.
system | The system representing this arm. This system can be created with LinearSystemId::SingleJointedArmSystem(). |
gearbox | The type and number of motors on the arm gearbox. |
gearing | The gear ratio of the arm (numbers greater than 1 represent reductions). |
armLength | The length of the arm. |
minAngle | The minimum angle that the arm is capable of. |
maxAngle | The maximum angle that the arm is capable of. |
simulateGravity | Whether gravity should be simulated or not. |
startingAngle | The initial position of the arm. |
measurementStdDevs | The standard deviations of the measurements. |
frc::sim::SingleJointedArmSim::SingleJointedArmSim | ( | const DCMotor & | gearbox, |
double | gearing, | ||
units::kilogram_square_meter_t | moi, | ||
units::meter_t | armLength, | ||
units::radian_t | minAngle, | ||
units::radian_t | maxAngle, | ||
bool | simulateGravity, | ||
units::radian_t | startingAngle, | ||
const std::array< double, 1 > & | measurementStdDevs = {0.0} |
||
) |
Creates a simulated arm mechanism.
gearbox | The type and number of motors on the arm gearbox. |
gearing | The gear ratio of the arm (numbers greater than 1 represent reductions). |
moi | The moment of inertia of the arm. This can be calculated from CAD software. |
armLength | The length of the arm. |
minAngle | The minimum angle that the arm is capable of. |
maxAngle | The maximum angle that the arm is capable of. |
simulateGravity | Whether gravity should be simulated or not. |
startingAngle | The initial position of the arm. |
measurementStdDevs | The standard deviation of the measurement noise. |
|
inlinestaticconstexpr |
Calculates a rough estimate of the moment of inertia of an arm given its length and mass.
length | The length of the arm. |
mass | The mass of the arm. |
units::radian_t frc::sim::SingleJointedArmSim::GetAngle | ( | ) | const |
Returns the current arm angle.
|
overridevirtual |
Returns the arm current draw.
Reimplemented from frc::sim::LinearSystemSim< 2, 1, 1 >.
units::radians_per_second_t frc::sim::SingleJointedArmSim::GetVelocity | ( | ) | const |
Returns the current arm velocity.
bool frc::sim::SingleJointedArmSim::HasHitLowerLimit | ( | ) | const |
Returns whether the arm has hit the lower limit.
bool frc::sim::SingleJointedArmSim::HasHitUpperLimit | ( | ) | const |
Returns whether the arm has hit the upper limit.
void frc::sim::SingleJointedArmSim::SetInputVoltage | ( | units::volt_t | voltage | ) |
Sets the input voltage for the arm.
voltage | The input voltage. |
|
inline |
Sets the system state.
state | The new state. |
void frc::sim::SingleJointedArmSim::SetState | ( | units::radian_t | angle, |
units::radians_per_second_t | velocity | ||
) |
Sets the arm's state.
The new angle will be limited between the minimum and maximum allowed limits.
angle | The new angle. |
velocity | The new angular velocity. |
|
overrideprotected |
Updates the state estimate of the arm.
currentXhat | The current state estimate. |
u | The system inputs (voltage). |
dt | The time difference between controller updates. |
bool frc::sim::SingleJointedArmSim::WouldHitLowerLimit | ( | units::radian_t | armAngle | ) | const |
Returns whether the arm would hit the lower limit.
armAngle | The arm height. |
bool frc::sim::SingleJointedArmSim::WouldHitUpperLimit | ( | units::radian_t | armAngle | ) | const |
Returns whether the arm would hit the upper limit.
armAngle | The arm height. |