aligator 0.18.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Loading...
Searching...
No Matches
expose-pinocchio-functions.cpp
Go to the documentation of this file.
1
3#ifdef ALIGATOR_WITH_PINOCCHIO
4
5// Boost.Python 1.74 include manually mpl/vector/vector20.hpp
6// that prevent us to define mpl::list and mpl::vector with
7// the right size.
8// To avoid this issue this header should be included first.
9#include <pinocchio/fwd.hpp>
10
11#include "aligator/fwd.hpp"
13
19
21
22#include <eigenpy/deprecation-policy.hpp>
23
24namespace aligator {
25namespace python {
26using context::ConstMatrixRef;
27using context::ConstVectorRef;
32using eigenpy::deprecated_member;
33
34//
35// FORWARD DECLARATIONS
36//
37
38void exposeFlyHigh();
43
44//
45// DEFINITIONS
46//
47
50 using context::Scalar;
51 using SE3 = pinocchio::SE3Tpl<Scalar>;
52 using Motion = pinocchio::MotionTpl<Scalar>;
53
54 using FrameEquality = FrameEqualityResidualTpl<Scalar>;
55 using FrameEqualityData = FrameEqualityDataTpl<Scalar>;
56
57 using FramePlacement = FramePlacementResidualTpl<Scalar>;
58 using FramePlacementData = FramePlacementDataTpl<Scalar>;
59
60 using FrameVelocity = FrameVelocityResidualTpl<Scalar>;
61 using FrameVelocityData = FrameVelocityDataTpl<Scalar>;
62
63 using FrameTranslation = FrameTranslationResidualTpl<Scalar>;
64 using FrameTranslationData = FrameTranslationDataTpl<Scalar>;
65
66 using FrameCollision = FrameCollisionResidualTpl<Scalar>;
67 using FrameCollisionData = FrameCollisionDataTpl<Scalar>;
68
69 using pinocchio::GeometryModel;
70
71 if (!eigenpy::check_registration<shared_ptr<PinData>>())
72 bp::register_ptr_to_python<shared_ptr<PinData>>();
73
75
76 bp::class_<FrameEquality, bp::bases<UnaryFunction>>(
77 "FrameEqualityResidual", "Frame equality residual function.",
78 bp::init<int, int, const PinModel &, pinocchio::FrameIndex,
79 pinocchio::FrameIndex>(
80 ("self"_a, "ndx", "nu", "model", "frame_id1", "frame_id2")))
81 .def(unary_visitor)
82 .def("getReference", &FrameEquality::getReference, "self"_a,
83 bp::return_internal_reference<>(),
84 "Get the target transform between frame1 and frame2.")
85 .def("setReference", &FrameEquality::setReference, ("self"_a, "p_new"),
86 "Set the target transform between frame1 and frame2.")
87 .add_property("frame1_id", &FrameEquality::getFrame1Id,
88 &FrameEquality::setFrame1Id,
89 "Get the Pinocchio ID of frame1.")
90 .add_property("frame2_id", &FrameEquality::getFrame2Id,
91 &FrameEquality::setFrame2Id,
92 "Get the Pinocchio ID of frame2.");
93
94 bp::register_ptr_to_python<shared_ptr<FrameEqualityData>>();
95
96 bp::class_<FrameEqualityData, bp::bases<context::StageFunctionData>>(
97 "FrameEqualityData", "Data struct for FrameEqualityResidual.",
98 bp::no_init)
99 .def_readonly("RMf2", &FrameEqualityData::RMf2_, "Frame placement error.")
100 .def_readonly("RJlog6f2", &FrameEqualityData::RJlog6f2_)
101 .def_readonly("wJf1", &FrameEqualityData::wJf1_)
102 .def_readonly("wJf2", &FrameEqualityData::wJf2_)
103 .def_readonly("pin_data", &FrameEqualityData::pin_data_,
104 "Pinocchio data struct.");
105
106 bp::class_<FramePlacement, bp::bases<UnaryFunction>>(
107 "FramePlacementResidual", "Frame placement residual function.",
108 bp::init<int, int, const PinModel &, const SE3 &, pinocchio::FrameIndex>(
109 ("self"_a, "ndx", "nu", "model", "p_ref", "id")))
111 .def(unary_visitor)
112 .def("getReference", &FramePlacement::getReference, "self"_a,
113 bp::return_internal_reference<>(), "Get the target frame in SE3.")
114 .def("setReference", &FramePlacement::setReference, ("self"_a, "p_new"),
115 "Set the target frame in SE3.");
116
117 bp::register_ptr_to_python<shared_ptr<FramePlacementData>>();
118
119 bp::class_<FramePlacementData, bp::bases<context::StageFunctionData>>(
120 "FramePlacementData", "Data struct for FramePlacementResidual.",
121 bp::no_init)
122 .def_readonly("rMf", &FramePlacementData::rMf_, "Frame placement error.")
123 .def_readonly("rJf", &FramePlacementData::rJf_)
124 .def_readonly("fJf", &FramePlacementData::fJf_)
125 .def_readonly("pin_data", &FramePlacementData::pin_data_,
126 "Pinocchio data struct.");
127
128 bp::class_<FrameVelocity, bp::bases<UnaryFunction>>(
129 "FrameVelocityResidual", "Frame velocity residual function.",
130 bp::init<int, int, const PinModel &, const Motion &,
131 pinocchio::FrameIndex, pinocchio::ReferenceFrame>(
132 ("self"_a, "ndx", "nu", "model", "v_ref", "id", "reference_frame")))
134 .def(unary_visitor)
135 .def_readonly("pin_model", &FrameVelocity::pin_model_)
136 .def_readwrite("vref", &FrameVelocity::vref_)
137 .def_readwrite("type", &FrameVelocity::type_)
138 .def("getReference", &FrameVelocity::getReference, "self"_a,
139 bp::return_internal_reference<>(),
140 deprecated_member<>("Get the target frame velocity."))
141 .def("setReference", &FrameVelocity::setReference, ("self"_a, "v_new"),
142 deprecated_member<>("Set the target frame velocity."));
143
144 bp::register_ptr_to_python<shared_ptr<FrameVelocityData>>();
145
146 bp::class_<FrameVelocityData, bp::bases<context::StageFunctionData>>(
147 "FrameVelocityData", "Data struct for FrameVelocityResidual.",
148 bp::no_init)
149 .def_readonly("pin_data", &FrameVelocityData::pin_data_,
150 "Pinocchio data struct.");
151
152 bp::class_<FrameTranslation, bp::bases<UnaryFunction>>(
153 "FrameTranslationResidual", "Frame placement residual function.",
154 bp::init<int, int, const PinModel &, const context::Vector3s &,
155 pinocchio::FrameIndex>(
156 ("self"_a, "ndx", "nu", "model", "p_ref", "id")))
158 .def(unary_visitor)
159 .def("getReference", &FrameTranslation::getReference, "self"_a,
160 bp::return_internal_reference<>(),
161 "Get the target frame translation.")
162 .def("setReference", &FrameTranslation::setReference, ("self"_a, "p_new"),
163 "Set the target frame translation.");
164
165 bp::register_ptr_to_python<shared_ptr<FrameTranslationData>>();
166
167 bp::class_<FrameTranslationData, bp::bases<context::StageFunctionData>>(
168 "FrameTranslationData", "Data struct for FrameTranslationResidual.",
169 bp::no_init)
170 .def_readonly("fJf", &FrameTranslationData::fJf_)
171 .def_readonly("pin_data", &FrameTranslationData::pin_data_,
172 "Pinocchio data struct.");
173
174 bp::class_<FrameCollision, bp::bases<UnaryFunction>>(
175 "FrameCollisionResidual", "Frame collision residual function.",
176 bp::init<int, int, const PinModel &, const GeometryModel &,
177 pinocchio::PairIndex>(
178 ("self"_a, "ndx", "nu", "model", "geom_model", "frame_pair_id")))
180 .def(unary_visitor);
181
182 bp::register_ptr_to_python<shared_ptr<FrameCollisionData>>();
183
184 bp::class_<FrameCollisionData, bp::bases<context::StageFunctionData>>(
185 "FrameCollisionData", "Data struct for FrameCollisionResidual.",
186 bp::no_init)
187 .def_readonly("pin_data", &FrameCollisionData::pin_data_,
188 "Pinocchio data struct.")
189 .def_readonly("geom_data", &FrameCollisionData::geom_data,
190 "Geometry data struct.");
191}
192
194 const ConstVectorRef &q,
195 const ConstVectorRef &v,
196 const ConstMatrixRef &actMatrix,
197 const RCMVector &constraint_models,
198 RCDVector &constraint_datas) {
199 long nu = actMatrix.cols();
200 int d = 0;
201 for (size_t k = 0; k < constraint_models.size(); ++k) {
202 d += (int)constraint_models[k].size();
203 }
204 context::VectorXs out(nu + d);
206 model, data, q, v, actMatrix, constraint_models, constraint_datas, out);
207
208 return bp::make_tuple((context::VectorXs)out.head(nu),
209 (context::VectorXs)out.tail(d));
210}
211
218
219 bp::def("underactuatedConstrainedInverseDynamics",
221 ("model"_a, "data", "q", "v", "actMatrix", "constraint_model",
222 "constraint_data"),
223 "Compute the gravity-compensating torque for a pinocchio Model under "
224 "a rigid constraint.");
225}
226} // namespace python
227} // namespace aligator
228
229#endif
Forward declarations.
ManifoldAbstractTpl< Scalar > Manifold
Definition context.hpp:14
pinocchio::ModelTpl< Scalar, Options > PinModel
Definition fwd.hpp:21
StageFunctionTpl< Scalar > StageFunction
Definition context.hpp:17
UnaryFunctionTpl< Scalar > UnaryFunction
Definition context.hpp:18
pinocchio::DataTpl< Scalar, Options > PinData
Definition fwd.hpp:22
The Python bindings.
Definition blk-matrix.hpp:7
PINOCCHIO_ALIGNED_STD_VECTOR(context::RCM) RCMVector
auto underactuatedConstraintInvDyn_proxy(const PinModel &model, PinData &data, const ConstVectorRef &q, const ConstVectorRef &v, const ConstMatrixRef &actMatrix, const RCMVector &constraint_models, RCDVector &constraint_datas)
PINOCCHIO_ALIGNED_STD_VECTOR(context::RCD) RCDVector
const PolymorphicMultiBaseVisitor< UnaryFunction, StageFunction > unary_visitor
Main package namespace.
void underactuatedConstrainedInverseDynamics(const ModelTpl< Scalar, Options > &model, DataTpl< Scalar, Options > &data, const Eigen::MatrixBase< ConfigType > &q, Eigen::MatrixBase< VelType > const &v, const Eigen::MatrixBase< MatrixType > &actMatrix, const pinocchio::container::aligned_vector< RigidConstraintModelTpl< Scalar, Options > > &constraint_models, pinocchio::container::aligned_vector< RigidConstraintDataTpl< Scalar, Options > > &constraint_datas, const Eigen::MatrixBase< OutType > &res_)
Residual enforcing equality between two Pinocchio frames.