tsid 1.9.0
Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio
Loading...
Searching...
No Matches
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
25namespace tsid {
26namespace python {
27namespace bp = boost::python;
28
29template <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(
43 bp::init<std::string, std_vec, pinocchio::JointModelVariant&, bool>(
44 (bp::arg("filename"), bp::arg("package_dir"),
45 bp::arg("roottype"), bp::arg("verbose")),
46 "Default constructor with RootJoint."))
47 .def(bp::init<pinocchio::Model, bool>(
48 (bp::arg("Pinocchio Model"), bp::arg("verbose")),
49 "Default constructor from pinocchio model without RootJoint."))
50 .def(bp::init<pinocchio::Model, robots::RobotWrapper::RootJointType,
51 bool>(
52 (bp::arg("Pinocchio Model"), bp::arg("rootJoint"),
53 bp::arg("verbose")),
54 "Default constructor from pinocchio model with RootJoint."))
55 .def("__init__",
56 bp::make_constructor(RobotPythonVisitor<Robot>::makeClass))
57 .add_property("nq", &Robot::nq)
58 .add_property("nv", &Robot::nv)
59 .add_property("na", &Robot::na)
60 .add_property("nq_actuated", &Robot::nq_actuated)
61 .add_property("is_fixed_base", &Robot::is_fixed_base)
62
63 .def("model", &RobotPythonVisitor::model)
64 .def("data", &RobotPythonVisitor::data)
65
66 .add_property("rotor_inertias", &RobotPythonVisitor::rotor_inertias)
67 .add_property("gear_ratios", &RobotPythonVisitor::gear_ratios)
68 .def("set_rotor_inertias", &RobotPythonVisitor::set_rotor_inertias,
69 bp::arg("inertia vector"))
70 .def("set_gear_ratios", &RobotPythonVisitor::set_gear_ratios,
71 bp::arg("gear ratio vector"))
72
73 .def("computeAllTerms", &RobotPythonVisitor::computeAllTerms,
74 bp::args("data", "q", "v"), "compute all dynamics")
75 .def("com", &RobotPythonVisitor::com, bp::arg("data"))
76 .def("com_vel", &RobotPythonVisitor::com_vel, bp::arg("data"))
77 .def("com_acc", &RobotPythonVisitor::com_acc, bp::arg("data"))
78 .def("Jcom", &RobotPythonVisitor::Jcom, bp::arg("data"))
79 .def("mass", &RobotPythonVisitor::mass, bp::arg("data"))
80 .def("nonLinearEffect", &RobotPythonVisitor::nonLinearEffects,
81 bp::arg("data"))
82 .def("position", &RobotPythonVisitor::position,
83 bp::args("data", "index"))
84 .def("velocity", &RobotPythonVisitor::velocity,
85 bp::args("data", "index"))
86 .def("acceleration", &RobotPythonVisitor::acceleration,
87 bp::args("data", "index"))
88
89 .def("framePosition", &RobotPythonVisitor::framePosition,
90 bp::args("data", "index"))
91 .def("frameVelocity", &RobotPythonVisitor::frameVelocity,
92 bp::args("data", "index"))
93 .def("frameAcceleration", &RobotPythonVisitor::frameAcceleration,
94 bp::args("data", "index"))
95 .def("frameClassicAcceleration",
97 bp::args("data", "index"))
98 .def("frameVelocityWorldOriented",
100 bp::args("data", "index"))
101 .def("frameAccelerationWorldOriented",
103 bp::args("data", "index"))
104 .def("frameClassicAccelerationWorldOriented",
106 bp::args("data", "index"))
107 .def("angularMomentumTimeVariation",
109 .def("setGravity", &RobotPythonVisitor::setGravity, bp::arg("gravity"));
110 }
111
112 static boost::shared_ptr<Robot> makeClass(
113 const std::string& filename, const std::vector<std::string>& stdvec,
114 bp::object& bpObject, bool verbose) {
115 pinocchio::JointModelFreeFlyer root_joint =
116 bp::extract<pinocchio::JointModelFreeFlyer>(bpObject)();
117 boost::shared_ptr<Robot> p(
118 new tsid::robots::RobotWrapper(filename, stdvec, root_joint, verbose));
119 return p;
120 }
121
122 static pinocchio::Model model(const Robot& self) { return self.model(); }
123 static pinocchio::Data data(const Robot& self) {
124 pinocchio::Data data(self.model());
125 return data;
126 }
127 static Eigen::VectorXd rotor_inertias(const Robot& self) {
128 return self.rotor_inertias();
129 }
130 static Eigen::VectorXd gear_ratios(const Robot& self) {
131 return self.gear_ratios();
132 }
133 static bool set_rotor_inertias(Robot& self,
134 const Eigen::VectorXd& rotor_inertias) {
135 return self.rotor_inertias(rotor_inertias);
136 }
137 static bool set_gear_ratios(Robot& self, const Eigen::VectorXd& gear_ratios) {
138 return self.gear_ratios(gear_ratios);
139 }
140
141 static Eigen::Vector3d com(const Robot& self, const pinocchio::Data& data) {
142 return self.com(data);
143 }
144 static Eigen::Vector3d com_vel(const Robot& self,
145 const pinocchio::Data& data) {
146 return self.com_vel(data);
147 }
148 static Eigen::Vector3d com_acc(const Robot& self,
149 const pinocchio::Data& data) {
150 return self.com_acc(data);
151 }
152 static Matrix3x Jcom(const Robot& self, const pinocchio::Data& data) {
153 return self.Jcom(data);
154 }
155 static void computeAllTerms(const Robot& self, pinocchio::Data& data,
156 const Eigen::VectorXd& q,
157 const Eigen::VectorXd& v) {
158 self.computeAllTerms(data, q, v);
159 }
160 static Eigen::MatrixXd mass(Robot& self, pinocchio::Data& data) {
161 return self.mass(data);
162 }
163 static Eigen::VectorXd nonLinearEffects(const Robot& self,
164 const pinocchio::Data& data) {
165 return self.nonLinearEffects(data);
166 }
167 static pinocchio::SE3 position(const Robot& self, const pinocchio::Data& data,
168 const pinocchio::Model::JointIndex& index) {
169 return self.position(data, index);
170 }
171 static pinocchio::Motion velocity(const Robot& self,
172 const pinocchio::Data& data,
173 const pinocchio::Model::JointIndex& index) {
174 return self.velocity(data, index);
175 }
176 static pinocchio::Motion acceleration(
177 const Robot& self, const pinocchio::Data& data,
178 const pinocchio::Model::JointIndex& index) {
179 return self.acceleration(data, index);
180 }
181 static pinocchio::SE3 framePosition(
182 const Robot& self, const pinocchio::Data& data,
183 const pinocchio::Model::FrameIndex& index) {
184 return self.framePosition(data, index);
185 }
186 static pinocchio::Motion frameVelocity(
187 const Robot& self, const pinocchio::Data& data,
188 const pinocchio::Model::FrameIndex& index) {
189 return self.frameVelocity(data, index);
190 }
191 static pinocchio::Motion frameAcceleration(
192 const Robot& self, const pinocchio::Data& data,
193 const pinocchio::Model::FrameIndex& index) {
194 return self.frameAcceleration(data, index);
195 }
196 static pinocchio::Motion frameClassicAcceleration(
197 const Robot& self, const pinocchio::Data& data,
198 const pinocchio::Model::FrameIndex& index) {
199 return self.frameClassicAcceleration(data, index);
200 }
201 static pinocchio::Motion frameVelocityWorldOriented(
202 const Robot& self, const pinocchio::Data& data,
203 const pinocchio::Model::FrameIndex& index) {
204 return self.frameVelocityWorldOriented(data, index);
205 }
206 static pinocchio::Motion frameAccelerationWorldOriented(
207 const Robot& self, const pinocchio::Data& data,
208 const pinocchio::Model::FrameIndex& index) {
209 return self.frameAccelerationWorldOriented(data, index);
210 }
211 static pinocchio::Motion frameClassicAccelerationWorldOriented(
212 const Robot& self, const pinocchio::Data& data,
213 const pinocchio::Model::FrameIndex& index) {
214 return self.frameClassicAccelerationWorldOriented(data, index);
215 }
216 static Eigen::Vector3d angularMomentumTimeVariation(
217 const Robot& self, const pinocchio::Data& data) {
218 return self.angularMomentumTimeVariation(data);
219 }
220 static void setGravity(Robot& self, const pinocchio::Motion& gravity) {
221 return self.setGravity(gravity);
222 }
223 static void expose(const std::string& class_name) {
224 std::string doc = "Robot Wrapper info.";
225 bp::class_<Robot>(class_name.c_str(), doc.c_str(), bp::no_init)
227 ;
228 bp::enum_<robots::RobotWrapper::RootJointType>("RootJointType")
229 .value("FIXED_BASE_SYSTEM", robots::RobotWrapper::FIXED_BASE_SYSTEM)
230 .value("FLOATING_BASE_SYSTEM",
232 .export_values();
233 }
234};
235} // namespace python
236} // namespace tsid
237
238#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
Definition constraint-bound.hpp:26
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:196
static pinocchio::SE3 framePosition(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition robot-wrapper.hpp:181
static Eigen::VectorXd nonLinearEffects(const Robot &self, const pinocchio::Data &data)
Definition robot-wrapper.hpp:163
static pinocchio::Motion frameClassicAccelerationWorldOriented(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition robot-wrapper.hpp:211
static pinocchio::Motion velocity(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::JointIndex &index)
Definition robot-wrapper.hpp:171
static Eigen::Vector3d com(const Robot &self, const pinocchio::Data &data)
Definition robot-wrapper.hpp:141
static pinocchio::Motion acceleration(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::JointIndex &index)
Definition robot-wrapper.hpp:176
static Eigen::VectorXd rotor_inertias(const Robot &self)
Definition robot-wrapper.hpp:127
static pinocchio::Motion frameVelocityWorldOriented(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition robot-wrapper.hpp:201
static pinocchio::Motion frameAcceleration(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition robot-wrapper.hpp:191
static pinocchio::Motion frameAccelerationWorldOriented(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition robot-wrapper.hpp:206
static bool set_rotor_inertias(Robot &self, const Eigen::VectorXd &rotor_inertias)
Definition robot-wrapper.hpp:133
static bool set_gear_ratios(Robot &self, const Eigen::VectorXd &gear_ratios)
Definition robot-wrapper.hpp:137
static Eigen::Vector3d com_vel(const Robot &self, const pinocchio::Data &data)
Definition robot-wrapper.hpp:144
static Matrix3x Jcom(const Robot &self, const pinocchio::Data &data)
Definition robot-wrapper.hpp:152
static Eigen::VectorXd gear_ratios(const Robot &self)
Definition robot-wrapper.hpp:130
static Eigen::MatrixXd mass(Robot &self, pinocchio::Data &data)
Definition robot-wrapper.hpp:160
static pinocchio::Motion frameVelocity(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::FrameIndex &index)
Definition robot-wrapper.hpp:186
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:216
static void computeAllTerms(const Robot &self, pinocchio::Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
Definition robot-wrapper.hpp:155
static pinocchio::Data data(const Robot &self)
Definition robot-wrapper.hpp:123
static Eigen::Vector3d com_acc(const Robot &self, const pinocchio::Data &data)
Definition robot-wrapper.hpp:148
static pinocchio::Model model(const Robot &self)
Definition robot-wrapper.hpp:122
static void expose(const std::string &class_name)
Definition robot-wrapper.hpp:223
std::vector< std::string > std_vec
Definition robot-wrapper.hpp:32
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:112
void visit(PyClass &cl) const
Definition robot-wrapper.hpp:37
static void setGravity(Robot &self, const pinocchio::Motion &gravity)
Definition robot-wrapper.hpp:220
static pinocchio::SE3 position(const Robot &self, const pinocchio::Data &data, const pinocchio::Model::JointIndex &index)
Definition robot-wrapper.hpp:167