GCC Code Coverage Report


Directory: ./
File: src/tools/com-freezer.cpp
Date: 2024-08-13 12:13:25
Exec Total Coverage
Lines: 0 34 0.0%
Branches: 0 42 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 #include <dynamic-graph/factory.h>
11
12 #include <sot/core/com-freezer.hh>
13 #include <sot/core/debug.hh>
14
15 using namespace dynamicgraph;
16 using namespace dynamicgraph::sot;
17
18 DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(CoMFreezer, "CoMFreezer");
19
20 CoMFreezer::CoMFreezer(const std::string &name)
21 : Entity(name),
22 m_lastCoM(3),
23 m_previousPGInProcess(false),
24 m_lastStopTime(-1)
25
26 ,
27 CoMRefSIN(NULL, "CoMFreezer(" + name + ")::input(vector)::CoMRef"),
28 PGInProcessSIN(NULL,
29 "CoMFreezer(" + name + ")::input(bool)::PGInProcess"),
30 freezedCoMSOUT(boost::bind(&CoMFreezer::computeFreezedCoM, this, _1, _2),
31 CoMRefSIN << PGInProcessSIN,
32 "CoMFreezer(" + name + ")::output(vector)::freezedCoM") {
33 sotDEBUGIN(5);
34
35 signalRegistration(CoMRefSIN << PGInProcessSIN << freezedCoMSOUT);
36
37 sotDEBUGOUT(5);
38 }
39
40 CoMFreezer::~CoMFreezer(void) {
41 sotDEBUGIN(5);
42 sotDEBUGOUT(5);
43 return;
44 }
45
46 dynamicgraph::Vector &CoMFreezer::computeFreezedCoM(
47 dynamicgraph::Vector &freezedCoM, const int &time) {
48 sotDEBUGIN(15);
49
50 unsigned PGInProcess = PGInProcessSIN(time);
51 if (PGInProcess) /* CoM unfreezed */
52 {
53 m_lastCoM = CoMRefSIN(time);
54 m_previousPGInProcess = (PGInProcess == 0);
55 } else {
56 if (m_previousPGInProcess) /* pg.inprocess switch from 1 to 0 */
57 {
58 m_lastStopTime = time;
59 m_lastCoM = CoMRefSIN(time);
60 m_previousPGInProcess = (PGInProcess == 0);
61 } else if (time < m_lastStopTime + 200) /* keep updating for 1s */
62 {
63 m_lastCoM = CoMRefSIN(time);
64 }
65 }
66
67 freezedCoM = m_lastCoM;
68
69 sotDEBUGOUT(15);
70
71 if (m_lastStopTime < 0) {
72 m_lastCoM = CoMRefSIN(time);
73 m_lastStopTime = time;
74 freezedCoM = m_lastCoM;
75 return freezedCoM;
76 }
77
78 return m_lastCoM;
79 }
80
81 void CoMFreezer::display(std::ostream &os) const {
82 os << "CoMFreezer " << getName() << "." << std::endl;
83 }
84