GCC Code Coverage Report


Directory: ./
File: unittest/all-joints.cpp
Date: 2024-08-27 18:20:05
Exec Total Coverage
Lines: 0 87 0.0%
Branches: 0 544 0.0%

Line Branch Exec Source
1 //
2 // Copyright(c) 2015-2021 CNRS INRIA
3 // Copyright(c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5
6 #include "pinocchio/math/fwd.hpp"
7 #include "pinocchio/multibody/joint/joints.hpp"
8 #include "pinocchio/algorithm/rnea.hpp"
9 #include "pinocchio/algorithm/aba.hpp"
10 #include "pinocchio/algorithm/crba.hpp"
11 #include "pinocchio/algorithm/jacobian.hpp"
12 #include "pinocchio/algorithm/compute-all-terms.hpp"
13
14 #include <boost/test/unit_test.hpp>
15 #include <iostream>
16
17 using namespace pinocchio;
18
19 template<typename JointModel_>
20 struct init;
21
22 template<typename JointModel_>
23 struct init
24 {
25 static JointModel_ run()
26 {
27 JointModel_ jmodel;
28 jmodel.setIndexes(0, 0, 0);
29 return jmodel;
30 }
31 };
32
33 template<typename Scalar, int Options>
34 struct init<pinocchio::JointModelRevoluteUnalignedTpl<Scalar, Options>>
35 {
36 typedef pinocchio::JointModelRevoluteUnalignedTpl<Scalar, Options> JointModel;
37
38 static JointModel run()
39 {
40 typedef typename JointModel::Vector3 Vector3;
41 JointModel jmodel(Vector3::Random().normalized());
42
43 jmodel.setIndexes(0, 0, 0);
44 return jmodel;
45 }
46 };
47
48 template<typename Scalar, int Options>
49 struct init<pinocchio::JointModelRevoluteUnboundedUnalignedTpl<Scalar, Options>>
50 {
51 typedef pinocchio::JointModelRevoluteUnboundedUnalignedTpl<Scalar, Options> JointModel;
52
53 static JointModel run()
54 {
55 typedef typename JointModel::Vector3 Vector3;
56 JointModel jmodel(Vector3::Random().normalized());
57
58 jmodel.setIndexes(0, 0, 0);
59 return jmodel;
60 }
61 };
62
63 template<typename Scalar, int Options>
64 struct init<pinocchio::JointModelPrismaticUnalignedTpl<Scalar, Options>>
65 {
66 typedef pinocchio::JointModelPrismaticUnalignedTpl<Scalar, Options> JointModel;
67
68 static JointModel run()
69 {
70 typedef typename JointModel::Vector3 Vector3;
71 JointModel jmodel(Vector3::Random().normalized());
72
73 jmodel.setIndexes(0, 0, 0);
74 return jmodel;
75 }
76 };
77
78 template<typename Scalar, int Options, template<typename, int> class JointCollection>
79 struct init<pinocchio::JointModelTpl<Scalar, Options, JointCollection>>
80 {
81 typedef pinocchio::JointModelTpl<Scalar, Options, JointCollection> JointModel;
82
83 static JointModel run()
84 {
85 typedef pinocchio::JointModelRevoluteTpl<Scalar, Options, 0> JointModelRX;
86 JointModel jmodel((JointModelRX()));
87
88 jmodel.setIndexes(0, 0, 0);
89 return jmodel;
90 }
91 };
92
93 template<typename Scalar, int Options, template<typename, int> class JointCollection>
94 struct init<pinocchio::JointModelCompositeTpl<Scalar, Options, JointCollection>>
95 {
96 typedef pinocchio::JointModelCompositeTpl<Scalar, Options, JointCollection> JointModel;
97
98 static JointModel run()
99 {
100 typedef pinocchio::JointModelRevoluteTpl<Scalar, Options, 0> JointModelRX;
101 typedef pinocchio::JointModelRevoluteTpl<Scalar, Options, 1> JointModelRY;
102 JointModel jmodel((JointModelRX()));
103 jmodel.addJoint(JointModelRY());
104
105 jmodel.setIndexes(0, 0, 0);
106 return jmodel;
107 }
108 };
109
110 template<typename JointModel_>
111 struct init<pinocchio::JointModelMimic<JointModel_>>
112 {
113 typedef pinocchio::JointModelMimic<JointModel_> JointModel;
114
115 static JointModel run()
116 {
117 JointModel_ jmodel_ref = init<JointModel_>::run();
118
119 JointModel jmodel(jmodel_ref, 1., 0.);
120 jmodel.setIndexes(0, 0, 0);
121
122 return jmodel;
123 }
124 };
125
126 template<typename Scalar, int Options>
127 struct init<pinocchio::JointModelUniversalTpl<Scalar, Options>>
128 {
129 typedef pinocchio::JointModelUniversalTpl<Scalar, Options> JointModel;
130
131 static JointModel run()
132 {
133 JointModel jmodel(XAxis::vector(), YAxis::vector());
134
135 jmodel.setIndexes(0, 0, 0);
136 return jmodel;
137 }
138 };
139
140 template<typename Scalar, int Options, int axis>
141 struct init<pinocchio::JointModelHelicalTpl<Scalar, Options, axis>>
142 {
143 typedef pinocchio::JointModelHelicalTpl<Scalar, Options, axis> JointModel;
144
145 static JointModel run()
146 {
147 JointModel jmodel(static_cast<Scalar>(0.5));
148
149 jmodel.setIndexes(0, 0, 0);
150 return jmodel;
151 }
152 };
153
154 template<typename Scalar, int Options>
155 struct init<pinocchio::JointModelHelicalUnalignedTpl<Scalar, Options>>
156 {
157 typedef pinocchio::JointModelHelicalUnalignedTpl<Scalar, Options> JointModel;
158
159 static JointModel run()
160 {
161 typedef typename JointModel::Vector3 Vector3;
162 JointModel jmodel(Vector3::Random().normalized());
163
164 jmodel.setIndexes(0, 0, 0);
165 return jmodel;
166 }
167 };
168
169 BOOST_AUTO_TEST_SUITE(joint_model_base_test)
170
171 template<typename TestDerived>
172 struct TestJointModel
173 {
174 template<typename JointModel>
175 void operator()(const pinocchio::JointModelBase<JointModel> &) const
176 {
177 JointModel jmodel = init<JointModel>::run();
178 return TestDerived::test(jmodel);
179 }
180 };
181
182 struct TestJointModelIsEqual : TestJointModel<TestJointModelIsEqual>
183 {
184 template<typename JointModel>
185 static void test(const JointModelBase<JointModel> & jmodel)
186 {
187 JointModel jmodel_copy = jmodel.derived();
188 BOOST_CHECK(jmodel_copy == jmodel.derived());
189
190 JointModel jmodel_any;
191 BOOST_CHECK(jmodel_any != jmodel.derived());
192 BOOST_CHECK(!jmodel_any.isEqual(jmodel.derived()));
193 }
194 };
195
196 struct TestJointModelTransform : TestJointModel<TestJointModelTransform>
197 {
198 template<typename JointModel>
199 static void test(const JointModelBase<JointModel> & jmodel)
200 {
201 typedef typename JointModel::JointDataDerived JointData;
202 JointData jdata = jmodel.createData();
203 Eigen::Matrix<typename JointModel::Scalar, 3, 1> v = jdata.M_accessor().translation();
204 Eigen::Matrix<typename JointModel::Scalar, 3, 3> R = jdata.M_accessor().rotation();
205 }
206 };
207
208 BOOST_AUTO_TEST_CASE(isEqual)
209 {
210 typedef JointCollectionDefault::JointModelVariant JointModelVariant;
211 boost::mpl::for_each<JointModelVariant::types>(TestJointModelIsEqual());
212
213 JointModelRX joint_revolutex;
214 JointModelRY joint_revolutey;
215
216 BOOST_CHECK(joint_revolutex != joint_revolutey);
217
218 JointModel jmodelx(joint_revolutex);
219 jmodelx.setIndexes(0, 0, 0);
220 TestJointModelIsEqual()(JointModel());
221
222 JointModel jmodel_any;
223 BOOST_CHECK(jmodel_any != jmodelx);
224 }
225
226 BOOST_AUTO_TEST_CASE(transform)
227 {
228 typedef JointCollectionDefault::JointModelVariant JointModelVariant;
229 boost::mpl::for_each<JointModelVariant::types>(TestJointModelTransform());
230
231 TestJointModelTransform()(JointModel());
232 }
233
234 struct TestJointModelCast : TestJointModel<TestJointModelCast>
235 {
236 template<typename JointModel>
237 static void test(const JointModelBase<JointModel> & jmodel)
238 {
239 typedef typename JointModel::Scalar Scalar;
240 BOOST_CHECK(jmodel == jmodel);
241 BOOST_CHECK(jmodel.template cast<Scalar>().isEqual(jmodel));
242 BOOST_CHECK(jmodel.template cast<Scalar>() == jmodel);
243 BOOST_CHECK_MESSAGE(
244 jmodel.template cast<long double>().template cast<double>() == jmodel,
245 std::string("Error when casting " + jmodel.shortname() + " from long double to double."));
246 }
247 };
248
249 BOOST_AUTO_TEST_CASE(cast)
250 {
251 typedef JointCollectionDefault::JointModelVariant JointModelVariant;
252 boost::mpl::for_each<JointModelVariant::types>(TestJointModelCast());
253
254 TestJointModelCast()(JointModel());
255 }
256
257 struct TestJointModelDisp : TestJointModel<TestJointModelDisp>
258 {
259 template<typename JointModel>
260 static void test(const JointModelBase<JointModel> & jmodel)
261 {
262 typedef typename JointModel::JointDataDerived JointData;
263
264 std::cout << "shortname: " << jmodel.shortname() << std::endl;
265 std::cout << "classname: " << jmodel.classname() << std::endl;
266 std::cout << "disp:\n" << jmodel << std::endl;
267
268 JointData jdata = jmodel.createData();
269
270 std::cout << "shortname: " << jdata.shortname() << std::endl;
271 std::cout << "classname: " << jdata.classname() << std::endl;
272 std::cout << "disp:\n" << jdata << std::endl;
273 }
274 };
275
276 BOOST_AUTO_TEST_CASE(test_disp)
277 {
278 typedef JointCollectionDefault::JointModelVariant JointModelVariant;
279 boost::mpl::for_each<JointModelVariant::types>(TestJointModelDisp());
280
281 TestJointModelDisp()(JointModel());
282 }
283
284 BOOST_AUTO_TEST_SUITE_END()
285