sot-talos-balance  2.0.5
Collection of dynamic-graph entities aimed at implementing balance control on talos.
dcm-estimator.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019,
3  * LAAS-CNRS
4  * François Bailly,
5  *
6  * This file is part of sot-talos-balance.
7  * See license file.
8  */
9 
11 
12 #include <dynamic-graph/all-commands.h>
13 #include <dynamic-graph/factory.h>
14 
15 #include <sot/core/debug.hh>
16 #include <sot/core/stop-watch.hh>
17 
18 #include "pinocchio/algorithm/center-of-mass.hpp"
19 #include "pinocchio/algorithm/frames.hpp"
20 
21 namespace dynamicgraph {
22 namespace sot {
23 namespace talos_balance {
24 namespace dg = ::dynamicgraph;
25 using namespace dg;
26 using namespace dg::command;
27 using namespace std;
28 using namespace pinocchio;
29 using boost::math::normal; // typedef provides default type is double.
30 // Size to be aligned "-------------------------------------------------------"
31 
32 #define PROFILE_BASE_POSITION_ESTIMATION "base-est position estimation"
33 #define PROFILE_BASE_VELOCITY_ESTIMATION "base-est velocity estimation"
34 #define PROFILE_BASE_KINEMATICS_COMPUTATION "base-est kinematics computation"
35 
36 #define INPUT_SIGNALS m_qSIN << m_vSIN
37 #define OUTPUT_SIGNALS m_cSOUT << m_dcSOUT
38 
41 typedef DcmEstimator EntityClassName;
42 /* --- DG FACTORY ---------------------------------------------------- */
43 DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(DcmEstimator, "DcmEstimator");
44 /* ------------------------------------------------------------------- */
45 /* --- CONSTRUCTION -------------------------------------------------- */
46 /* ------------------------------------------------------------------- */
47 DcmEstimator::DcmEstimator(const std::string& name)
48  : Entity(name),
49  CONSTRUCT_SIGNAL_IN(q, dynamicgraph::Vector),
50  CONSTRUCT_SIGNAL_IN(v, dynamicgraph::Vector),
51  CONSTRUCT_SIGNAL_OUT(c, dynamicgraph::Vector, m_dcSOUT),
52  CONSTRUCT_SIGNAL_OUT(dc, dynamicgraph::Vector, m_qSIN << m_vSIN),
53  m_data(pinocchio::Model()) {
54  Entity::signalRegistration(INPUT_SIGNALS << OUTPUT_SIGNALS);
55 
56  /* Commands. */
57  addCommand("init",
58  makeCommandVoid2(
59  *this, &DcmEstimator::init,
60  docCommandVoid2("Initialize the entity.", "time step (double)",
61  "URDF file path (string)")));
62 }
63 void DcmEstimator::init(const double& dt, const std::string& robotRef) {
64  m_dt = dt;
65  try {
66  // Retrieve m_robot_util informations
67  std::string localName(robotRef);
68  if (isNameInRobotUtil(localName)) {
69  m_robot_util = getRobotUtil(localName);
70  std::cerr << "m_robot_util:" << m_robot_util << std::endl;
71  } else {
72  SEND_MSG("You should have a robotUtil pointer initialized before",
73  MSG_TYPE_ERROR);
74  return;
75  }
76 
77  pinocchio::urdf::buildModel(m_robot_util->m_urdf_filename,
78  pinocchio::JointModelFreeFlyer(), m_model);
79  } catch (const std::exception& e) {
80  std::cout << e.what();
81  SEND_MSG("Init failed: Could load URDF :" + m_robot_util->m_urdf_filename,
82  MSG_TYPE_ERROR);
83  return;
84  }
85  m_data = pinocchio::Data(m_model);
86  m_initSucceeded = true;
87 }
88 
89 /* ------------------------------------------------------------------- */
90 /* --- SIGNALS ------------------------------------------------------- */
91 /* ------------------------------------------------------------------- */
92 
94  if (!m_initSucceeded) {
95  SEND_WARNING_STREAM_MSG("Cannot compute signal com before initialization!");
96  return s;
97  }
98  if (s.size() != 3) s.resize(3);
99  const Vector& dc = m_dcSOUT(iter);
100  (void)dc;
101  s = m_data.com[0];
102  return s;
103 }
104 
106  if (!m_initSucceeded) {
107  SEND_WARNING_STREAM_MSG(
108  "Cannot compute signal dcom before initialization!");
109  return s;
110  }
111  if (s.size() != 3) s.resize(3);
112  const Vector& q = m_qSIN(iter);
113  const Vector& v = m_vSIN(iter);
114  pinocchio::centerOfMass(m_model, m_data, q, v);
115  s = m_data.vcom[0];
116  return s;
117 }
118 
119 void DcmEstimator::display(std::ostream& os) const {
120  os << "DcmEstimator " << getName();
121  try {
122  getProfiler().report_all(3, os);
123  } catch (ExceptionSignal e) {
124  }
125 }
126 } // namespace talos_balance
127 } // namespace sot
128 } // namespace dynamicgraph
dynamicgraph::sot::talos_balance::DcmEstimator::DcmEstimator
EIGEN_MAKE_ALIGNED_OPERATOR_NEW DcmEstimator(const std::string &name)
Definition: dcm-estimator.cpp:47
sot_talos_balance.test.appli_admittance_end_effector.q
list q
Definition: appli_admittance_end_effector.py:30
INPUT_SIGNALS
#define INPUT_SIGNALS
Definition: dcm-estimator.cpp:36
sot_talos_balance.test.appli_admittance_end_effector.sot
sot
Definition: appli_admittance_end_effector.py:117
dynamicgraph::sot::talos_balance::DcmEstimator::m_initSucceeded
bool m_initSucceeded
Definition: dcm-estimator.hh:87
dynamicgraph
Definition: treeview.dox:24
OUTPUT_SIGNALS
#define OUTPUT_SIGNALS
Definition: dcm-estimator.cpp:37
dynamicgraph::sot::talos_balance::DcmEstimator::init
void init(const double &dt, const std::string &urdfFile)
Definition: dcm-estimator.cpp:63
dynamicgraph::sot::talos_balance::DEFINE_SIGNAL_OUT_FUNCTION
DEFINE_SIGNAL_OUT_FUNCTION(dq, dynamicgraph::Vector)
Definition: admittance-controller-end-effector.cpp:210
dynamicgraph::sot::talos_balance::math::Vector
Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > Vector
Definition: fwd.hh:36
sot_talos_balance.test.appli_admittance_single_joint.dt
dt
Definition: appli_admittance_single_joint.py:17
dynamicgraph::sot::talos_balance::DcmEstimator::m_dt
double m_dt
robot velocities according to pinocchio convention
Definition: dcm-estimator.hh:94
dynamicgraph::sot::talos_balance::DcmEstimator::display
virtual void display(std::ostream &os) const
Definition: dcm-estimator.cpp:119
dynamicgraph::sot::talos_balance::DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN
DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(AdmittanceControllerEndEffector, "AdmittanceControllerEndEffector")
sot_talos_balance.test.test_base_estimator.c
c
Definition: test_base_estimator.py:23
dynamicgraph::sot::talos_balance::DcmEstimator::m_model
pinocchio::Model m_model
sampling time step
Definition: dcm-estimator.hh:95
dynamicgraph::sot::talos_balance::EntityClassName
AdmittanceControllerEndEffector EntityClassName
Definition: admittance-controller-end-effector.cpp:46
dcm-estimator.hh
dynamicgraph::sot::talos_balance::DcmEstimator::m_robot_util
RobotUtilShrPtr m_robot_util
true if the entity has been successfully initialized
Definition: dcm-estimator.hh:88
sot_talos_balance.test.appli_dcm_zmp_control.name
name
Definition: appli_dcm_zmp_control.py:298
dynamicgraph::sot::talos_balance::DcmEstimator::m_data
pinocchio::Data m_data
Definition: dcm-estimator.hh:89