pinocchio 4.1.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#pragma once
6
7#include "pinocchio/parsers/graph.hpp"
8
9namespace pinocchio
10{
11 namespace graph
12 {
13 namespace python
14 {
15 namespace bp = boost::python;
16
17 template<typename _Scalar, int _Options, template<typename, int> class JointCollectionTpl>
19 : public boost::python::def_visitor<
20 ModelConfigurationConverterVisitor<_Scalar, _Options, JointCollectionTpl>>
21 {
22 typedef _Scalar Scalar;
23 static constexpr int Options = _Options;
24 typedef JointCollectionTpl<Scalar, Options> JointCollection;
25 typedef ModelConfigurationConverterTpl<Scalar, Options, JointCollectionTpl>
26 ModelConfigurationConverter;
27
28 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Options> VectorXs;
29
30 static VectorXs convert_configuration_vector_proxy(
31 const ModelConfigurationConverter & converter, const VectorXs & q_source)
32 {
33 VectorXs q_target(VectorXs::Zero(converter._target_configuration_size));
34 converter.convertConfigurationVector(q_source, q_target);
35 return q_target;
36 }
37
38 static VectorXs convert_tangent_vector_proxy(
39 const ModelConfigurationConverter & converter,
40 const VectorXs & q_source,
41 const VectorXs & v_source)
42 {
43 VectorXs v_target(VectorXs::Zero(converter._target_tangent_size));
44 converter.convertTangentVector(q_source, v_source, v_target);
45 return v_target;
46 }
47
48 template<class PyClass>
49 void visit(PyClass & cl) const
50 {
51 cl.def(
52 "convertConfigurationVector",
53 &ModelConfigurationConverter::template convertConfigurationVector<VectorXs, VectorXs>,
54 bp::args("self", "q_source", "q_target"),
55 "Convert q_source configuration vector from source model to q_target configuration "
56 "vector from target model.");
57 cl.def(
58 "convertTangentVector",
59 &ModelConfigurationConverter::template convertTangentVector<
60 VectorXs, VectorXs, VectorXs>,
61 bp::args("self", "q_source", "q_target"),
62 "Convert q_source configuration vector from source model to q_target configuration "
63 "vector from target model.");
64 cl.def(
65 "convertConfigurationVector",
66 &ModelConfigurationConverterVisitor::convert_configuration_vector_proxy,
67 bp::args("self", "q_source"),
68 "Return q_source configuration vector converted to target model.");
69 cl.def(
70 "convertTangentVector",
71 &ModelConfigurationConverterVisitor::convert_tangent_vector_proxy,
72 bp::args("self", "q_source", "v_source"),
73 "Return v_source configuration vector converted to target model.");
74 }
75
76 static void expose()
77 {
78 bp::class_<ModelConfigurationConverter>(
79 "ModelConfigurationConverter",
80 "Convert configuration or tangent vector from two model with different root.",
81 bp::no_init)
83
84 bp::def("createConverter", createConverter<Scalar, Options, JointCollectionTpl>);
85 }
86 };
87
88 } // namespace python
89 } // namespace graph
90} // namespace pinocchio
Main pinocchio namespace.
Definition treeview.dox:11