Class CommonSMC#

Defined in Program listing for file control/src/Controller/CommonSMC.hpp

class CommonSMC : public Actuator#

Subclassed by ExplicitLinearSMC, ExplicitTwisting, LinearSMC, LinearSMCOT2, Twisting

Public Functions

inline CommonSMC(unsigned int type, SP::ControlSensor sensor)#

General constructor.

Parameters:
inline CommonSMC(unsigned int type, SP::ControlSensor sensor, SP::SimpleMatrix B, SP::SimpleMatrix D = std::shared_ptr<SimpleMatrix>())#

Constructor for dynamics affine in control.

Parameters:
  • type – the type of the SMC Actuator

  • sensor – the ControlSensor feeding the Actuator

  • B – the matrix multiplying the control input

  • D – the saturation matrix (optional)

virtual void actuate() = 0#

Compute the new control law at each event.

virtual void initialize(const NonSmoothDynamicalSystem &nsds, const Simulation &s)#

Initialization.

Parameters:
  • nsds – current nonsmooth dynamical system

  • s – current simulation setup

void setCsurface(SP::SimpleMatrix Csurface)#

Set Csurface.

Parameters:

Csurface – a SP::SimpleMatrix containing the new value for _Csurface

void setSaturationMatrix(SP::SimpleMatrix newSat)#

Set _D to pointer newPtr.

Parameters:

newSat – a SP::SimpleMatrix containing the new value for _D

inline void setAlpha(double alpha)#

Set _alpha.

Parameters:

alpha – the new value for _alpha

inline SP::SiconosVector lambda() const#

get _lambda

Returns:

a pointer to _lambda

inline void setSolver(const int numericsSolverId)#

Set the solver.

Parameters:

numericsSolverId – the solver for the relay

inline void setPrecision(double newPrecision)#

Set the precision.

Parameters:

newPrecision – a double

inline const LinearOSNS &relay()#

Get the OneStepNSProblem problem associated with the controller.

This is useful to gain access to the data given to the solver in Numerics

Returns:

a reference to the LinearOSNS problem

inline SiconosVector &ueq()#

get \( u^{eq} \)

Returns:

a reference to _ueq

inline SiconosVector &us()#

get \( u^{s} \)

Returns:

a reference to _us

inline void setTheta(double newTheta)#

Set _theta, used in some discretization method for \( u^{eq} \).

Parameters:

newTheta – the new value for _thetaSMC

inline void noUeq(bool b)#

Disable (or enable) the use of the state-continuous control \( u^{eq} \).

Parameters:

b – disable the use of Ueq if true

inline void setComputeResidus(bool b)#

Disable (or enable) the computation of the residus on the Newton loop.

This has an incidence only if the Relation is nonlinear

Parameters:

b – disable the computation of the residus

virtual void setTimeDiscretisation(const TimeDiscretisation &td)#

This is derived in child classes if they need to copy the TimeDiscretisation associated with this Sensor.

Parameters:

td – the TimeDiscretisation for this Sensor

inline void setDS(SP::FirstOrderNonLinearDS ds)#

Set the DynamicalSystem used to compute the control law.

This is useful when we have a Nonlinear problem and we need to compute the control law with an approximate model, or when the dynamics are quite different.

Parameters:

ds – the DynamicalSystem to be used in the Controller

inline virtual SP::NonSmoothDynamicalSystem getInternalNSDS() const#

get the NSDS used in the SMC

Returns:

the NSDS used in the SMC

inline OneStepIntegrator &getInternalOSI() const#

get the Integrator used in the SMC

Returns:

the Integrator used in the SMC