pinocchio  3.9.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Loading...
Searching...
No Matches
model-configuration-converter.hpp
1//
2// Copyright (c) 2025 INRIA
3//
4
5#ifndef __pinocchio_python_parsers_graph_model_configuration_converter_hpp__
6#define __pinocchio_python_parsers_graph_model_configuration_converter_hpp__
7
8#include "pinocchio/parsers/graph/model-configuration-converter.hpp"
9
10namespace pinocchio
11{
12 namespace graph
13 {
14 namespace python
15 {
16 namespace bp = boost::python;
17
18 template<typename _Scalar, int _Options, template<typename, int> class JointCollectionTpl>
19 struct ModelConfigurationConverterVisitor
20 : public boost::python::def_visitor<
21 ModelConfigurationConverterVisitor<_Scalar, _Options, JointCollectionTpl>>
22 {
23 typedef _Scalar Scalar;
24 enum
25 {
26 Options = _Options
27 };
28 typedef JointCollectionTpl<Scalar, Options> JointCollection;
29 typedef ModelConfigurationConverterTpl<Scalar, Options, JointCollectionTpl>
30 ModelConfigurationConverter;
31
32 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Options> VectorXs;
33
34 static VectorXs convert_configuration_vector_proxy(
35 const ModelConfigurationConverter & converter, const VectorXs & q_source)
36 {
37 VectorXs q_target(VectorXs::Zero(converter._target_configuration_size));
38 converter.convertConfigurationVector(q_source, q_target);
39 return q_target;
40 }
41
42 static VectorXs convert_tangent_vector_proxy(
43 const ModelConfigurationConverter & converter,
44 const VectorXs & q_source,
45 const VectorXs & v_source)
46 {
47 VectorXs v_target(VectorXs::Zero(converter._target_tangent_size));
48 converter.convertTangentVector(q_source, v_source, v_target);
49 return v_target;
50 }
51
52 template<class PyClass>
53 void visit(PyClass & cl) const
54 {
55 cl.def(
56 "convertConfigurationVector",
57 &ModelConfigurationConverter::template convertConfigurationVector<VectorXs, VectorXs>,
58 bp::args("self", "q_source", "q_target"),
59 "Convert q_source configuration vector from source model to q_target configuration "
60 "vector from target model.");
61 cl.def(
62 "convertTangentVector",
63 &ModelConfigurationConverter::template convertTangentVector<
64 VectorXs, VectorXs, VectorXs>,
65 bp::args("self", "q_source", "q_target"),
66 "Convert q_source configuration vector from source model to q_target configuration "
67 "vector from target model.");
68 cl.def(
69 "convertConfigurationVector",
70 &ModelConfigurationConverterVisitor::convert_configuration_vector_proxy,
71 bp::args("self", "q_source"),
72 "Return q_source configuration vector converted to target model.");
73 cl.def(
74 "convertTangentVector",
75 &ModelConfigurationConverterVisitor::convert_tangent_vector_proxy,
76 bp::args("self", "q_source", "v_source"),
77 "Return v_source configuration vector converted to target model.");
78 }
79
80 static void expose()
81 {
82 bp::class_<ModelConfigurationConverter>(
83 "ModelConfigurationConverter",
84 "Convert configuration or tangent vector from two model with different root.",
85 bp::no_init)
86 .def(ModelConfigurationConverterVisitor());
87
88 bp::def("createConverter", createConverter<Scalar, Options, JointCollectionTpl>);
89 }
90 };
91
92 } // namespace python
93 } // namespace graph
94} // namespace pinocchio
95
96#endif // define __pinocchio_python_parsers_graph_model_configuration_converter_hpp__
Main pinocchio namespace.
Definition treeview.dox:11