Skip to content
Snippets Groups Projects
control-pd.hh 2.88 KiB
Newer Older
Thomas Moulard's avatar
Thomas Moulard committed
/*
 * Copyright 2010,
 * François Bleibel,
 * Olivier Stasse,
 *
 * CNRS/AIST
 *
 */

#ifndef __SOT_Control_PD_HH__
#define __SOT_Control_PD_HH__

/* --------------------------------------------------------------------- */
/* --- INCLUDE --------------------------------------------------------- */
/* --------------------------------------------------------------------- */

/* Matrix */
#include <dynamic-graph/linear-algebra.h>

/* SOT */
#include <dynamic-graph/entity.h>
Guilhem Saurel's avatar
Guilhem Saurel committed
#include <dynamic-graph/signal-ptr.h>
#include <dynamic-graph/signal-time-dependent.h>

/* --------------------------------------------------------------------- */
/* --- API ------------------------------------------------------------- */
/* --------------------------------------------------------------------- */

Guilhem Saurel's avatar
Guilhem Saurel committed
#if defined(WIN32)
#if defined(control_pd_EXPORTS)
#define ControlPD_EXPORT __declspec(dllexport)
#else
#define ControlPD_EXPORT __declspec(dllimport)
#endif
Guilhem Saurel's avatar
Guilhem Saurel committed
#define ControlPD_EXPORT
namespace dynamicgraph {
Guilhem Saurel's avatar
Guilhem Saurel committed
namespace sot {
Guilhem Saurel's avatar
Guilhem Saurel committed
/* --------------------------------------------------------------------- */
/* --- CLASS ----------------------------------------------------------- */
/* --------------------------------------------------------------------- */
Guilhem Saurel's avatar
Guilhem Saurel committed
class ControlPD_EXPORT ControlPD : public Entity {
Guilhem Saurel's avatar
Guilhem Saurel committed
 public: /* --- CONSTRUCTOR ---- */
Guilhem Saurel's avatar
Guilhem Saurel committed
  ControlPD(const std::string &name);

Guilhem Saurel's avatar
Guilhem Saurel committed
 public: /* --- INIT --- */
Guilhem Saurel's avatar
Guilhem Saurel committed
  void init(const double &step);

Guilhem Saurel's avatar
Guilhem Saurel committed
 public: /* --- CONSTANTS --- */
Guilhem Saurel's avatar
Guilhem Saurel committed
  /* Default values. */
Guilhem Saurel's avatar
Guilhem Saurel committed
  static const double TIME_STEP_DEFAULT;  // = 0.001
Guilhem Saurel's avatar
Guilhem Saurel committed

Guilhem Saurel's avatar
Guilhem Saurel committed
 public: /* --- ENTITY INHERITANCE --- */
Guilhem Saurel's avatar
Guilhem Saurel committed
  static const std::string CLASS_NAME;
  virtual void display(std::ostream &os) const;
  virtual const std::string &getClassName(void) const { return CLASS_NAME; }

Guilhem Saurel's avatar
Guilhem Saurel committed
 protected:
Guilhem Saurel's avatar
Guilhem Saurel committed
  /* Parameters of the torque-control function:
   * tau = kp * (qd-q) + kd* (dqd-dq) */
  double TimeStep;

Guilhem Saurel's avatar
Guilhem Saurel committed
 public: /* --- SIGNALS --- */
Olivier Stasse's avatar
Olivier Stasse committed
  SignalPtr<dynamicgraph::Vector, int> KpSIN;
  SignalPtr<dynamicgraph::Vector, int> KdSIN;
  SignalPtr<dynamicgraph::Vector, int> positionSIN;
  SignalPtr<dynamicgraph::Vector, int> desiredpositionSIN;
  SignalPtr<dynamicgraph::Vector, int> velocitySIN;
  SignalPtr<dynamicgraph::Vector, int> desiredvelocitySIN;
  SignalTimeDependent<dynamicgraph::Vector, int> controlSOUT;
  SignalTimeDependent<dynamicgraph::Vector, int> positionErrorSOUT;
  SignalTimeDependent<dynamicgraph::Vector, int> velocityErrorSOUT;
Guilhem Saurel's avatar
Guilhem Saurel committed

Guilhem Saurel's avatar
Guilhem Saurel committed
 protected:
Olivier Stasse's avatar
Olivier Stasse committed
  dynamicgraph::Vector &computeControl(dynamicgraph::Vector &tau, int t);
  dynamicgraph::Vector position_error_;
  dynamicgraph::Vector velocity_error_;
Guilhem Saurel's avatar
Guilhem Saurel committed
  dynamicgraph::Vector &getPositionError(dynamicgraph::Vector &position_error,
                                         int t);
  dynamicgraph::Vector &getVelocityError(dynamicgraph::Vector &velocity_error,
                                         int t);
Guilhem Saurel's avatar
Guilhem Saurel committed
};
Guilhem Saurel's avatar
Guilhem Saurel committed
}  // namespace sot
}  // namespace dynamicgraph
Guilhem Saurel's avatar
Guilhem Saurel committed
#endif  // #ifndef __SOT_Control_PD_HH__