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_parsers_graph_model_configuration_converter_hpp__
6#define __pinocchio_parsers_graph_model_configuration_converter_hpp__
7
8#include "pinocchio/parsers/graph/fwd.hpp"
9
10#include "pinocchio/multibody/model.hpp"
11
12#include "pinocchio/parsers/graph/model-graph.hpp"
13
14#include <Eigen/Core>
15
16#include <vector>
17
18namespace pinocchio
19{
20
21 namespace graph
22 {
23
24 namespace internal
25 {
26 struct ConfigurationMapping
27 {
28 int idx_qs_source;
29 int idx_qs_target;
30 int nq;
31 };
32
33 struct TangentMapping
34 {
35 int idx_vs_source;
36 int idx_vs_target;
37 int nv;
38 };
39
40 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
41 struct JointMapping
42 {
43 typedef JointCollectionTpl<Scalar, Options> JointCollection;
44 typedef typename JointCollection::JointModelVariant JointModelVariant;
45
46 JointMapping() = default;
47 JointMapping(JointModelVariant joint, bool same_direction)
48 : joint(joint)
49 , direction_sign(same_direction ? Scalar(1.) : Scalar(-1.))
50 , same_direction(same_direction)
51 {
52 }
53
54 JointModelVariant joint;
55 Scalar direction_sign;
56 bool same_direction;
57 };
58 } // namespace internal
59
62 template<typename _Scalar, int _Options, template<typename, int> class JointCollectionTpl>
63 struct ModelConfigurationConverterTpl
64 {
65 typedef _Scalar Scalar;
66 enum
67 {
68 Options = _Options
69 };
70 typedef JointCollectionTpl<Scalar, Options> JointCollection;
71 typedef typename JointCollection::JointModelVariant JointModelVariant;
72
73 typedef internal::ConfigurationMapping ConfigurationMapping;
74 typedef internal::TangentMapping TangentMapping;
75 typedef internal::JointMapping<Scalar, Options, JointCollectionTpl> JointMapping;
76
77 ModelConfigurationConverterTpl() = default;
78 ModelConfigurationConverterTpl(
79 std::vector<ConfigurationMapping> configuration_mapping,
80 std::vector<TangentMapping> tangent_mapping,
81 std::vector<JointMapping> joint_mapping,
82 int source_configuration_size,
83 int source_tangent_size,
84 int target_configuration_size,
85 int target_tangent_size)
86 : _configuration_mapping(configuration_mapping)
87 , _tangent_mapping(tangent_mapping)
88 , _joint_mapping(joint_mapping)
89 , _source_configuration_size(source_configuration_size)
90 , _source_tangent_size(source_tangent_size)
91 , _target_configuration_size(target_configuration_size)
92 , _target_tangent_size(target_tangent_size)
93 {
94 }
95
98 template<typename ConfigVectorType1, typename ConfigVectorType2>
100 const Eigen::MatrixBase<ConfigVectorType1> & q_source,
101 const Eigen::MatrixBase<ConfigVectorType2> & q_target) const;
102
107 template<typename ConfigVectorType, typename TangentVectorType1, typename TangentVectorType2>
109 const Eigen::MatrixBase<ConfigVectorType> & q_source,
110 const Eigen::MatrixBase<TangentVectorType1> & v_source,
111 const Eigen::MatrixBase<TangentVectorType2> & v_target) const;
112
115 std::vector<ConfigurationMapping> _configuration_mapping;
118 std::vector<TangentMapping> _tangent_mapping;
121 std::vector<JointMapping> _joint_mapping;
122 int _source_configuration_size;
123 int _source_tangent_size;
124 int _target_configuration_size;
125 int _target_tangent_size;
126 };
127
130 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
134 const ModelGraphBuildInfo & build_info_source,
135 const ModelGraphBuildInfo & build_info_target);
136
137 } // namespace graph
138} // namespace pinocchio
139
140/* --- Details -------------------------------------------------------------- */
141/* --- Details -------------------------------------------------------------- */
142/* --- Details -------------------------------------------------------------- */
143#include "pinocchio/parsers/graph/model-configuration-converter.hxx"
144
145#endif // ifndef __pinocchio_parsers_graph_model_configuration_converter_hpp__
Main pinocchio namespace.
Definition treeview.dox:11
void convertConfigurationVector(const Eigen::MatrixBase< ConfigVectorType1 > &q_source, const Eigen::MatrixBase< ConfigVectorType2 > &q_target) const
void convertTangentVector(const Eigen::MatrixBase< ConfigVectorType > &q_source, const Eigen::MatrixBase< TangentVectorType1 > &v_source, const Eigen::MatrixBase< TangentVectorType2 > &v_target) const
Contains information about how buildModel walked the ModelGraph to construct a Model....