GCC Code Coverage Report


Directory: ./
File: unittest/utils/model-generator.hpp
Date: 2025-04-30 16:14:33
Exec Total Coverage
Lines: 140 142 98.6%
Branches: 221 447 49.4%

Line Branch Exec Source
1 //
2 // Copyright (c) 2015-2020 CNRS
3 // Copyright (c) 2018-2025 INRIA
4 //
5
6 #include "pinocchio/multibody/model.hpp"
7 #include "pinocchio/algorithm/model.hpp"
8 #include "pinocchio/multibody/sample-models.hpp"
9 #include <iostream>
10
11 namespace pinocchio
12 {
13
14 template<typename D>
15 286 void addJointAndBody(
16 Model & model,
17 const JointModelBase<D> & jmodel,
18 const Model::JointIndex parent_id,
19 const SE3 & joint_placement,
20 const std::string & name,
21 const Inertia & Y)
22 {
23 Model::JointIndex idx;
24 typedef typename D::TangentVector_t TV;
25 typedef typename D::ConfigVector_t CV;
26
27
17/34
✓ Branch 1 taken 143 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 143 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 143 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 143 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 143 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 143 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 143 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 143 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 143 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 143 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 143 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 143 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 143 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 143 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 143 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 143 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 143 times.
✗ Branch 50 not taken.
1144 idx = model.addJoint(
28 parent_id, jmodel, joint_placement, name + "_joint", TV::Zero(),
29
2/4
✓ Branch 1 taken 143 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 143 times.
✗ Branch 5 not taken.
858 1e3 * (TV::Random() + TV::Constant(1)), 1e3 * (CV::Random() - CV::Constant(1)),
30
1/2
✓ Branch 1 taken 143 times.
✗ Branch 2 not taken.
286 1e3 * (CV::Random() + CV::Constant(1)));
31
32
1/2
✓ Branch 2 taken 143 times.
✗ Branch 3 not taken.
286 model.appendBodyToJoint(idx, Y, SE3::Identity());
33 286 }
34
35 13 void buildAllJointsModel(Model & model)
36 {
37
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
38
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelFreeFlyer(), model.getJointId("universe"), SE3::Identity(), "freeflyer",
39 13 Inertia::Random());
40
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
41
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelSpherical(), model.getJointId("freeflyer_joint"), SE3::Identity(),
42 13 "spherical", Inertia::Random());
43
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
44
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelPlanar(), model.getJointId("spherical_joint"), SE3::Identity(), "planar",
45 13 Inertia::Random());
46
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
47
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelRX(), model.getJointId("planar_joint"), SE3::Identity(), "rx",
48 13 Inertia::Random());
49
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
50
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelPX(), model.getJointId("rx_joint"), SE3::Identity(), "px",
51 13 Inertia::Random());
52
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
53
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelHX(1.0), model.getJointId("px_joint"), SE3::Identity(), "hx",
54 13 Inertia::Random());
55
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
56
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
26 model, JointModelPrismaticUnaligned(SE3::Vector3(1, 0, 0)), model.getJointId("hx_joint"),
57
1/2
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
39 SE3::Identity(), "pu", Inertia::Random());
58
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
59
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
26 model, JointModelRevoluteUnaligned(SE3::Vector3(0, 0, 1)), model.getJointId("pu_joint"),
60
1/2
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
39 SE3::Identity(), "ru", Inertia::Random());
61
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
62
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
26 model, JointModelHelicalUnaligned(SE3::Vector3(0, 0, 1), 1.0), model.getJointId("ru_joint"),
63
1/2
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
39 SE3::Identity(), "hu", Inertia::Random());
64
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
65
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelSphericalZYX(), model.getJointId("hu_joint"), SE3::Identity(),
66 13 "sphericalZYX", Inertia::Random());
67
4/8
✓ Branch 2 taken 13 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 13 times.
✗ Branch 13 not taken.
65 addJointAndBody(
68
2/4
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13 times.
✗ Branch 5 not taken.
52 model, JointModelTranslation(), model.getJointId("sphericalZYX_joint"), SE3::Identity(),
69 13 "translation", Inertia::Random());
70 13 }
71
72 24 void toFull(
73 const Model & model_full,
74 const Model & model_mimic,
75 const std::vector<pinocchio::JointIndex> & mimicking_ids,
76 const std::vector<double> & ratio,
77 const std::vector<double> & offset,
78 const Eigen::VectorXd & q,
79 Eigen::VectorXd & q_full)
80 {
81
2/2
✓ Branch 0 taken 648 times.
✓ Branch 1 taken 24 times.
672 for (int n = 1; n < model_full.njoints; n++)
82 {
83 648 double joint_ratio = 1.0;
84 648 double joint_offset = 0.0;
85
1/2
✓ Branch 3 taken 648 times.
✗ Branch 4 not taken.
648 auto it = std::find(mimicking_ids.begin(), mimicking_ids.end(), n);
86
2/2
✓ Branch 2 taken 32 times.
✓ Branch 3 taken 616 times.
648 if (it != mimicking_ids.end()) // If n was found
87 {
88
1/2
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
32 joint_ratio = ratio[size_t(std::distance(mimicking_ids.begin(), it))];
89
1/2
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
32 joint_offset = offset[size_t(std::distance(mimicking_ids.begin(), it))];
90 }
91
1/2
✓ Branch 2 taken 648 times.
✗ Branch 3 not taken.
648 model_full.joints[size_t(n)].JointMappedConfigSelector(q_full) =
92
2/4
✓ Branch 2 taken 648 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 648 times.
✗ Branch 6 not taken.
648 joint_ratio * model_mimic.joints[size_t(n)].JointMappedConfigSelector(q)
93
5/10
✓ Branch 2 taken 648 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 648 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 648 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 648 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 648 times.
✗ Branch 15 not taken.
1944 + joint_offset * Eigen::VectorXd::Ones(model_full.joints[size_t(n)].nq());
94 }
95 24 }
96
97 54 void mimicTransformMatrix(
98 const Model & model_full,
99 const Model & model_mimic,
100 const std::vector<pinocchio::JointIndex> & /*mimicked_ids*/,
101 const std::vector<pinocchio::JointIndex> & mimicking_ids,
102 const std::vector<double> & ratios,
103 Eigen::MatrixXd & G)
104 {
105 // Initialize G as a zero matrix
106 54 G.resize(model_full.nv, model_mimic.nv);
107 54 G.setZero();
108 // Set ones on the pseudo-diagonal
109
2/2
✓ Branch 0 taken 1458 times.
✓ Branch 1 taken 54 times.
1512 for (int j = 1; j < model_full.njoints; ++j)
110 {
111
3/4
✓ Branch 4 taken 1458 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1386 times.
✓ Branch 8 taken 72 times.
1458 if (std::find(mimicking_ids.begin(), mimicking_ids.end(), j) == mimicking_ids.end())
112
2/4
✓ Branch 1 taken 1386 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1386 times.
✗ Branch 5 not taken.
4158 G.block(
113
3/6
✓ Branch 2 taken 1386 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1386 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1386 times.
✗ Branch 10 not taken.
1386 model_full.joints[size_t(j)].idx_v(), model_mimic.joints[size_t(j)].idx_v(),
114 2772 model_full.joints[size_t(j)].nv(), model_mimic.joints[size_t(j)].nv())
115
1/2
✓ Branch 1 taken 1386 times.
✗ Branch 2 not taken.
1386 .setIdentity();
116 }
117
118 // Set specific values for mimicked-mimicking joint pairs
119
2/2
✓ Branch 1 taken 72 times.
✓ Branch 2 taken 54 times.
126 for (size_t i = 0; i < mimicking_ids.size(); ++i)
120 {
121 72 G(model_full.idx_vs[mimicking_ids[i]], model_mimic.idx_vs[mimicking_ids[i]]) = ratios[i];
122 }
123 54 }
124
125 class MimicTestCases
126 {
127 public:
128 static const int N_CASES = 6;
129
130 pinocchio::Model model_mimic;
131 pinocchio::Model model_full;
132 std::vector<pinocchio::JointIndex> mimicked_ids;
133 std::vector<pinocchio::JointIndex> mimicking_ids;
134 Eigen::MatrixXd G;
135 std::vector<double> ratios;
136 std::vector<double> offsets;
137
138 54 MimicTestCases(int case_i, bool verbose = false)
139 54 : mimicked_ids()
140 54 , mimicking_ids()
141 54 , ratios()
142
2/4
✓ Branch 2 taken 54 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 54 times.
✗ Branch 6 not taken.
162 , offsets()
143 {
144
1/2
✓ Branch 1 taken 54 times.
✗ Branch 2 not taken.
54 pinocchio::buildModels::humanoidRandom(model_full);
145
2/4
✓ Branch 1 taken 54 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 54 times.
✗ Branch 5 not taken.
54 model_full.lowerPositionLimit.head<3>().fill(-1.);
146
2/4
✓ Branch 1 taken 54 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 54 times.
✗ Branch 5 not taken.
54 model_full.upperPositionLimit.head<3>().fill(1.);
147
148 // Select mimic joints based on test case
149
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 48 times.
54 if (verbose)
150 {
151
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 std::cout << "Mimic test case : ";
152 }
153
6/7
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 9 times.
✓ Branch 2 taken 9 times.
✓ Branch 3 taken 9 times.
✓ Branch 4 taken 9 times.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
54 switch (case_i)
154 {
155 9 case 0:
156
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 if (verbose)
157 {
158
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "Mimicked/mimicking parent/child";
159 }
160
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("rleg1_joint"));
161
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("rleg2_joint"));
162
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(2.5);
163
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(0.75);
164 9 break;
165 9 case 1:
166
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 if (verbose)
167 {
168
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "Spaced mimicked/mimicking";
169 }
170
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("rleg1_joint"));
171
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("rleg4_joint"));
172
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(2.5);
173
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(0.75);
174 9 break;
175 9 case 2:
176
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 if (verbose)
177 {
178
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "Parallel mimic";
179 }
180
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("lleg1_joint"));
181
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("rleg1_joint"));
182
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(2.5);
183
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(0.75);
184 9 break;
185 9 case 3:
186
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 if (verbose)
187 {
188
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "Double mimic, not same mimicked";
189 }
190
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("lleg1_joint"));
191
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("rleg1_joint"));
192
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(2.5);
193
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(0.75);
194
195
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("rarm1_joint"));
196
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("larm1_joint"));
197
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(3.2);
198
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(8);
199 9 break;
200 9 case 4:
201
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 if (verbose)
202 {
203
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "Double mimic, same mimicked";
204 }
205
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("lleg1_joint"));
206
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("rleg1_joint"));
207
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(2.5);
208
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(0.75);
209
210
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("lleg1_joint"));
211
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("lleg2_joint"));
212
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(3.2);
213
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(8);
214 9 break;
215 9 case 5:
216
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 if (verbose)
217 {
218
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::cout << "Mimicking terminal joint";
219 }
220
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicked_ids.push_back(model_full.getJointId("larm5_joint"));
221
3/6
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
9 mimicking_ids.push_back(model_full.getJointId("larm6_joint"));
222
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 ratios.push_back(2.5);
223
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 offsets.push_back(0.75);
224
225 9 break;
226 default:
227 PINOCCHIO_THROW_PRETTY(
228 std::invalid_argument,
229 "No mimic test case number " << case_i << ". Max number " << N_CASES - 1);
230 }
231
232
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 48 times.
54 if (verbose)
233 {
234
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
6 std::cout << std::endl;
235 }
236
237
1/2
✓ Branch 1 taken 54 times.
✗ Branch 2 not taken.
54 buildMimicModel(model_full, mimicked_ids, mimicking_ids, ratios, offsets, model_mimic);
238
1/2
✓ Branch 1 taken 54 times.
✗ Branch 2 not taken.
54 mimicTransformMatrix(model_full, model_mimic, mimicked_ids, mimicking_ids, ratios, G);
239 54 }
240
241 24 void toFull(const Eigen::VectorXd & q, Eigen::VectorXd & q_full) const
242 {
243 24 pinocchio::toFull(model_full, model_mimic, mimicking_ids, ratios, offsets, q, q_full);
244 24 }
245 };
246 } // namespace pinocchio
247