aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
expose-pinocchio-functions.cpp
Go to the documentation of this file.
1
3#ifdef ALIGATOR_WITH_PINOCCHIO
4#include "aligator/fwd.hpp"
6
11
13
14namespace aligator {
15namespace python {
16using context::ConstMatrixRef;
17using context::ConstVectorRef;
22
23//
24// FORWARD DECLARATIONS
25//
26
27void exposeFlyHigh();
28
29void exposeContactForce();
30void exposeCenterOfMassFunctions();
31void exposeFrameFunctions();
32void exposeGravityCompensation();
33
34//
35// DEFINITIONS
36//
37
38void exposeFrameFunctions() {
40 using context::Scalar;
41 using SE3 = pinocchio::SE3Tpl<Scalar>;
42 using Motion = pinocchio::MotionTpl<Scalar>;
43
44 using FramePlacement = FramePlacementResidualTpl<Scalar>;
45 using FramePlacementData = FramePlacementDataTpl<Scalar>;
46
47 using FrameVelocity = FrameVelocityResidualTpl<Scalar>;
48 using FrameVelocityData = FrameVelocityDataTpl<Scalar>;
49
50 using FrameTranslation = FrameTranslationResidualTpl<Scalar>;
51 using FrameTranslationData = FrameTranslationDataTpl<Scalar>;
52
53 using FrameCollision = FrameCollisionResidualTpl<Scalar>;
54 using FrameCollisionData = FrameCollisionDataTpl<Scalar>;
55
56 using pinocchio::GeometryModel;
57
58 if (!eigenpy::check_registration<shared_ptr<PinData>>())
59 bp::register_ptr_to_python<shared_ptr<PinData>>();
60
62
63 bp::class_<FramePlacement, bp::bases<UnaryFunction>>(
64 "FramePlacementResidual", "Frame placement residual function.",
65 bp::init<int, int, const PinModel &, const SE3 &, pinocchio::FrameIndex>(
66 ("self"_a, "ndx", "nu", "model", "p_ref", "id")))
68 .def(unary_visitor)
69 .def("getReference", &FramePlacement::getReference, "self"_a,
70 bp::return_internal_reference<>(), "Get the target frame in SE3.")
71 .def("setReference", &FramePlacement::setReference, ("self"_a, "p_new"),
72 "Set the target frame in SE3.");
73
74 bp::register_ptr_to_python<shared_ptr<FramePlacementData>>();
75
76 bp::class_<FramePlacementData, bp::bases<context::StageFunctionData>>(
77 "FramePlacementData", "Data struct for FramePlacementResidual.",
78 bp::no_init)
79 .def_readonly("rMf", &FramePlacementData::rMf_, "Frame placement error.")
80 .def_readonly("rJf", &FramePlacementData::rJf_)
81 .def_readonly("fJf", &FramePlacementData::fJf_)
82 .def_readonly("pin_data", &FramePlacementData::pin_data_,
83 "Pinocchio data struct.");
84
85 bp::class_<FrameVelocity, bp::bases<UnaryFunction>>(
86 "FrameVelocityResidual", "Frame velocity residual function.",
87 bp::init<int, int, const PinModel &, const Motion &,
88 pinocchio::FrameIndex, pinocchio::ReferenceFrame>(
89 ("self"_a, "ndx", "nu", "model", "v_ref", "id", "reference_frame")))
91 .def(unary_visitor)
92 .def("getReference", &FrameVelocity::getReference, "self"_a,
93 bp::return_internal_reference<>(), "Get the target frame velocity.")
94 .def("setReference", &FrameVelocity::setReference, ("self"_a, "v_new"),
95 "Set the target frame velocity.");
96
97 bp::register_ptr_to_python<shared_ptr<FrameVelocityData>>();
98
99 bp::class_<FrameVelocityData, bp::bases<context::StageFunctionData>>(
100 "FrameVelocityData", "Data struct for FrameVelocityResidual.",
101 bp::no_init)
102 .def_readonly("pin_data", &FrameVelocityData::pin_data_,
103 "Pinocchio data struct.");
104
105 bp::class_<FrameTranslation, bp::bases<UnaryFunction>>(
106 "FrameTranslationResidual", "Frame placement residual function.",
107 bp::init<int, int, const PinModel &, const context::Vector3s &,
108 pinocchio::FrameIndex>(
109 ("self"_a, "ndx", "nu", "model", "p_ref", "id")))
111 .def(unary_visitor)
112 .def("getReference", &FrameTranslation::getReference, "self"_a,
113 bp::return_internal_reference<>(),
114 "Get the target frame translation.")
115 .def("setReference", &FrameTranslation::setReference, ("self"_a, "p_new"),
116 "Set the target frame translation.");
117
118 bp::register_ptr_to_python<shared_ptr<FrameTranslationData>>();
119
120 bp::class_<FrameTranslationData, bp::bases<context::StageFunctionData>>(
121 "FrameTranslationData", "Data struct for FrameTranslationResidual.",
122 bp::no_init)
123 .def_readonly("fJf", &FrameTranslationData::fJf_)
124 .def_readonly("pin_data", &FrameTranslationData::pin_data_,
125 "Pinocchio data struct.");
126
127 bp::class_<FrameCollision, bp::bases<UnaryFunction>>(
128 "FrameCollisionResidual", "Frame collision residual function.",
129 bp::init<int, int, const PinModel &, const GeometryModel &,
130 pinocchio::PairIndex>(bp::args("self", "ndx", "nu", "model",
131 "geom_model", "frame_pair_id")))
133 .def(unary_visitor);
134
135 bp::register_ptr_to_python<shared_ptr<FrameCollisionData>>();
136
137 bp::class_<FrameCollisionData, bp::bases<context::StageFunctionData>>(
138 "FrameCollisionData", "Data struct for FrameCollisionResidual.",
139 bp::no_init)
140 .def_readonly("pin_data", &FrameCollisionData::pin_data_,
141 "Pinocchio data struct.")
142 .def_readonly("geom_data", &FrameCollisionData::geom_data,
143 "Geometry data struct.");
144}
145
146auto underactuatedConstraintInvDyn_proxy(
147 const PinModel &model, PinData &data, const ConstVectorRef &q,
148 const ConstVectorRef &v, const ConstMatrixRef &actMatrix,
149 const StdVectorEigenAligned<context::RCM> &constraint_models,
150 StdVectorEigenAligned<context::RCD> &constraint_datas) {
151 long nu = actMatrix.cols();
152 int d = 0;
153 for (size_t k = 0; k < constraint_models.size(); ++k) {
154 d += (int)constraint_models[k].size();
155 }
156 context::VectorXs out(nu + d);
158 model, data, q, v, actMatrix, constraint_models, constraint_datas, out);
159
160 return bp::make_tuple((context::VectorXs)out.head(nu),
161 (context::VectorXs)out.tail(d));
162}
163
164void exposePinocchioFunctions() {
165 exposeFrameFunctions();
166 exposeFlyHigh();
167 exposeContactForce();
168 exposeCenterOfMassFunctions();
169 exposeGravityCompensation();
170
171 bp::def("underactuatedConstrainedInverseDynamics",
172 underactuatedConstraintInvDyn_proxy,
173 ("model"_a, "data", "q", "v", "actMatrix", "constraint_model",
174 "constraint_data"),
175 "Compute the gravity-compensating torque for a pinocchio Model under "
176 "a rigid constraint.");
177}
178} // namespace python
179} // namespace aligator
180
181#endif
Forward declarations.
ManifoldAbstractTpl< Scalar > Manifold
Definition context.hpp:14
pinocchio::ModelTpl< Scalar, Options > PinModel
Definition context.hpp:12
StageFunctionTpl< Scalar > StageFunction
Definition context.hpp:17
UnaryFunctionTpl< Scalar > UnaryFunction
Definition context.hpp:18
pinocchio::DataTpl< Scalar, Options > PinData
Definition context.hpp:13
The Python bindings.
Definition blk-matrix.hpp:5
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 StdVectorEigenAligned< RigidConstraintModelTpl< Scalar, Options > > &constraint_models, StdVectorEigenAligned< RigidConstraintDataTpl< Scalar, Options > > &constraint_datas, const Eigen::MatrixBase< OutType > &res_)