oscillator.cc
Go to the documentation of this file.
1 //
2 // Copyright (C) 2012 LAAS-CNRS
3 //
4 // Author: Florent Lamiraux,
5 // Mehdi Benallegue <mehdi@benallegue.com>
6 //
7 
9 
10 #include <limits>
11 
12 namespace dynamicgraph {
13 namespace sot {
18 namespace tools {
19 
20 DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(Oscillator, "Oscillator");
21 
22 Oscillator::Oscillator(const std::string name)
23  : Entity(name),
24  angularFrequencySIN_(0, "Oscillator(" + name + ")::input(double)::omega"),
25  magnitudeSIN_(0, "Oscillator(" + name + ")::input(double)::magnitude"),
26  phaseSIN_(0, "Oscillator(" + name + ")::input(double)::phase"),
27  biasSIN_(0, "Oscillator(" + name + ")::input(double)::bias"),
28  soutSOUT_("Oscillator(" + name + ")::output(double)::sout"),
29  vectorSoutSOUT_("Oscillator(" + name + ")::output(vector)::vectorSout"),
30  epsilon_(1e-3),
31  started_(true),
32  continuous_(false),
33  dt_(0.),
34  lastValue_(0.0) {
36  << biasSIN_ << soutSOUT_
37  << vectorSoutSOUT_);
42 
48  soutSOUT_.setFunction(boost::bind(&Oscillator::computeSignal, this, _1, _2));
49  vectorSoutSOUT_.setFunction(
50  boost::bind(&Oscillator::computeVectorSignal, this, _1, _2));
51  soutSOUT_.setNeedUpdateFromAllChildren(true);
53 
54  addCommand(
55  "setTimePeriod",
56  makeDirectSetter(*this, &dt_, docDirectSetter("time period", "double")));
57  addCommand(
58  "getTimePeriod",
59  makeDirectGetter(*this, &dt_, docDirectGetter("time period", "double")));
60 
61  addCommand(
62  "setActivated",
63  makeDirectSetter(*this, &started_, docDirectSetter("activated", "bool")));
64 
65  addCommand(
66  "getActivated",
67  makeDirectGetter(*this, &started_, docDirectGetter("activated", "bool")));
68 
71  addCommand("setEpsilon",
73  *this, &epsilon_,
74  docDirectSetter("ocillator zero-sensitivity", "double")));
75 
76  addCommand("getEpsilon",
78  *this, &epsilon_,
79  docDirectGetter("ocillator zero-sensitivity", "double")));
80 
81  addCommand("setValue",
83  *this, &lastValue_,
84  docDirectSetter("init value of the oscillator", "double")));
85 
86  addCommand("getValue",
88  *this, &lastValue_,
89  docDirectGetter("current value of the oscillator", "double")));
90 
91  addCommand("setContinuous",
93  docDirectSetter("continuous", "bool")));
94 
95  addCommand("getContinuous",
97  docDirectGetter("continuous", "bool")));
98 }
99 
100 double Oscillator::value(double dt, double t, double omega, double phase,
101  double m, double bias) {
102  double tau = dt * t;
103  return m * sin(omega * tau + phase) + bias;
104 }
105 
107  dynamicgraph::Vector& vsout, const sigtime_t& t) {
108  vsout.resize(1);
109  vsout(0) = soutSOUT_.access(t);
110  return vsout;
111 }
112 
113 double& Oscillator::computeSignal(double& sout, const sigtime_t& t) {
114  double eps;
115 
116  if (continuous_)
117  eps = epsilon_;
118  else
119  eps = std::numeric_limits<double>::max();
120 
121  double omega = angularFrequencySIN_.access(t);
122  double m = magnitudeSIN_.access(t);
123  double phase = phaseSIN_.access(t);
124  double bias = biasSIN_.access(t);
125 
126  if (started_) {
127  double current = value(dt_, t, omega, phase, m, bias);
128 
129  if (fabs(lastValue_ - current) < eps)
130  lastValue_ = sout = current;
131  else
132  sout = lastValue_;
133  } else {
134  if (fabs(lastValue_) < eps)
135  lastValue_ = sout = 0;
136  else
137  lastValue_ = sout = value(dt_, t, omega, phase, m, bias);
138  }
139 
140  return sout;
141 }
142 } // namespace tools
143 } // namespace sot
144 } // namespace dynamicgraph
oscillator.hh
m
float m
dynamicgraph::sot::tools::Oscillator::continuous_
bool continuous_
Definition: oscillator.hh:47
dynamicgraph::sot::tools::Oscillator::soutSOUT_
SignalTimeDependent< double, sigtime_t > soutSOUT_
Definition: oscillator.hh:42
dynamicgraph::TimeDependency
dynamicgraph::SignalTimeDependent::access
const T & access(const Time &t1)
dynamicgraph::sot::tools::Oscillator::dt_
double dt_
Definition: oscillator.hh:48
dynamicgraph::SignalPtr::setConstant
virtual void setConstant(const T &t)
dynamicgraph
dynamicgraph::sot::tools::Oscillator::Oscillator
Oscillator(const std::string name)
Definition: oscillator.cc:22
dynamicgraph::Entity
dynamicgraph::sot::tools::Oscillator::computeVectorSignal
dynamicgraph::Vector & computeVectorSignal(dynamicgraph::Vector &vsout, const sigtime_t &t)
Definition: oscillator.cc:106
dynamicgraph::sot::tools::Oscillator::magnitudeSIN_
SignalPtr< double, sigtime_t > magnitudeSIN_
Definition: oscillator.hh:39
dynamicgraph::sot::tools::Oscillator::computeSignal
double & computeSignal(double &sout, const sigtime_t &t)
Definition: oscillator.cc:113
dynamicgraph::sot::tools::Oscillator::started_
bool started_
Definition: oscillator.hh:46
dt
float dt
dynamicgraph::sot::tools::Oscillator::value
double value(double dt, double time, double omega, double phase, double amplitude, double bias)
Definition: oscillator.cc:100
tau
tau
dynamicgraph::command::makeDirectGetter
DirectGetter< E, T > * makeDirectGetter(E &entity, T *ptr, const std::string &docString)
dynamicgraph::SignalPtr::access
virtual const T & access(const Time &t)
dynamicgraph::sot::tools::Oscillator::phaseSIN_
SignalPtr< double, sigtime_t > phaseSIN_
Definition: oscillator.hh:40
dynamicgraph::sot::tools::DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN
DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(CubicInterpolationSE3, "CubicInterpolationSE3")
dynamicgraph::sigtime_t
int64_t sigtime_t
eps
float eps
dynamicgraph::SignalTimeDependent::addDependency
virtual void addDependency(const SignalBase< Time > &signal)
dynamicgraph::sot::tools::Oscillator::vectorSoutSOUT_
SignalTimeDependent< dynamicgraph::Vector, sigtime_t > vectorSoutSOUT_
Definition: oscillator.hh:43
dynamicgraph::command::docDirectSetter
std::string docDirectSetter(const std::string &name, const std::string &type)
dynamicgraph::sot::tools::Oscillator::lastValue_
double lastValue_
Definition: oscillator.hh:49
dynamicgraph::Vector
Eigen::VectorXd Vector
dynamicgraph::sot::tools::Oscillator::angularFrequencySIN_
SignalPtr< double, sigtime_t > angularFrequencySIN_
Definition: oscillator.hh:38
dynamicgraph::sot::tools::Oscillator::epsilon_
double epsilon_
Definition: oscillator.hh:45
dynamicgraph::command::docDirectGetter
std::string docDirectGetter(const std::string &name, const std::string &type)
dynamicgraph::command::makeDirectSetter
DirectSetter< E, T > * makeDirectSetter(E &entity, T *ptr, const std::string &docString)
dynamicgraph::Entity::addCommand
void addCommand(const std::string &name, command::Command *command)
t
Transform3f t
dynamicgraph::sot::tools::Oscillator::biasSIN_
SignalPtr< double, sigtime_t > biasSIN_
Definition: oscillator.hh:41
bias
MotionTpl< Scalar, Options > bias(const JointDataTpl< Scalar, Options, JointCollectionTpl > &jdata)
dynamicgraph::Entity::signalRegistration
void signalRegistration(const SignalArray< sigtime_t > &signals)
compile.name
name
Definition: compile.py:23


sot-tools
Author(s): Mehdi Benallegue, Francois Keith, Florent Lamiraux, Thomas Moulard, Olivier Stasse, Jorrit T'Hooft
autogenerated on Wed Aug 2 2023 02:35:13