GCC Code Coverage Report


Directory: ./
File: src/tools/motion-period.cpp
Date: 2024-11-13 12:35:17
Exec Total Coverage
Lines: 0 36 0.0%
Branches: 0 28 0.0%

Line Branch Exec Source
1 /*
2 * Copyright 2010,
3 * François Bleibel,
4 * Olivier Stasse,
5 *
6 * CNRS/AIST
7 *
8 */
9
10 /* --------------------------------------------------------------------- */
11 /* --- INCLUDE --------------------------------------------------------- */
12 /* --------------------------------------------------------------------- */
13
14 /* --- SOT --- */
15 #include <dynamic-graph/linear-algebra.h>
16
17 #include <sot/core/debug.hh>
18 #include <sot/core/exception-feature.hh>
19 #include <sot/core/factory.hh>
20 #include <sot/core/motion-period.hh>
21 using namespace std;
22 using namespace dynamicgraph::sot;
23 using namespace dynamicgraph;
24
25 DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(MotionPeriod, "MotionPeriod");
26
27 /* --------------------------------------------------------------------- */
28 /* --- CLASS ----------------------------------------------------------- */
29 /* --------------------------------------------------------------------- */
30
31 MotionPeriod::MotionPeriod(const string &fName)
32 : Entity(fName),
33 motionParams(0),
34 motionSOUT(boost::bind(&MotionPeriod::computeMotion, this, _1, _2),
35 sotNOSIGNAL,
36 "MotionPeriod(" + name + ")::output(vector)::motion") {
37 signalRegistration(motionSOUT);
38 motionSOUT.setNeedUpdateFromAllChildren(true);
39 resize(0);
40 }
41
42 /* --------------------------------------------------------------------- */
43 /* --------------------------------------------------------------------- */
44 /* --------------------------------------------------------------------- */
45
46 dynamicgraph::Vector &MotionPeriod::computeMotion(dynamicgraph::Vector &res,
47 const int &time) {
48 sotDEBUGIN(15);
49
50 res.resize(size);
51 for (unsigned int i = 0; i < size; ++i) {
52 const sotMotionParam &p = motionParams[i];
53 double x = ((((time - p.initPeriod) % p.period) + 0.0) / (p.period + 0.0));
54 res(i) = p.initAmplitude;
55 switch (p.motionType) {
56 case MOTION_CONSTANT: {
57 res(i) += p.amplitude;
58 break;
59 }
60 case MOTION_SIN: {
61 res(i) += p.amplitude * sin(M_PI * 2 * x);
62 break;
63 }
64 case MOTION_COS: {
65 res(i) += p.amplitude * cos(M_PI * 2 * x);
66 break;
67 }
68 // case MOTION_: {res(i)+= p.amplitude; break}
69 }
70 }
71
72 sotDEBUGOUT(15);
73 return res;
74 }
75
76 void MotionPeriod::resize(const unsigned int &_size) {
77 size = _size;
78 motionParams.resize(size);
79 for (unsigned int i = 0; i < size; ++i) {
80 motionParams[i].motionType = MOTION_CONSTANT;
81 motionParams[i].amplitude = 0;
82 motionParams[i].initPeriod = 0;
83 motionParams[i].period = 1;
84 motionParams[i].initAmplitude = 0;
85 }
86 }
87
88 void MotionPeriod::display(std::ostream &os) const {
89 os << "MotionPeriod <" << name << "> ... TODO";
90 }
91
92 #define SOT_PARAMS_CONFIG(ARGname, ARGtype) \
93 else if (cmdLine == #ARGname) { \
94 unsigned int rank; \
95 ARGtype period; \
96 cmdArgs >> rank >> std::ws; \
97 if (rank >= this->size) { \
98 os << "!! Error: size size too large." << std::endl; \
99 } \
100 if (cmdArgs.good()) { \
101 cmdArgs >> period; \
102 motionParams[rank].ARGname = period; \
103 } else { \
104 os << #ARGname << "[" << rank << "] = " << motionParams[rank].ARGname \
105 << std::endl; \
106 } \
107 }
108