ocra-recipes
Doxygen documentation for the ocra-recipes repository
Feature.h
Go to the documentation of this file.
1 
14 #ifndef _OCRA_FEATURE_H_
15 #define _OCRA_FEATURE_H_
16 
19 
21 #include "ocra/control/Model.h"
22 #include "ocra/control/FullState.h"
24 #include "ocra/control/TaskState.h"
25 #include <ocra/util/Macros.h>
26 
27 #include <Eigen/Lgsm>
28 #include <boost/shared_ptr.hpp>
29 #include <boost/noncopyable.hpp>
30 
31 namespace ocra
32 {
33  class ControlFrame;
34  class FullState;
35  class PartialState;
36 }
37 
38 namespace ocra
39 {
40  // --- ABSTRACT -----------------------------------------------
41 
43 
55  class Feature : public NamedInstance, boost::noncopyable
56  {
58  protected:
59  Feature(const std::string& name);
60 
61  public:
62  virtual ~Feature() = 0;
63 
64  virtual int getDimension() const = 0;
65 
66  virtual const Eigen::MatrixXd& getSpaceTransform() const = 0;
67 
68  virtual const Eigen::VectorXd& computeEffort(const Feature& featureDes) const = 0;
69  virtual const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const = 0;
70  virtual const Eigen::VectorXd& computeError(const Feature& featureDes) const = 0;
71  virtual const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const = 0;
72  virtual const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const = 0;
73  virtual const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const = 0;
74  virtual const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const = 0;
75 
76  virtual const Eigen::VectorXd& computeEffort() const = 0;
77  virtual const Eigen::VectorXd& computeAcceleration() const = 0;
78  virtual const Eigen::VectorXd& computeError() const = 0;
79  virtual const Eigen::VectorXd& computeErrorDot() const = 0;
80  virtual const Eigen::MatrixXd& computeJacobian() const = 0;
81  virtual const Eigen::MatrixXd& computeProjectedMass() const = 0;
82  virtual const Eigen::MatrixXd& computeProjectedMassInverse() const = 0;
83 
84  virtual TaskState getState() const = 0;
85  virtual void setState(const TaskState& newState) = 0;
86  };
87 
88 
89  // --- POSITION -----------------------------------------------
90 
92 
101  class PositionFeature : public Feature
102  {
104 
105  public:
106  PositionFeature(const std::string& name, ControlFrame::Ptr frame, ECartesianDof axes);
107 
108  int getDimension() const;
109 
110  const Eigen::MatrixXd& getSpaceTransform() const;
111 
112  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
113  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
114  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
115  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
116  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
117  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
118  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
119 
120  const Eigen::VectorXd& computeEffort() const;
121  const Eigen::VectorXd& computeAcceleration() const;
122  const Eigen::VectorXd& computeError() const;
123  const Eigen::VectorXd& computeErrorDot() const;
124  const Eigen::MatrixXd& computeJacobian() const;
125  const Eigen::MatrixXd& computeProjectedMass() const;
126  const Eigen::MatrixXd& computeProjectedMassInverse() const;
127 
128  TaskState getState() const;
129  void setState(const TaskState& newState);
130 
131  private:
132  struct Pimpl;
133  boost::shared_ptr<Pimpl> pimpl;
134  };
135 
136 
137  // --- POINT CONTACT ------------------------------------------
138 
140 
148  {
150 
151  public:
152  PointContactFeature(const std::string& name, ControlFrame::Ptr frame);
153 
154  int getDimension() const;
155 
156  const Eigen::MatrixXd& getSpaceTransform() const;
157 
158  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
159  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
160  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
161  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
162  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
163  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
164  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
165 
166  const Eigen::VectorXd& computeEffort() const;
167  const Eigen::VectorXd& computeAcceleration() const;
168  const Eigen::VectorXd& computeError() const;
169  const Eigen::VectorXd& computeErrorDot() const;
170  const Eigen::MatrixXd& computeJacobian() const;
171  const Eigen::MatrixXd& computeProjectedMass() const;
172  const Eigen::MatrixXd& computeProjectedMassInverse() const;
173 
174  TaskState getState() const;
175  void setState(const TaskState& newState);
176 
177  private:
178  struct Pimpl;
179  boost::shared_ptr<Pimpl> pimpl;
180  };
181 
182 
183  // --- ORIENTATION --------------------------------------------
184 
186 
192  {
194 
195  public:
196  OrientationFeature(const std::string& name, ControlFrame::Ptr frame);
197 
198  int getDimension() const;
199 
200  const Eigen::MatrixXd& getSpaceTransform() const;
201 
202  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
203  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
204  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
205  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
206  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
207  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
208  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
209 
210  const Eigen::VectorXd& computeEffort() const;
211  const Eigen::VectorXd& computeAcceleration() const;
212  const Eigen::VectorXd& computeError() const;
213  const Eigen::VectorXd& computeErrorDot() const;
214  const Eigen::MatrixXd& computeJacobian() const;
215  const Eigen::MatrixXd& computeProjectedMass() const;
216  const Eigen::MatrixXd& computeProjectedMassInverse() const;
217 
218  TaskState getState() const;
219  void setState(const TaskState& newState);
220 
221  private:
222  struct Pimpl;
223  boost::shared_ptr<Pimpl> pimpl;
224  };
225 
226 
227  // --- DISPLACEMENT -------------------------------------------
228 
230 
236  {
238 
239  public:
240  DisplacementFeature(const std::string& name, ControlFrame::Ptr frame, ECartesianDof axes);
241 
242  int getDimension() const;
243 
244  const Eigen::MatrixXd& getSpaceTransform() const;
245 
246  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
247  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
248  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
249  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
250  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
251  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
252  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
253 
254  const Eigen::VectorXd& computeEffort() const;
255  const Eigen::VectorXd& computeAcceleration() const;
256  const Eigen::VectorXd& computeError() const;
257  const Eigen::VectorXd& computeErrorDot() const;
258  const Eigen::MatrixXd& computeJacobian() const;
259  const Eigen::MatrixXd& computeProjectedMass() const;
260  const Eigen::MatrixXd& computeProjectedMassInverse() const;
261 
262  TaskState getState() const;
263  void setState(const TaskState& newState);
264 
265  private:
266  struct Pimpl;
267  boost::shared_ptr<Pimpl> pimpl;
268  };
269 
270 
271  // --- CONTACT CONSTRAINT -------------------------------------
272 
274 
280  {
282 
283  public:
284  ContactConstraintFeature(const std::string& name, ControlFrame::Ptr frame);
285 
286  int getDimension() const;
287 
288  const Eigen::MatrixXd& getSpaceTransform() const;
289 
290  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
291  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
292  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
293  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
294  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
295  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
296  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
297 
298  const Eigen::VectorXd& computeEffort() const;
299  const Eigen::VectorXd& computeAcceleration() const;
300  const Eigen::VectorXd& computeError() const;
301  const Eigen::VectorXd& computeErrorDot() const;
302  const Eigen::MatrixXd& computeJacobian() const;
303  const Eigen::MatrixXd& computeProjectedMass() const;
304  const Eigen::MatrixXd& computeProjectedMassInverse() const;
305 
306 
307  TaskState getState() const;
308  void setState(const TaskState& newState);
309 
310 
311  private:
312  struct Pimpl;
313  boost::shared_ptr<Pimpl> pimpl;
314  };
315 
316 
317 
318 
319 
320  // --- ARTICULAR ----------------------------------------------
321 
323 
326  class FullStateFeature : public Feature
327  {
329 
330  public:
331  FullStateFeature(const std::string& name, FullState::Ptr state);
332 
333  int getDimension() const;
334 
335  const Eigen::MatrixXd& getSpaceTransform() const;
336 
337  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
338  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
339  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
340  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
341  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
342  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
343  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
344 
345  const Eigen::VectorXd& computeEffort() const;
346  const Eigen::VectorXd& computeAcceleration() const;
347  const Eigen::VectorXd& computeError() const;
348  const Eigen::VectorXd& computeErrorDot() const;
349  const Eigen::MatrixXd& computeJacobian() const;
350  const Eigen::MatrixXd& computeProjectedMass() const;
351  const Eigen::MatrixXd& computeProjectedMassInverse() const;
352 
353 
354  TaskState getState() const;
355  void setState(const TaskState& newState);
356 
357 
358  private:
359  struct Pimpl;
360  boost::shared_ptr<Pimpl> pimpl;
361  };
362 
363  // --- PARTIAL - ARTICULAR ----------------------------------------
364 
366 
370  {
372 
373  public:
374  PartialStateFeature(const std::string& name, PartialState::Ptr state);
375 
376  int getDimension() const;
377 
378  const Eigen::MatrixXd& getSpaceTransform() const;
379 
380  const Eigen::VectorXd& computeEffort(const Feature& featureDes) const;
381  const Eigen::VectorXd& computeAcceleration(const Feature& featureDes) const;
382  const Eigen::VectorXd& computeError(const Feature& featureDes) const;
383  const Eigen::VectorXd& computeErrorDot(const Feature& featureDes) const;
384  const Eigen::MatrixXd& computeJacobian(const Feature& featureDes) const;
385  const Eigen::MatrixXd& computeProjectedMass(const Feature& featureDes) const;
386  const Eigen::MatrixXd& computeProjectedMassInverse(const Feature& featureDes) const;
387 
388  const Eigen::VectorXd& computeEffort() const;
389  const Eigen::VectorXd& computeAcceleration() const;
390  const Eigen::VectorXd& computeError() const;
391  const Eigen::VectorXd& computeErrorDot() const;
392  const Eigen::MatrixXd& computeJacobian() const;
393  const Eigen::MatrixXd& computeProjectedMass() const;
394  const Eigen::MatrixXd& computeProjectedMassInverse() const;
395 
396 
397  TaskState getState() const;
398  void setState(const TaskState& newState);
399 
400 
401  private:
402  struct Pimpl;
403  boost::shared_ptr<Pimpl> pimpl;
404  };
405 }
406 
407 #endif
408 
409 // cmake:sourcegroup=Api
Used to build tasks in a partial configuration space.
Definition: Feature.h:369
virtual const Eigen::MatrixXd & computeProjectedMass() const =0
virtual const Eigen::VectorXd & computeAcceleration() const =0
Classes that represent frames.
Used to build orientation tasks.
Definition: Feature.h:191
virtual void setState(const TaskState &newState)=0
Declaration file of the Model class.
Define partial state classes that can be used to control some joints of the robot.
Feature interface, used by tasks to compute errors and jacobians.
Definition: Feature.h:55
#define DEFINE_CLASS_POINTER_TYPEDEFS(Class)
Definition: Macros.h:8
Optimization-based Robot Controller namespace. a library of classes to write and solve optimization p...
virtual ~Feature()=0
Definition: Feature.cpp:17
Used to build positioning tasks.
Definition: Feature.h:101
ECartesianDof
Definition: ControlEnum.h:18
Used to build tasks in the manikin configuration space.
Definition: Feature.h:326
virtual const Eigen::MatrixXd & computeProjectedMassInverse() const =0
Used to build point contact tasks.
Definition: Feature.h:147
virtual const Eigen::MatrixXd & computeJacobian() const =0
Used to build position/orientation tasks.
Definition: Feature.h:235
virtual TaskState getState() const =0
virtual const Eigen::VectorXd & computeError() const =0
virtual int getDimension() const =0
Used to build contact constraint tasks (null acceleration).
Definition: Feature.h:279
Feature(const std::string &name)
Definition: Feature.cpp:12
virtual const Eigen::VectorXd & computeErrorDot() const =0
virtual const Eigen::MatrixXd & getSpaceTransform() const =0
virtual const Eigen::VectorXd & computeEffort() const =0
Some enumerations for the control.