Module: PIDController
-
template<typename MeasuredPositionMsgPayload, typename MeasuredVelocityMsgPayload, typename OutputMsgPayload, typename DesiredPositionMsgPayload = MeasuredPositionMsgPayload, typename DesiredVelocityMsgPayload = MeasuredVelocityMsgPayload>
class PIDController : public StatefulSysModel - #include <PIDController.h>
Generic PID controller.
This templated class implements a proportional-integral-derivative (PID) controller for use in MuJoCo-based simulations. It reads measured and desired position/velocity messages, computes the control output, and writes it to an output message. The controller supports custom payload types for measured and desired states, as well as output.
The controller requires the relevant input messages to be linked if the corresponding gain (Kp or Kd) is non-zero. Throws a runtime error if a required message is not linked.
- Template Parameters:
MeasuredPositionMsgPayload – Type of measured position message payload.
MeasuredVelocityMsgPayload – Type of measured velocity message payload.
OutputMsgPayload – Type of output message payload.
DesiredPositionMsgPayload – Type of desired position message payload (defaults to measured).
DesiredVelocityMsgPayload – Type of desired velocity message payload (defaults to measured).
Public Functions
-
virtual ~PIDController() = default
Virtual destructor for safe inheritance.
-
inline double getProportionalGain() const
Get the proportional gain.
-
inline void setProportionalGain(double value)
Set the proportional gain.
-
inline double getDerivativeGain() const
Get the derivative gain.
-
inline void setDerivativeGain(double value)
Set the derivative gain.
-
inline double getIntegralGain() const
Get the integral gain.
-
inline void setIntegralGain(double value)
Set the integral gain.
-
inline double getIntegralError()
Get the current integral error state.
- Returns:
The integral error value.
-
inline void setIntegralError(double val)
Set the integral error state.
- Parameters:
val – Value to set.
-
inline virtual void registerStates(DynParamRegisterer registerer) override
Register the integral error state with the state engine.
- Parameters:
registerer – State registration helper.
-
inline void UpdateState(uint64_t CurrentSimNanos) override
Update the controller state and compute the control output.
Reads the measured and desired position/velocity messages, computes the control output using the PID formula, and writes the result to the output message. Throws a runtime error if required messages are not linked when Kp or Kd are non-zero.
- Parameters:
CurrentSimNanos – Current simulation time in nanoseconds.
Public Members
-
ReadFunctor<MeasuredPositionMsgPayload> measuredPosInMsg
Input message functor for measured position.
-
ReadFunctor<DesiredPositionMsgPayload> desiredPosInMsg
Input message functor for desired position.
-
ReadFunctor<MeasuredVelocityMsgPayload> measuredVelInMsg
Input message functor for measured velocity.
-
ReadFunctor<DesiredVelocityMsgPayload> desiredVelInMsg
Input message functor for desired velocity.
-
Message<OutputMsgPayload> outputOutMsg
Output message for control value.
-
BSKLogger bskLogger
BSK Logging.
Protected Functions
-
virtual double readMeasuredPosition(const MeasuredPositionMsgPayload &i) const = 0
Read the measured position from the input payload.
- Parameters:
i – Measured position message payload.
- Returns:
The measured position value.
-
virtual double readMeasuredVelocity(const MeasuredVelocityMsgPayload &i) const = 0
Read the measured velocity from the input payload.
- Parameters:
i – Measured velocity message payload.
- Returns:
The measured velocity value.
-
inline virtual double readDesiredPosition(const DesiredPositionMsgPayload &i) const
Read the desired position from the input payload. Defaults to using the read method
readMeasuredPosition
.- Parameters:
i – Desired position message payload.
- Returns:
The desired position value.
-
inline virtual double readDesiredVelocity(const DesiredVelocityMsgPayload &i) const
Read the desired velocity from the input payload. Defaults to using the read method
readMeasuredVelocity
.- Parameters:
i – Desired velocity message payload.
- Returns:
The desired velocity value.
-
virtual void writeOutput(OutputMsgPayload &o, double val) = 0
Write the computed output value to the output payload.
- Parameters:
o – Output message payload.
val – Value to write.