tsid  1.8.0
Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio
robot-wrapper.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2018 CNRS
3 //
4 // This file is part of tsid
5 // tsid is free software: you can redistribute it
6 // and/or modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation, either version
8 // 3 of the License, or (at your option) any later version.
9 // tsid 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 GNU
12 // General Lesser Public License for more details. You should have
13 // received a copy of the GNU Lesser General Public License along with
14 // tsid If not, see
15 // <http://www.gnu.org/licenses/>.
16 //
17 
18 #ifndef __tsid_python_robot_wrapper_hpp__
19 #define __tsid_python_robot_wrapper_hpp__
20 
22 
24 
25 namespace tsid {
26 namespace python {
27 namespace bp = boost::python;
28 
29 template <typename Robot>
31  : public boost::python::def_visitor<RobotPythonVisitor<Robot> > {
32  typedef std::vector<std::string> std_vec;
33  typedef Eigen::Matrix<double, 3, Eigen::Dynamic> Matrix3x;
34 
35  template <class PyClass>
36 
37  void visit(PyClass &cl) const {
38  cl
39  .def(bp::init<std::string, std_vec, bool>(
40  (bp::arg("filename"), bp::arg("package_dir"), bp::arg("verbose")),
41  "Default constructor without RootJoint."))
42  .def(bp::init<std::string, std_vec, pinocchio::JointModelVariant &,
43  bool>((bp::arg("filename"), bp::arg("package_dir"),
44  bp::arg("roottype"), bp::arg("verbose")),
45  "Default constructor with RootJoint."))
46  .def(bp::init<pinocchio::Model, bool>(
47  (bp::arg("Pinocchio Model"), bp::arg("verbose")),
48  "Default constructor from pinocchio model without RootJoint."))
49  .def(bp::init<pinocchio::Model, robots::RobotWrapper::RootJointType,
50  bool>(
51  (bp::arg("Pinocchio Model"), bp::arg("rootJoint"),
52  bp::arg("verbose")),
53  "Default constructor from pinocchio model with RootJoint."))
54  .def("__init__",
55  bp::make_constructor(RobotPythonVisitor<Robot>::makeClass))
56  .add_property("nq", &Robot::nq)
57  .add_property("nv", &Robot::nv)
58  .add_property("na", &Robot::na)
59  .add_property("nq_actuated", &Robot::nq_actuated)
60  .add_property("is_fixed_base", &Robot::is_fixed_base)
61 
62  .def("model", &RobotPythonVisitor::model)
63  .def("data", &RobotPythonVisitor::data)
64 
65  .add_property("rotor_inertias", &RobotPythonVisitor::rotor_inertias)
66  .add_property("gear_ratios", &RobotPythonVisitor::gear_ratios)
67  .def("set_rotor_inertias", &RobotPythonVisitor::set_rotor_inertias,
68  bp::arg("inertia vector"))
69  .def("set_gear_ratios", &RobotPythonVisitor::set_gear_ratios,
70  bp::arg("gear ratio vector"))
71 
72  .def("computeAllTerms", &RobotPythonVisitor::computeAllTerms,
73  bp::args("data", "q", "v"), "compute all dynamics")
74  .def("com", &RobotPythonVisitor::com, bp::arg("data"))
75  .def("com_vel", &RobotPythonVisitor::com_vel, bp::arg("data"))
76  .def("com_acc", &RobotPythonVisitor::com_acc, bp::arg("data"))
77  .def("Jcom", &RobotPythonVisitor::Jcom, bp::arg("data"))
78  .def("mass", &RobotPythonVisitor::mass, bp::arg("data"))
79  .def("nonLinearEffect", &RobotPythonVisitor::nonLinearEffects,
80  bp::arg("data"))
81  .def("position", &RobotPythonVisitor::position,
82  bp::args("data", "index"))
83  .def("velocity", &RobotPythonVisitor::velocity,
84  bp::args("data", "index"))
85  .def("acceleration", &RobotPythonVisitor::acceleration,
86  bp::args("data", "index"))
87 
88  .def("framePosition", &RobotPythonVisitor::framePosition,
89  bp::args("data", "index"))
90  .def("frameVelocity", &RobotPythonVisitor::frameVelocity,
91  bp::args("data", "index"))
92  .def("frameAcceleration", &RobotPythonVisitor::frameAcceleration,
93  bp::args("data", "index"))
94  .def("frameClassicAcceleration",
96  bp::args("data", "index"))
97  .def("frameVelocityWorldOriented",
99  bp::args("data", "index"))
100  .def("frameAccelerationWorldOriented",
102  bp::args("data", "index"))
103  .def("frameClassicAccelerationWorldOriented",
105  bp::args("data", "index"))
106  .def("angularMomentumTimeVariation",
108  .def("setGravity", &RobotPythonVisitor::setGravity, bp::arg("gravity"));
109  }
110 
111  static boost::shared_ptr<Robot> makeClass(
112  const std::string &filename, const std::vector<std::string> &stdvec,
113  bp::object &bpObject, bool verbose) {
114  pinocchio::JointModelFreeFlyer root_joint =
115  bp::extract<pinocchio::JointModelFreeFlyer>(bpObject)();
116  boost::shared_ptr<Robot> p(
117  new tsid::robots::RobotWrapper(filename, stdvec, root_joint, verbose));
118  return p;
119  }
120 
121  static pinocchio::Model model(const Robot &self) { return self.model(); }
122  static pinocchio::Data data(const Robot &self) {
123  pinocchio::Data data(self.model());
124  return data;
125  }
126  static Eigen::VectorXd rotor_inertias(const Robot &self) {
127  return self.rotor_inertias();
128  }
129  static Eigen::VectorXd gear_ratios(const Robot &self) {
130  return self.gear_ratios();
131  }
132  static bool set_rotor_inertias(Robot &self,
133  const Eigen::VectorXd &rotor_inertias) {
134  return self.rotor_inertias(rotor_inertias);
135  }
136  static bool set_gear_ratios(Robot &self, const Eigen::VectorXd &gear_ratios) {
137  return self.gear_ratios(gear_ratios);
138  }
139 
140  static Eigen::Vector3d com(const Robot &self, const pinocchio::Data &data) {
141  return self.com(data);
142  }
143  static Eigen::Vector3d com_vel(const Robot &self,
144  const pinocchio::Data &data) {
145  return self.com_vel(data);
146  }
147  static Eigen::Vector3d com_acc(const Robot &self,
148  const pinocchio::Data &data) {
149  return self.com_acc(data);
150  }
151  static Matrix3x Jcom(const Robot &self, const pinocchio::Data &data) {
152  return self.Jcom(data);
153  }
154  static void computeAllTerms(const Robot &self, pinocchio::Data &data,
155  const Eigen::VectorXd &q,
156  const Eigen::VectorXd &v) {
157  self.computeAllTerms(data, q, v);
158  }
159  static Eigen::MatrixXd mass(Robot &self, pinocchio::Data &data) {
160  return self.mass(data);
161  }
162  static Eigen::VectorXd nonLinearEffects(const Robot &self,
163  const pinocchio::Data &data) {
164  return self.nonLinearEffects(data);
165  }
166  static pinocchio::SE3 position(const Robot &self, const pinocchio::Data &data,
167  const pinocchio::Model::JointIndex &index) {
168  return self.position(data, index);
169  }
170  static pinocchio::Motion velocity(const Robot &self,
171  const pinocchio::Data &data,
172  const pinocchio::Model::JointIndex &index) {
173  return self.velocity(data, index);
174  }
175  static pinocchio::Motion acceleration(
176  const Robot &self, const pinocchio::Data &data,
177  const pinocchio::Model::JointIndex &index) {
178  return self.acceleration(data, index);
179  }
181  const Robot &self, const pinocchio::Data &data,
182  const pinocchio::Model::FrameIndex &index) {
183  return self.framePosition(data, index);
184  }
185  static pinocchio::Motion frameVelocity(
186  const Robot &self, const pinocchio::Data &data,
187  const pinocchio::Model::FrameIndex &index) {
188  return self.frameVelocity(data, index);
189  }
190  static pinocchio::Motion frameAcceleration(
191  const Robot &self, const pinocchio::Data &data,
192  const pinocchio::Model::FrameIndex &index) {
193  return self.frameAcceleration(data, index);
194  }
195  static pinocchio::Motion frameClassicAcceleration(
196  const Robot &self, const pinocchio::Data &data,
197  const pinocchio::Model::FrameIndex &index) {
198  return self.frameClassicAcceleration(data, index);
199  }
200  static pinocchio::Motion frameVelocityWorldOriented(
201  const Robot &self, const pinocchio::Data &data,
202  const pinocchio::Model::FrameIndex &index) {
203  return self.frameVelocityWorldOriented(data, index);
204  }
205  static pinocchio::Motion frameAccelerationWorldOriented(
206  const Robot &self, const pinocchio::Data &data,
207  const pinocchio::Model::FrameIndex &index) {
208  return self.frameAccelerationWorldOriented(data, index);
209  }
210  static pinocchio::Motion frameClassicAccelerationWorldOriented(
211  const Robot &self, const pinocchio::Data &data,
212  const pinocchio::Model::FrameIndex &index) {
213  return self.frameClassicAccelerationWorldOriented(data, index);
214  }
215  static Eigen::Vector3d angularMomentumTimeVariation(
216  const Robot &self, const pinocchio::Data &data) {
217  return self.angularMomentumTimeVariation(data);
218  }
219  static void setGravity(Robot &self, const pinocchio::Motion &gravity) {
220  return self.setGravity(gravity);
221  }
222  static void expose(const std::string &class_name) {
223  std::string doc = "Robot Wrapper info.";
224  bp::class_<Robot>(class_name.c_str(), doc.c_str(), bp::no_init)
226  ;
227  bp::enum_<robots::RobotWrapper::RootJointType>("RootJointType")
228  .value("FIXED_BASE_SYSTEM", robots::RobotWrapper::FIXED_BASE_SYSTEM)
229  .value("FLOATING_BASE_SYSTEM",
231  .export_values();
232  }
233 };
234 } // namespace python
235 } // namespace tsid
236 
237 #endif // ifndef __tsid_python_robot_wrapper_hpp__
Wrapper for a robot based on pinocchio.
Definition: robot-wrapper.hpp:37
@ FLOATING_BASE_SYSTEM
Definition: robot-wrapper.hpp:58
@ FIXED_BASE_SYSTEM
Definition: robot-wrapper.hpp:57
enum tsid::robots::RobotWrapper::e_RootJointType RootJointType
pinocchio::Data Data
Definition: inverse-dynamics-formulation-acc-force.cpp:30
pinocchio::SE3 SE3
Definition: trajectory-base.hpp:31
Definition: constraint-bound.hpp:25
Definition: robot-wrapper.hpp:31
static pinocchio::Motion frameClassicAcceleration(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:195
static pinocchio::SE3 framePosition(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:180
static Eigen::VectorXd nonLinearEffects(const Robot &self, const pinocchio::Data &data)
Definition: robot-wrapper.hpp:162
static boost::shared_ptr< Robot > makeClass(const std::string &filename, const std::vector< std::string > &stdvec, bp::object &bpObject, bool verbose)
Definition: robot-wrapper.hpp:111
static pinocchio::Motion frameClassicAccelerationWorldOriented(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:210
static pinocchio::Motion velocity(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::JointIndex &index)
Definition: robot-wrapper.hpp:170
static Eigen::Vector3d com(const Robot &self, const pinocchio::Data &data)
Definition: robot-wrapper.hpp:140
static pinocchio::Motion acceleration(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::JointIndex &index)
Definition: robot-wrapper.hpp:175
static Eigen::VectorXd rotor_inertias(const Robot &self)
Definition: robot-wrapper.hpp:126
static pinocchio::Motion frameVelocityWorldOriented(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:200
static pinocchio::Motion frameAcceleration(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:190
static pinocchio::Motion frameAccelerationWorldOriented(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:205
static bool set_rotor_inertias(Robot &self, const Eigen::VectorXd &rotor_inertias)
Definition: robot-wrapper.hpp:132
static bool set_gear_ratios(Robot &self, const Eigen::VectorXd &gear_ratios)
Definition: robot-wrapper.hpp:136
static Eigen::Vector3d com_vel(const Robot &self, const pinocchio::Data &data)
Definition: robot-wrapper.hpp:143
static Matrix3x Jcom(const Robot &self, const pinocchio::Data &data)
Definition: robot-wrapper.hpp:151
static Eigen::VectorXd gear_ratios(const Robot &self)
Definition: robot-wrapper.hpp:129
static Eigen::MatrixXd mass(Robot &self, pinocchio::Data &data)
Definition: robot-wrapper.hpp:159
static pinocchio::Motion frameVelocity(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition: robot-wrapper.hpp:185
Eigen::Matrix< double, 3, Eigen::Dynamic > Matrix3x
Definition: robot-wrapper.hpp:33
static Eigen::Vector3d angularMomentumTimeVariation(const Robot &self, const pinocchio::Data &data)
Definition: robot-wrapper.hpp:215
static void computeAllTerms(const Robot &self, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
Definition: robot-wrapper.hpp:154
static pinocchio::Data data(const Robot &self)
Definition: robot-wrapper.hpp:122
static Eigen::Vector3d com_acc(const Robot &self, const pinocchio::Data &data)
Definition: robot-wrapper.hpp:147
static pinocchio::Model model(const Robot &self)
Definition: robot-wrapper.hpp:121
static void expose(const std::string &class_name)
Definition: robot-wrapper.hpp:222
std::vector< std::string > std_vec
Definition: robot-wrapper.hpp:32
void visit(PyClass &cl) const
Definition: robot-wrapper.hpp:37
static void setGravity(Robot &self, const pinocchio::Motion &gravity)
Definition: robot-wrapper.hpp:219
static pinocchio::SE3 position(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::JointIndex &index)
Definition: robot-wrapper.hpp:166