GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: bindings/python/algorithm/expose-com.cpp Lines: 58 80 72.5 %
Date: 2024-01-23 21:41:47 Branches: 48 114 42.1 %

Line Branch Exec Source
1
//
2
// Copyright (c) 2015-2020 CNRS INRIA
3
//
4
5
#include "pinocchio/bindings/python/algorithm/algorithms.hpp"
6
#include "pinocchio/bindings/python/utils/deprecation.hpp"
7
#include "pinocchio/algorithm/center-of-mass.hpp"
8
9
#include <boost/python/overloads.hpp>
10
11
namespace pinocchio
12
{
13
  namespace python
14
  {
15
16
38
    BOOST_PYTHON_FUNCTION_OVERLOADS(jacobianCenterOfMassUpdate_overload,jacobianCenterOfMass,3,4)
17
18
38
    BOOST_PYTHON_FUNCTION_OVERLOADS(jacobianCenterOfMassNoUpdate_overload,jacobianCenterOfMass,2,3)
19
20
    static SE3::Vector3
21
2
    com_0_proxy(const Model& model,
22
                Data & data,
23
                const Eigen::VectorXd & q,
24
                bool computeSubtreeComs = true)
25
    {
26
2
      return centerOfMass(model,data,q,computeSubtreeComs);
27
    }
28
29
    static SE3::Vector3
30
    com_1_proxy(const Model& model,
31
                Data & data,
32
                const Eigen::VectorXd & q,
33
                const Eigen::VectorXd & v,
34
                bool computeSubtreeComs = true)
35
    {
36
      return centerOfMass(model,data,q,v,computeSubtreeComs);
37
    }
38
39
    static SE3::Vector3
40
    com_2_proxy(const Model & model,
41
                Data & data,
42
                const Eigen::VectorXd & q,
43
                const Eigen::VectorXd & v,
44
                const Eigen::VectorXd & a,
45
                bool computeSubtreeComs = true)
46
    {
47
      return centerOfMass(model,data,q,v,a,computeSubtreeComs);
48
    }
49
50
    static const Data::Vector3 &
51
    com_level_proxy(const Model & model,
52
                    Data & data,
53
                    KinematicLevel kinematic_level,
54
                    bool computeSubtreeComs = true)
55
    {
56
      return centerOfMass(model,data,kinematic_level,computeSubtreeComs);
57
    }
58
59
    static void
60
    com_level_proxy_deprecated_signature(const Model & model,
61
                                         Data & data,
62
                                         int kinematic_level,
63
                                         bool computeSubtreeComs = true)
64
    {
65
      centerOfMass(model,data,static_cast<KinematicLevel>(kinematic_level),computeSubtreeComs);
66
    }
67
68
    static const Data::Vector3 &
69
    com_default_proxy(const Model & model,
70
                      Data & data,
71
                      bool computeSubtreeComs = true)
72
    {
73
      return centerOfMass(model,data,computeSubtreeComs);
74
    }
75
76
    static Data::Matrix3x
77
    jacobian_subtree_com_kinematics_proxy(const Model & model,
78
                                          Data & data,
79
                                          const Eigen::VectorXd & q,
80
                                          Model::JointIndex jointId)
81
    {
82
      Data::Matrix3x J(3,model.nv); J.setZero();
83
      jacobianSubtreeCenterOfMass(model, data, q, jointId, J);
84
85
      return J;
86
    }
87
88
    static Data::Matrix3x
89
    jacobian_subtree_com_proxy(const Model & model,
90
                               Data & data,
91
                               Model::JointIndex jointId)
92
    {
93
      Data::Matrix3x J(3,model.nv); J.setZero();
94
      jacobianSubtreeCenterOfMass(model, data, jointId, J);
95
96
      return J;
97
    }
98
99
    static Data::Matrix3x
100
    get_jacobian_subtree_com_proxy(const Model & model,
101
                                   Data & data,
102
                                   Model::JointIndex jointId)
103
    {
104
      Data::Matrix3x J(3,model.nv); J.setZero();
105
      getJacobianSubtreeCenterOfMass(model, data, jointId, J);
106
107
      return J;
108
    }
109
110
42
    BOOST_PYTHON_FUNCTION_OVERLOADS(com_0_overload, com_0_proxy, 3, 4)
111
112
38
    BOOST_PYTHON_FUNCTION_OVERLOADS(com_1_overload, com_1_proxy, 4, 5)
113
114
38
    BOOST_PYTHON_FUNCTION_OVERLOADS(com_2_overload, com_2_proxy, 5, 6)
115
116
38
    BOOST_PYTHON_FUNCTION_OVERLOADS(com_level_overload, com_level_proxy, 3, 4)
117
19
    BOOST_PYTHON_FUNCTION_OVERLOADS(com_level_overload_deprecated_signature, com_level_proxy_deprecated_signature, 3, 4)
118
119
38
    BOOST_PYTHON_FUNCTION_OVERLOADS(com_default_overload, com_default_proxy, 2, 3)
120
121
19
    void exposeCOM()
122
    {
123
      using namespace Eigen;
124
125
19
      bp::def("computeTotalMass",
126
              (double (*)(const Model &))&computeTotalMass<double,0,JointCollectionDefaultTpl>,
127
38
              bp::args("model"),
128
              "Compute the total mass of the model and return it.");
129
130
19
      bp::def("computeTotalMass",
131
              (double (*)(const Model &, Data &))&computeTotalMass<double,0,JointCollectionDefaultTpl>,
132
38
              bp::args("model","data"),
133
              "Compute the total mass of the model, put it in data.mass[0] and return it.");
134
135
19
      bp::def("computeSubtreeMasses",
136
              (void (*)(const Model &, Data &))&computeSubtreeMasses<double,0,JointCollectionDefaultTpl>,
137
38
              bp::args("model","data"),
138
              "Compute the mass of each kinematic subtree and store it in the vector data.mass.");
139
140
19
      bp::def("centerOfMass",
141
              com_0_proxy,
142

19
              com_0_overload(bp::args("model","data",
143
                                      "q",
144
                                      "compute_subtree_coms"),
145
                  "Compute the center of mass, putting the result in Data and return it."
146
                  "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees."
147
38
              )[bp::return_value_policy<bp::return_by_value>()]
148
      );
149
150
19
      bp::def("centerOfMass",
151
              com_1_proxy,
152
19
              com_1_overload(
153
19
                             bp::args("model","data",
154
                                      "q","v",
155
                                      "compute_subtree_coms"),
156
                             "Computes the center of mass position and velocity by storing the result in Data. It returns the center of mass position expressed in the WORLD frame.\n"
157
                             "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees."
158
38
              )[bp::return_value_policy<bp::return_by_value>()]
159
      );
160
161
19
      bp::def("centerOfMass",
162
              com_2_proxy,
163
19
              com_2_overload(
164
19
                             bp::args("model","data",
165
                                      "q","v","a",
166
                                      "compute_subtree_coms"),
167
                             "Computes the center of mass position, velocity and acceleration by storing the result in Data. It returns the center of mass position expressed in the WORLD frame.\n"
168
                             "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees."
169
38
              )[bp::return_value_policy<bp::return_by_value>()]
170
      );
171
172

19
      bp::def("centerOfMass",
173
              com_level_proxy_deprecated_signature,
174
19
              com_level_overload_deprecated_signature(
175
38
                                                      bp::args("Model","Data",
176
                                                               "kinematic_level",
177
                                                               "computeSubtreeComs If true, the algorithm computes also the center of mass of the subtrees"
178
                                                               ),
179
                                                      "Computes the center of mass position, velocity and acceleration of a given model according to the current kinematic values contained in data and the requested kinematic_level.\n"
180
                                                      "If kinematic_level = 0, computes the CoM position, if kinematic_level = 1, also computes the CoM velocity and if kinematic_level = 2, it also computes the CoM acceleration."
181

38
                                                      )[deprecated_function<>()]
182
              );
183
184
19
      bp::def("centerOfMass",
185
              com_level_proxy,
186

19
              com_level_overload(bp::args("model","data",
187
                                          "kinematic_level",
188
                                          "compute_subtree_coms"),
189
                                 "Computes the center of mass position, velocity or acceleration of a given model according to the current kinematic values contained in data and the requested kinematic_level.\n"
190
                                 "If kinematic_level = POSITION, computes the CoM position, if kinematic_level = VELOCITY, also computes the CoM velocity and if kinematic_level = ACCELERATION, it also computes the CoM acceleration.\n"
191
                                 "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees."
192
38
                              )[bp::return_value_policy<bp::return_by_value>()]
193
      );
194
195
19
      bp::def("centerOfMass",
196
              com_default_proxy,
197
19
              com_default_overload(
198
19
                  bp::args("model",
199
                           "data",
200
                           "compute_subtree_coms"),
201
                                   "Computes the center of mass position, velocity and acceleration of a given model according to the current kinematic values contained in data.\n"
202
                                   "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees."
203
38
              )[bp::return_value_policy<bp::return_by_value>()]
204
      );
205
206
19
      bp::def("jacobianCenterOfMass",
207
              (const Data::Matrix3x & (*)(const Model &, Data &, const Eigen::MatrixBase<Eigen::VectorXd> &, bool))&jacobianCenterOfMass<double,0,JointCollectionDefaultTpl,VectorXd>,
208

19
              jacobianCenterOfMassUpdate_overload(bp::args("model",
209
                                                           "data",
210
                                                           "q",
211
                                                           "compute_subtree_coms"),
212
              "Computes the Jacobian of the center of mass, puts the result in Data and return it.\n"
213
                                                  "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees.")[
214
38
              bp::return_value_policy<bp::return_by_value>()]);
215
216
19
      bp::def("jacobianCenterOfMass",
217
              (const Data::Matrix3x & (*)(const Model &, Data &, bool))&jacobianCenterOfMass<double,0,JointCollectionDefaultTpl>,
218

19
              jacobianCenterOfMassNoUpdate_overload(bp::args("model",
219
                                                             "data",
220
                                                             "compute_subtree_coms"),
221
              "Computes the Jacobian of the center of mass, puts the result in Data and return it.\n"
222
                                                    "If compute_subtree_coms is True, the algorithm also computes the center of mass of the subtrees.")[
223
38
              bp::return_value_policy<bp::return_by_value>()]);
224
225
19
      bp::def("jacobianSubtreeCenterOfMass",jacobian_subtree_com_kinematics_proxy,
226
38
              bp::args("model",
227
                       "data",
228
                       "q",
229
                       "subtree_root_joint_id"),
230
              "Computes the Jacobian of the CoM of the given subtree (subtree_root_joint_id) expressed in the WORLD frame, according to the given joint configuration.");
231
19
      bp::def("jacobianSubtreeCoMJacobian",jacobian_subtree_com_kinematics_proxy,
232
38
              bp::args("model",
233
                       "data",
234
                       "q",
235
                       "subtree_root_joint_id"),
236
              "Computes the Jacobian of the CoM of the given subtree expressed in the world frame, according to the given joint configuration.",
237

38
              deprecated_function<>("This function is now deprecated. It has been renamed jacobianSubtreeCenterOfMass."));
238
239
19
      bp::def("jacobianSubtreeCenterOfMass",jacobian_subtree_com_proxy,
240
38
              bp::args("model",
241
                       "data",
242
                       "subtree_root_joint_id"),
243
              "Computes the Jacobian of the CoM of the given subtree (subtree_root_joint_id) expressed in the WORLD frame, according to the given entries in data.");
244
245
19
      bp::def("jacobianSubtreeCoMJacobian",jacobian_subtree_com_proxy,
246
38
              bp::args("model",
247
                       "data",
248
                       "subtree_root_joint_id"),
249
              "Computes the Jacobian of the CoM of the given subtree expressed in the world frame, according to the given entries in data.",
250

38
              deprecated_function<>("This function is now deprecated. It has been renamed jacobianSubtreeCenterOfMass."));
251
252
19
      bp::def("getJacobianSubtreeCenterOfMass",get_jacobian_subtree_com_proxy,
253
38
              bp::args("model",
254
                       "data",
255
                       "subtree_root_joint_id"),
256
              "Get the Jacobian of the CoM of the given subtree expressed in the world frame, according to the given entries in data. It assumes that jacobianCenterOfMass has been called first.");
257
258
19
    }
259
260
  } // namespace python
261
} // namespace pinocchio