Package edu.wpi.first.wpilibj.simulation
Class SingleJointedArmSim
java.lang.Object
edu.wpi.first.wpilibj.simulation.LinearSystemSim<N2,N1,N2>
edu.wpi.first.wpilibj.simulation.SingleJointedArmSim
Represents a simulated single jointed arm mechanism.
-
Field Summary
Fields inherited from class edu.wpi.first.wpilibj.simulation.LinearSystemSim
m_measurementStdDevs, m_plant, m_u, m_x, m_y
-
Constructor Summary
ConstructorsConstructorDescriptionSingleJointedArmSim
(LinearSystem<N2, N1, N2> plant, DCMotor gearbox, double gearing, double armLength, double minAngleRads, double maxAngleRads, boolean simulateGravity, double startingAngleRads, double... measurementStdDevs) Creates a simulated arm mechanism.SingleJointedArmSim
(DCMotor gearbox, double gearing, double j, double armLength, double minAngleRads, double maxAngleRads, boolean simulateGravity, double startingAngleRads, double... measurementStdDevs) Creates a simulated arm mechanism. -
Method Summary
Modifier and TypeMethodDescriptionstatic double
estimateMOI
(double length, double mass) Calculates a rough estimate of the moment of inertia of an arm given its length and mass.double
getAngle()
Returns the current arm angle.double
Returns the arm current draw.double
Returns the current arm velocity.boolean
Returns whether the arm has hit the lower limit.boolean
Returns whether the arm has hit the upper limit.void
setInputVoltage
(double volts) Sets the input voltage for the arm.final void
setState
(double angleRadians, double velocityRadPerSec) Sets the arm's state.Updates the state of the arm.boolean
wouldHitLowerLimit
(double currentAngleRads) Returns whether the arm would hit the lower limit.boolean
wouldHitUpperLimit
(double currentAngleRads) Returns whether the arm would hit the upper limit.
-
Constructor Details
-
SingleJointedArmSim
public SingleJointedArmSim(LinearSystem<N2, N1, N2> plant, DCMotor gearbox, double gearing, double armLength, double minAngleRads, double maxAngleRads, boolean simulateGravity, double startingAngleRads, double... measurementStdDevs) Creates a simulated arm mechanism.- Parameters:
plant
- The linear system that represents the arm. This system can be created withLinearSystemId.createSingleJointedArmSystem(DCMotor, double, double)
.gearbox
- The type of and number of motors in the arm gearbox.gearing
- The gearing of the arm (numbers greater than 1 represent reductions).armLength
- The length of the arm in meters.minAngleRads
- The minimum angle that the arm is capable of.maxAngleRads
- The maximum angle that the arm is capable of.simulateGravity
- Whether gravity should be simulated or not.startingAngleRads
- The initial position of the Arm simulation in radians.measurementStdDevs
- The standard deviations of the measurements. Can be omitted if no noise is desired. If present must have 1 element for position.
-
SingleJointedArmSim
public SingleJointedArmSim(DCMotor gearbox, double gearing, double j, double armLength, double minAngleRads, double maxAngleRads, boolean simulateGravity, double startingAngleRads, double... measurementStdDevs) Creates a simulated arm mechanism.- Parameters:
gearbox
- The type of and number of motors in the arm gearbox.gearing
- The gearing of the arm (numbers greater than 1 represent reductions).j
- The moment of inertia of the arm in kg-m²; can be calculated from CAD software.armLength
- The length of the arm in meters.minAngleRads
- The minimum angle that the arm is capable of.maxAngleRads
- The maximum angle that the arm is capable of.simulateGravity
- Whether gravity should be simulated or not.startingAngleRads
- The initial position of the Arm simulation in radians.measurementStdDevs
- The standard deviations of the measurements. Can be omitted if no noise is desired. If present must have 1 element for position.
-
-
Method Details
-
setState
Sets the arm's state. The new angle will be limited between the minimum and maximum allowed limits.- Parameters:
angleRadians
- The new angle in radians.velocityRadPerSec
- The new angular velocity in radians per second.
-
wouldHitLowerLimit
Returns whether the arm would hit the lower limit.- Parameters:
currentAngleRads
- The current arm height.- Returns:
- Whether the arm would hit the lower limit.
-
wouldHitUpperLimit
Returns whether the arm would hit the upper limit.- Parameters:
currentAngleRads
- The current arm height.- Returns:
- Whether the arm would hit the upper limit.
-
hasHitLowerLimit
Returns whether the arm has hit the lower limit.- Returns:
- Whether the arm has hit the lower limit.
-
hasHitUpperLimit
Returns whether the arm has hit the upper limit.- Returns:
- Whether the arm has hit the upper limit.
-
getAngle
Returns the current arm angle.- Returns:
- The current arm angle in radians.
-
getVelocity
Returns the current arm velocity.- Returns:
- The current arm velocity in radians per second.
-
getCurrentDraw
Returns the arm current draw.- Returns:
- The arm current draw in amps.
-
setInputVoltage
Sets the input voltage for the arm.- Parameters:
volts
- The input voltage.
-
estimateMOI
Calculates a rough estimate of the moment of inertia of an arm given its length and mass.- Parameters:
length
- The length of the arm in m.mass
- The mass of the arm in kg.- Returns:
- The calculated moment of inertia in kg-m².
-
updateX
Updates the state of the arm.- Overrides:
updateX
in classLinearSystemSim<N2,
N1, N2> - Parameters:
currentXhat
- The current state estimate.u
- The system inputs (voltage).dt
- The time difference between controller updates in seconds.- Returns:
- The new state.
-