sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
coupled-admittance-controller.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2018, Gepetto team, LAAS-CNRS
3  *
4  * This file is part of sot-talos-balance.
5  * sot-talos-balance is free software: you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public License
7  * as published by the Free Software Foundation, either version 3 of
8  * the License, or (at your option) any later version.
9  * sot-talos-balance is distributed in the hope that it will be
10  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
11  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU Lesser General Public License for more details. You should
13  * have received a copy of the GNU Lesser General Public License along
14  * with sot-talos-balance. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
18 
19 #include <dynamic-graph/all-commands.h>
20 #include <dynamic-graph/command-bind.h>
21 #include <dynamic-graph/factory.h>
22 
23 #include <sot/core/debug.hh>
24 #include <sot/core/stop-watch.hh>
25 
26 namespace dynamicgraph {
27 namespace sot {
28 namespace talos_balance {
29 namespace dg = ::dynamicgraph;
30 using namespace dg;
31 using namespace dg::command;
32 
33 // Size to be aligned "-------------------------------------------------------"
34 
35 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUSUM_COMPUTATION \
36  "CoupledAdmittanceController: tauSum computation "
37 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDIFF_COMPUTATION \
38  "CoupledAdmittanceController: tauDiff computation "
39 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDESSUM_COMPUTATION \
40  "CoupledAdmittanceController: tauDesSum computation "
41 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDESDIFF_COMPUTATION \
42  "CoupledAdmittanceController: tauDesDiff computation "
43 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFSUM_COMPUTATION \
44  "CoupledAdmittanceController: dqRefSum computation "
45 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFDIFF_COMPUTATION \
46  "CoupledAdmittanceController: dqReDiff computation "
47 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFL_COMPUTATION \
48  "CoupledAdmittanceController: dqRefL computation "
49 #define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFR_COMPUTATION \
50  "CoupledAdmittanceController: dqRefR computation "
51 
52 #define INPUT_SIGNALS \
53  m_kSumSIN << m_kDiffSIN << m_tauLSIN << m_tauRSIN << m_tauDesLSIN \
54  << m_tauDesRSIN
55 
56 #define INNER_SIGNALS \
57  m_tauSumSINNER << m_tauDiffSINNER << m_tauDesSumSINNER << m_tauDesDiffSINNER \
58  << m_dqRefSumSINNER << m_dqRefDiffSINNER
59 
60 #define OUTPUT_SIGNALS m_dqRefLSOUT << m_dqRefRSOUT
61 
64 typedef CoupledAdmittanceController EntityClassName;
65 
66 /* --- DG FACTORY ---------------------------------------------------- */
67 DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(CoupledAdmittanceController,
68  "CoupledAdmittanceController");
69 
70 /* ------------------------------------------------------------------- */
71 /* --- CONSTRUCTION -------------------------------------------------- */
72 /* ------------------------------------------------------------------- */
74  const std::string& name)
75  : Entity(name),
76  CONSTRUCT_SIGNAL_IN(kSum, dynamicgraph::Vector),
77  CONSTRUCT_SIGNAL_IN(kDiff, dynamicgraph::Vector),
78  CONSTRUCT_SIGNAL_IN(tauL, dynamicgraph::Vector),
79  CONSTRUCT_SIGNAL_IN(tauR, dynamicgraph::Vector),
80  CONSTRUCT_SIGNAL_IN(tauDesL, dynamicgraph::Vector),
81  CONSTRUCT_SIGNAL_IN(tauDesR, dynamicgraph::Vector),
82  CONSTRUCT_SIGNAL_INNER(tauSum, dynamicgraph::Vector, INPUT_SIGNALS),
83  CONSTRUCT_SIGNAL_INNER(tauDiff, dynamicgraph::Vector, INPUT_SIGNALS),
84  CONSTRUCT_SIGNAL_INNER(tauDesSum, dynamicgraph::Vector, INPUT_SIGNALS),
85  CONSTRUCT_SIGNAL_INNER(tauDesDiff, dynamicgraph::Vector, INPUT_SIGNALS),
86  CONSTRUCT_SIGNAL_INNER(
87  dqRefSum, dynamicgraph::Vector,
88  INPUT_SIGNALS << m_tauSumSINNER << m_tauDesSumSINNER),
89  CONSTRUCT_SIGNAL_INNER(
90  dqRefDiff, dynamicgraph::Vector,
91  INPUT_SIGNALS << m_tauDiffSINNER << m_tauDesDiffSINNER),
92  CONSTRUCT_SIGNAL_OUT(dqRefL, dynamicgraph::Vector, INNER_SIGNALS),
93  CONSTRUCT_SIGNAL_OUT(dqRefR, dynamicgraph::Vector, INNER_SIGNALS) {
94  Entity::signalRegistration(INPUT_SIGNALS << INNER_SIGNALS << OUTPUT_SIGNALS);
95 }
96 
97 /* ------------------------------------------------------------------- */
98 /* --- SIGNALS ------------------------------------------------------- */
99 /* ------------------------------------------------------------------- */
102 
103  const Vector& tauL = m_tauLSIN(iter);
104  const Vector& tauR = m_tauRSIN(iter);
105 
106  s = tauL + tauR;
107 
109 
110  return s;
111 }
112 
115 
116  const Vector& tauL = m_tauLSIN(iter);
117  const Vector& tauR = m_tauRSIN(iter);
118 
119  s = tauL - tauR;
120 
122 
123  return s;
124 }
125 
127  getProfiler().start(
129 
130  const Vector& tauDesL = m_tauDesLSIN(iter);
131  const Vector& tauDesR = m_tauDesRSIN(iter);
132 
133  s = tauDesL + tauDesR;
134 
135  getProfiler().stop(
137 
138  return s;
139 }
140 
142  getProfiler().start(
144 
145  const Vector& tauDesL = m_tauDesLSIN(iter);
146  const Vector& tauDesR = m_tauDesRSIN(iter);
147 
148  s = tauDesL - tauDesR;
149 
151 
152  return s;
153 }
154 
156  getProfiler().start(
158 
159  const Vector& tau = m_tauSumSINNER(iter);
160  const Vector& tauDes = m_tauDesSumSINNER(iter);
161  const Vector& k = m_kSumSIN(iter);
162 
163  s = k.cwiseProduct(tauDes - tau);
164 
166 
167  return s;
168 }
169 
171  getProfiler().start(
173 
174  const Vector& tau = m_tauDiffSINNER(iter);
175  const Vector& tauDes = m_tauDesDiffSINNER(iter);
176  const Vector& k = m_kDiffSIN(iter);
177 
178  s = k.cwiseProduct(tauDes - tau);
179 
180  getProfiler().stop(
182 
183  return s;
184 }
185 
188 
189  const Vector& dqRefSum = m_dqRefSumSINNER(iter);
190  const Vector& dqRefDiff = m_dqRefDiffSINNER(iter);
191 
192  s = dqRefSum + dqRefDiff;
193 
195 
196  return s;
197 }
198 
201 
202  const Vector& dqRefSum = m_dqRefSumSINNER(iter);
203  const Vector& dqRefDiff = m_dqRefDiffSINNER(iter);
204 
205  s = dqRefSum - dqRefDiff;
206 
208 
209  return s;
210 }
211 
212 /* --- COMMANDS ---------------------------------------------------------- */
213 
214 /* ------------------------------------------------------------------- */
215 /* --- ENTITY -------------------------------------------------------- */
216 /* ------------------------------------------------------------------- */
217 
218 void CoupledAdmittanceController::display(std::ostream& os) const {
219  os << "CoupledAdmittanceController " << getName();
220  try {
221  getProfiler().report_all(3, os);
222  } catch (ExceptionSignal e) {
223  }
224 }
225 } // namespace talos_balance
226 } // namespace sot
227 } // namespace dynamicgraph
sot_talos_balance.test.appli_admittance_end_effector.sot
sot
Definition: appli_admittance_end_effector.py:117
PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDESSUM_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDESSUM_COMPUTATION
Definition: coupled-admittance-controller.cpp:39
dynamicgraph
Definition: treeview.dox:24
PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFL_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFL_COMPUTATION
Definition: coupled-admittance-controller.cpp:47
INPUT_SIGNALS
#define INPUT_SIGNALS
Definition: coupled-admittance-controller.cpp:52
dynamicgraph::sot::talos_balance::CoupledAdmittanceController::display
virtual void display(std::ostream &os) const
Definition: coupled-admittance-controller.cpp:218
dynamicgraph::sot::talos_balance::DEFINE_SIGNAL_OUT_FUNCTION
DEFINE_SIGNAL_OUT_FUNCTION(dq, dynamicgraph::Vector)
Definition: admittance-controller-end-effector.cpp:210
sot_talos_balance.test.test_admittance_single_joint.tau
tau
Definition: test_admittance_single_joint.py:20
PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFR_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFR_COMPUTATION
Definition: coupled-admittance-controller.cpp:49
dynamicgraph::sot::talos_balance::math::Vector
Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > Vector
Definition: fwd.hh:36
OUTPUT_SIGNALS
#define OUTPUT_SIGNALS
Definition: coupled-admittance-controller.cpp:60
INNER_SIGNALS
#define INNER_SIGNALS
Definition: coupled-admittance-controller.cpp:56
dynamicgraph::sot::talos_balance::CoupledAdmittanceController::CoupledAdmittanceController
EIGEN_MAKE_ALIGNED_OPERATOR_NEW CoupledAdmittanceController(const std::string &name)
Definition: coupled-admittance-controller.cpp:73
dynamicgraph::sot::talos_balance::DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN
DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(AdmittanceControllerEndEffector, "AdmittanceControllerEndEffector")
PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDIFF_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDIFF_COMPUTATION
Definition: coupled-admittance-controller.cpp:37
dynamicgraph::sot::talos_balance::DEFINE_SIGNAL_INNER_FUNCTION
DEFINE_SIGNAL_INNER_FUNCTION(w_force, dynamicgraph::Vector)
Definition: admittance-controller-end-effector.cpp:145
PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFDIFF_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFDIFF_COMPUTATION
Definition: coupled-admittance-controller.cpp:45
dynamicgraph::sot::talos_balance::EntityClassName
AdmittanceControllerEndEffector EntityClassName
Definition: admittance-controller-end-effector.cpp:46
sot_talos_balance.test.appli_dcm_zmp_control.name
name
Definition: appli_dcm_zmp_control.py:298
PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDESDIFF_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUDESDIFF_COMPUTATION
Definition: coupled-admittance-controller.cpp:41
PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUSUM_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_TAUSUM_COMPUTATION
Definition: coupled-admittance-controller.cpp:35
coupled-admittance-controller.hh
PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFSUM_COMPUTATION
#define PROFILE_COUPLED_ADMITTANCECONTROLLER_DQREFSUM_COMPUTATION
Definition: coupled-admittance-controller.cpp:43