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