Blender V4.3
ConstraintSet.hpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009 Ruben Smits
2 *
3 * SPDX-License-Identifier: LGPL-2.1-or-later */
4
9#ifndef CONSTRAINTSET_HPP_
10#define CONSTRAINTSET_HPP_
11
12#include "kdl/frames.hpp"
13#include "eigen_types.hpp"
14#include "Cache.hpp"
15#include <vector>
16
17namespace iTaSC {
18
27
29 unsigned int id; // identifier of constraint value, depends on constraint
30 unsigned int action;// action performed, compbination of ACT_..., set on return
31 const double y; // actual constraint value
32 const double ydot; // actual constraint velocity
33 double yd; // current desired constraint value, changed on return
34 double yddot; // current desired constraint velocity, changed on return
35 ConstraintSingleValue(): id(0), action(0), y(0.0), ydot(0.0) {}
36};
37
39 unsigned int id; // identifier of group of constraint values, depend on constraint
40 unsigned short number; // number of constraints in list
41 unsigned short action; // action performed, ACT_..., set on return
42 double alpha; // constraint activation coefficient, should be [0..1]
43 double tolerance; // current desired tolerance on constraint, same unit than yd, changed on return
44 double feedback; // current desired feedback on error, in 1/sec, changed on return
46 ConstraintValues(): id(0), number(0), action(0), values(NULL) {}
47};
48
49class ConstraintSet;
50typedef bool (*ConstraintCallback)(const Timestamp& timestamp, struct ConstraintValues* const _values, unsigned int _nvalues, void* _param);
51
53protected:
54 unsigned int m_nc;
67 unsigned int m_maxIter;
68
69 friend class Scene;
70 virtual void modelUpdate(KDL::Frame& _external_pose,const Timestamp& timestamp);
71 virtual void updateKinematics(const Timestamp& timestamp)=0;
72 virtual void pushCache(const Timestamp& timestamp)=0;
73 virtual void updateJacobian()=0;
74 virtual void updateControlOutput(const Timestamp& timestamp)=0;
75 virtual void initCache(Cache *_cache) = 0;
76 virtual bool initialise(KDL::Frame& init_pose);
77 virtual void reset(unsigned int nc,double accuracy,unsigned int maximum_iterations);
78 virtual bool closeLoop();
79 virtual double getMaxTimestep(double& timestep);
80
81
82public:
83 ConstraintSet(unsigned int nc,double accuracy,unsigned int maximum_iterations);
85 virtual ~ConstraintSet();
86
87 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
88
89 virtual bool registerCallback(ConstraintCallback _function, void* _param)
90 {
91 m_constraintCallback = _function;
92 m_constraintParam = _param;
93 return true;
94 }
95
96 virtual const e_vector& getControlOutput()const{return m_ydot;};
97 virtual const ConstraintValues* getControlParameters(unsigned int* _nvalues) = 0;
98 virtual bool setControlParameters(ConstraintValues* _values, unsigned int _nvalues, double timestep=0.0) = 0;
99 bool setControlParameter(int id, ConstraintAction action, double value, double timestep=0.0);
100
101 virtual const e_matrix6& getJf() const{return m_Jf;};
102 virtual const KDL::Frame& getPose() const{return m_internalPose;};
103 virtual const e_matrix& getCf() const{return m_Cf;};
104
105 virtual const e_vector& getWy() const {return m_Wy;};
106 virtual void setWy(const e_vector& Wy_in){m_Wy = Wy_in;};
107 virtual void setJointVelocity(const e_vector chidot_in){m_chidot = chidot_in;};
108
109 virtual unsigned int getNrOfConstraints(){return m_nc;};
110 void substep(bool _substep) {m_substep=_substep;}
111 bool substep() {return m_substep;}
112};
113
114}
115
116#endif /* CONSTRAINTSET_HPP_ */
void reset()
clear internal cached data and reset random seed
represents a frame transformation in 3D space (rotation + translation)
Definition frames.hpp:526
virtual const e_matrix6 & getJf() const
virtual void updateJacobian()=0
virtual void setWy(const e_vector &Wy_in)
bool setControlParameter(int id, ConstraintAction action, double value, double timestep=0.0)
virtual double getMaxTimestep(double &timestep)
virtual bool initialise(KDL::Frame &init_pose)
virtual const KDL::Frame & getPose() const
virtual void initCache(Cache *_cache)=0
void substep(bool _substep)
virtual EIGEN_MAKE_ALIGNED_OPERATOR_NEW bool registerCallback(ConstraintCallback _function, void *_param)
virtual void modelUpdate(KDL::Frame &_external_pose, const Timestamp &timestamp)
virtual void updateKinematics(const Timestamp &timestamp)=0
virtual void setJointVelocity(const e_vector chidot_in)
virtual void updateControlOutput(const Timestamp &timestamp)=0
virtual bool closeLoop()
virtual const e_matrix & getCf() const
virtual unsigned int getNrOfConstraints()
ConstraintCallback m_constraintCallback
virtual const e_vector & getControlOutput() const
virtual void pushCache(const Timestamp &timestamp)=0
virtual const ConstraintValues * getControlParameters(unsigned int *_nvalues)=0
virtual bool setControlParameters(ConstraintValues *_values, unsigned int _nvalues, double timestep=0.0)=0
virtual const e_vector & getWy() const
#define NULL
#define e_vector
#define e_vector6
#define e_scalar
#define e_matrix6
#define e_matrix
bool(* ConstraintCallback)(const Timestamp &timestamp, struct ConstraintValues *const _values, unsigned int _nvalues, void *_param)
struct ConstraintSingleValue * values