GCC Code Coverage Report


Directory: ./
File: include/pinocchio/parsers/mjcf/model.hxx
Date: 2025-02-12 21:03:38
Exec Total Coverage
Lines: 41 44 93.2%
Branches: 20 42 47.6%

Line Branch Exec Source
1 //
2 // Copyright (c) 2016-2023 CNRS INRIA
3 //
4
5 #ifndef __pinocchio_parsers_mjcf_model_hxx__
6 #define __pinocchio_parsers_mjcf_model_hxx__
7
8 #include "pinocchio/parsers/mjcf.hpp"
9 #include "pinocchio/parsers/mjcf/mjcf-graph.hpp"
10 #include "pinocchio/multibody/model.hpp"
11 #include "pinocchio/algorithm/contact-info.hpp"
12
13 namespace pinocchio
14 {
15 namespace mjcf
16 {
17 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
18 9 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModel(
19 const std::string & filename,
20 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
21 const bool verbose)
22 {
23 9 return buildModelFromXML(filename, model, verbose);
24 }
25
26 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
27 9 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModelFromXML(
28 const std::string & xmlStream,
29 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
30 const bool verbose)
31 {
32
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) contact_models;
33
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 return buildModelFromXML(xmlStream, model, contact_models, verbose);
34 9 }
35
36 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
37 2 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModel(
38 const std::string & filename,
39 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
40 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) & contact_models,
41 const bool verbose)
42 {
43 2 return buildModelFromXML(filename, model, contact_models, verbose);
44 }
45
46 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
47 11 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModelFromXML(
48 const std::string & xmlStream,
49 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
50 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) & contact_models,
51 const bool verbose)
52 {
53
1/2
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
11 ::pinocchio::urdf::details::UrdfVisitor<Scalar, Options, JointCollectionTpl> visitor(model);
54
55 typedef ::pinocchio::mjcf::details::MjcfGraph MjcfGraph;
56
57
1/2
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
11 MjcfGraph graph(visitor, xmlStream);
58
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
11 if (verbose)
59 visitor.log = &std::cout;
60
61
1/2
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
11 graph.parseGraphFromXML(xmlStream);
62
63 // Use the Mjcf graph to create the model
64
1/2
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
11 graph.parseRootTree();
65
1/2
✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
11 graph.parseContactInformation(model, contact_models);
66
67 11 return model;
68 11 }
69
70 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
71 3 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModel(
72 const std::string & filename,
73 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
74 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
75 const bool verbose)
76 {
77 3 return buildModelFromXML(filename, rootJoint, model, verbose);
78 }
79
80 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
81 3 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModelFromXML(
82 const std::string & xmlStream,
83 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
84 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
85 const bool verbose)
86 {
87
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) contact_models;
88
2/4
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
6 return buildModelFromXML(xmlStream, rootJoint, "root_joint", model, contact_models, verbose);
89 3 }
90
91 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
92 1 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModel(
93 const std::string & filename,
94 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
95 const std::string & rootJointName,
96 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
97 const bool verbose)
98 {
99 1 return buildModelFromXML(filename, rootJoint, rootJointName, model, verbose);
100 }
101
102 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
103 1 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModelFromXML(
104 const std::string & xmlStream,
105 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
106 const std::string & rootJointName,
107 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
108 const bool verbose)
109 {
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) contact_models;
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return buildModelFromXML(xmlStream, rootJoint, rootJointName, model, contact_models, verbose);
112 1 }
113
114 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
115 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModel(
116 const std::string & filename,
117 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
118 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
119 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) & contact_models,
120 const bool verbose)
121 {
122 return buildModelFromXML(filename, rootJoint, model, contact_models, verbose);
123 }
124
125 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
126 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModelFromXML(
127 const std::string & xmlStream,
128 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
129 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
130 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) & contact_models,
131 const bool verbose)
132 {
133 return buildModelFromXML(xmlStream, rootJoint, "root_joint", model, contact_models, verbose);
134 }
135
136 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
137 1 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModel(
138 const std::string & filename,
139 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
140 const std::string & rootJointName,
141 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
142 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) & contact_models,
143 const bool verbose)
144 {
145 1 return buildModelFromXML(filename, rootJoint, rootJointName, model, contact_models, verbose);
146 }
147
148 template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
149 5 ModelTpl<Scalar, Options, JointCollectionTpl> & buildModelFromXML(
150 const std::string & xmlStream,
151 const typename ModelTpl<Scalar, Options, JointCollectionTpl>::JointModel & rootJoint,
152 const std::string & rootJointName,
153 ModelTpl<Scalar, Options, JointCollectionTpl> & model,
154 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) & contact_models,
155 const bool verbose)
156 {
157
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
5 if (rootJointName.empty())
158 throw std::invalid_argument(
159 "rootJoint was given without a name. Please fill the argument rootJointName");
160
161 ::pinocchio::urdf::details::UrdfVisitorWithRootJoint<Scalar, Options, JointCollectionTpl>
162
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 visitor(model, rootJoint, rootJointName);
163
164 typedef ::pinocchio::mjcf::details::MjcfGraph MjcfGraph;
165
166
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 MjcfGraph graph(visitor, xmlStream);
167
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
5 if (verbose)
168 visitor.log = &std::cout;
169
170
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 graph.parseGraphFromXML(xmlStream);
171
172 // Use the Mjcf graph to create the model
173
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 graph.parseRootTree();
174
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 graph.parseContactInformation(model, contact_models);
175
176 5 return model;
177 5 }
178
179 } // namespace mjcf
180 } // namespace pinocchio
181
182 #endif // __pinocchio_parsers_mjcf_model_hxx__
183