integrator-force.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2010,
3  * François Bleibel,
4  * Olivier Stasse,
5  *
6  * CNRS/AIST
7  *
8  */
9 
10 #include <dynamic-graph/factory.h>
12 
13 #include <sot/core/debug.hh>
14 
15 using namespace dynamicgraph::sot;
16 using namespace dynamicgraph;
18 
19 const double IntegratorForce::TIME_STEP_DEFAULT = 5e-3;
20 
22  : Entity(name),
23  timeStep(TIME_STEP_DEFAULT),
24  forceSIN(NULL, "sotIntegratorForce(" + name + ")::input(vector)::force"),
25  massInverseSIN(
26  NULL, "sotIntegratorForce(" + name + ")::input(matrix)::massInverse"),
27  frictionSIN(NULL,
28  "sotIntegratorForce(" + name + ")::input(matrix)::friction"),
29  velocityPrecSIN(NULL,
30  "sotIntegratorForce(" + name + ")::input(matrix)::vprec")
31 
32  ,
33  velocityDerivativeSOUT(
34  boost::bind(&IntegratorForce::computeDerivative, this, _1, _2),
35  velocityPrecSIN << forceSIN << massInverseSIN << frictionSIN,
36  "sotIntegratorForce(" + name +
37  ")::output(Vector)::velocityDerivative"),
38  velocitySOUT(boost::bind(&IntegratorForce::computeIntegral, this, _1, _2),
39  velocityPrecSIN << velocityDerivativeSOUT,
40  "sotIntegratorForce(" + name + ")::output(Vector)::velocity")
41 
42  ,
43  massSIN(NULL, "sotIntegratorForce(" + name + ")::input(matrix)::mass"),
44  massInverseSOUT(
45  boost::bind(&IntegratorForce::computeMassInverse, this, _1, _2),
46  massSIN,
47  "sotIntegratorForce(" + name + ")::input(matrix)::massInverseOUT") {
48  sotDEBUGIN(5);
49 
58 
60 
61  sotDEBUGOUT(5);
62 }
63 
65  sotDEBUGIN(5);
66 
67  sotDEBUGOUT(5);
68  return;
69 }
70 
71 /* --- SIGNALS -------------------------------------------------------------- */
72 /* --- SIGNALS -------------------------------------------------------------- */
73 /* --- SIGNALS -------------------------------------------------------------- */
74 
75 /* The derivative of the signal is such that: M v_dot + B v = f. We deduce:
76  * v_dot = M^-1 (f - Bv)
77  */
79  dynamicgraph::Vector& res, const sigtime_t& time) {
80  sotDEBUGIN(15);
81 
82  const dynamicgraph::Vector& force = forceSIN(time);
83  const dynamicgraph::Matrix& massInverse = massInverseSIN(time);
84  const dynamicgraph::Matrix& friction = frictionSIN(time);
85 
86  sotDEBUG(15) << "force = " << force << std::endl;
87 
88  dynamicgraph::Vector f_bv(force.size());
89 
90  if (velocityPrecSIN) {
91  const dynamicgraph::Vector& vel = velocityPrecSIN(time);
92  sotDEBUG(15) << "vel = " << vel << std::endl;
93  f_bv = friction * vel;
94  f_bv *= -1;
95  } else {
96  f_bv.fill(0);
97  } // vel is not set yet.
98 
99  f_bv += force;
100  res = massInverse * f_bv;
101 
102  sotDEBUGOUT(15);
103  return res;
104 }
105 
107  dynamicgraph::Vector& res, const sigtime_t& time) {
108  sotDEBUGIN(15);
109 
110  const dynamicgraph::Vector& dvel = velocityDerivativeSOUT(time);
111  res = dvel;
112  res *= timeStep;
113  if (velocityPrecSIN) {
114  const dynamicgraph::Vector& vel = velocityPrecSIN(time);
115  res += vel;
116  } else { /* vprec not set yet. */
117  }
119 
120  sotDEBUGOUT(15);
121  return res;
122 }
123 
125  dynamicgraph::Matrix& res, const sigtime_t& time) {
126  sotDEBUGIN(15);
127 
128  const dynamicgraph::Matrix& mass = massSIN(time);
129  res = mass.inverse();
130 
131  sotDEBUGOUT(15);
132  return res;
133 }
dynamicgraph::sot::IntegratorForce::massInverseSOUT
dg::SignalTimeDependent< dynamicgraph::Matrix, sigtime_t > massInverseSOUT
Definition: integrator-force.h:78
dynamicgraph::sot::IntegratorForce::computeDerivative
dynamicgraph::Vector & computeDerivative(dynamicgraph::Vector &res, const sigtime_t &time)
Definition: integrator-force.cpp:78
dynamicgraph
dynamicgraph::SignalPtr::plug
virtual void plug(SignalBase< Time > *ref)
dynamicgraph::Entity
boost
debug.hh
dynamicgraph::Matrix
Eigen::MatrixXd Matrix
dynamicgraph::sot::IntegratorForce::frictionSIN
dg::SignalPtr< dynamicgraph::Matrix, sigtime_t > frictionSIN
Definition: integrator-force.h:68
dynamicgraph::sot::IntegratorForce::TIME_STEP_DEFAULT
static const double TIME_STEP_DEFAULT
Definition: integrator-force.h:59
dynamicgraph::sot::IntegratorForce::massSIN
dg::SignalPtr< dynamicgraph::Matrix, sigtime_t > massSIN
Definition: integrator-force.h:77
dynamicgraph::sot::IntegratorForce::IntegratorForce
IntegratorForce(const std::string &name)
Definition: integrator-force.cpp:21
dynamicgraph::sot::IntegratorForce::timeStep
double timeStep
Definition: integrator-force.h:58
res
res
sotDEBUGOUT
#define sotDEBUGOUT(level)
sotDEBUGIN
#define sotDEBUGIN(level)
dynamicgraph::Vector
Eigen::VectorXd Vector
dynamicgraph::sot::IntegratorForce::velocityDerivativeSOUT
dg::SignalTimeDependent< dynamicgraph::Vector, sigtime_t > velocityDerivativeSOUT
Definition: integrator-force.h:74
integrator-force.h
dynamicgraph::sot::IntegratorForce::computeIntegral
dynamicgraph::Vector & computeIntegral(dynamicgraph::Vector &res, const sigtime_t &time)
Definition: integrator-force.cpp:106
dynamicgraph::sot::IntegratorForce::computeMassInverse
dynamicgraph::Matrix & computeMassInverse(dynamicgraph::Matrix &res, const sigtime_t &time)
Definition: integrator-force.cpp:124
dynamicgraph::sot
dynamicgraph::Entity::signalRegistration
void signalRegistration(const SignalArray< int > &signals)
dynamicgraph::sot::IntegratorForce::~IntegratorForce
virtual ~IntegratorForce(void)
Definition: integrator-force.cpp:64
dynamicgraph::sot::IntegratorForce::velocityPrecSIN
dg::SignalPtr< dynamicgraph::Vector, sigtime_t > velocityPrecSIN
Definition: integrator-force.h:72
dynamicgraph::sot::IntegratorForce
Definition: integrator-force.h:52
dynamicgraph::sot::IntegratorForce::forceSIN
dg::SignalPtr< dynamicgraph::Vector, sigtime_t > forceSIN
Definition: integrator-force.h:66
dynamicgraph::sot::IntegratorForce::massInverseSIN
dg::SignalPtr< dynamicgraph::Matrix, sigtime_t > massInverseSIN
Definition: integrator-force.h:67
compile.name
name
Definition: compile.py:22
dynamicgraph::sot::IntegratorForce::velocitySOUT
dg::SignalTimeDependent< dynamicgraph::Vector, sigtime_t > velocitySOUT
Definition: integrator-force.h:75
dynamicgraph::sot::DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN
DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(DoubleConstant, "DoubleConstant")
sotDEBUG
#define sotDEBUG(level)


sot-dynamic-pinocchio
Author(s): Olivier Stasse
autogenerated on Fri Jul 28 2023 02:10:01