Directory: | ./ |
---|---|
File: | tests/tconfiguration.cc |
Date: | 2025-05-04 12:09:19 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 202 | 248 | 81.5% |
Branches: | 907 | 1992 | 45.5% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /// | ||
2 | /// Copyright (c) 2011 CNRS | ||
3 | /// Author: Florent Lamiraux | ||
4 | /// | ||
5 | /// | ||
6 | |||
7 | // Redistribution and use in source and binary forms, with or without | ||
8 | // modification, are permitted provided that the following conditions are | ||
9 | // met: | ||
10 | // | ||
11 | // 1. Redistributions of source code must retain the above copyright | ||
12 | // notice, this list of conditions and the following disclaimer. | ||
13 | // | ||
14 | // 2. Redistributions in binary form must reproduce the above copyright | ||
15 | // notice, this list of conditions and the following disclaimer in the | ||
16 | // documentation and/or other materials provided with the distribution. | ||
17 | // | ||
18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
22 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
23 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
24 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
25 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
26 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
27 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
28 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | ||
29 | // DAMAGE. | ||
30 | |||
31 | // This test | ||
32 | // - builds a robot with various types of joints, | ||
33 | // - randomly samples pairs of configurations, | ||
34 | // - test consistency between hpp::pinocchio::difference and | ||
35 | // hpp::pinocchio::integrate functions. | ||
36 | |||
37 | #define BOOST_TEST_MODULE tdevice | ||
38 | |||
39 | #include <Eigen/Geometry> | ||
40 | #include <boost/test/unit_test.hpp> | ||
41 | #include <hpp/pinocchio/configuration.hh> | ||
42 | #include <hpp/pinocchio/device.hh> | ||
43 | #include <hpp/pinocchio/humanoid-robot.hh> | ||
44 | #include <hpp/pinocchio/joint-collection.hh> | ||
45 | #include <hpp/pinocchio/joint.hh> | ||
46 | #include <hpp/pinocchio/liegroup-element.hh> | ||
47 | #include <hpp/pinocchio/liegroup.hh> | ||
48 | #include <hpp/pinocchio/simple-device.hh> | ||
49 | #include <pinocchio/algorithm/joint-configuration.hpp> | ||
50 | |||
51 | using namespace hpp::pinocchio; | ||
52 | typedef Eigen::AngleAxis<value_type> AngleAxis_t; | ||
53 | typedef Eigen::Quaternion<value_type> Quaternion_t; | ||
54 | |||
55 | ✗ | vector_t slerp(vectorIn_t v0, vectorIn_t v1, const value_type t) { | |
56 | ✗ | Quaternion_t q0(v0[3], v0[0], v0[1], v0[2]); | |
57 | ✗ | Quaternion_t q1(v1[3], v1[0], v1[1], v1[2]); | |
58 | ✗ | Quaternion_t q = q0.slerp(t, q1); | |
59 | ✗ | vector_t res(4); | |
60 | ✗ | res[0] = q.x(); | |
61 | ✗ | res[1] = q.y(); | |
62 | ✗ | res[2] = q.z(); | |
63 | ✗ | res[3] = q.w(); | |
64 | ✗ | return res; | |
65 | } | ||
66 | |||
67 | ✗ | AngleAxis_t aa(vectorIn_t v0, vectorIn_t v1) { | |
68 | ✗ | Quaternion_t q0(v0[3], v0[0], v0[1], v0[2]); | |
69 | ✗ | Quaternion_t q1(v1[3], v1[0], v1[1], v1[2]); | |
70 | ✗ | return AngleAxis_t(q0 * q1.conjugate()); | |
71 | } | ||
72 | |||
73 | ✗ | vector_t interpolation(hpp::pinocchio::DevicePtr_t robot, vectorIn_t q0, | |
74 | vectorIn_t q1, int n) { | ||
75 | ✗ | const size_type rso3 = 3; | |
76 | ✗ | bool print = false; | |
77 | |||
78 | ✗ | vector_t q2(q0); | |
79 | ✗ | vector_t v(robot->numberDof()); | |
80 | ✗ | hpp::pinocchio::difference(robot, q1, q0, v); | |
81 | |||
82 | /// Check that q1 - q0 is the same as (-q1) - q0 | ||
83 | ✗ | vector_t mq1(q1); | |
84 | ✗ | mq1.segment<4>(rso3) *= -1; | |
85 | ✗ | vector_t mv(robot->numberDof()); | |
86 | ✗ | hpp::pinocchio::difference(robot, mq1, q0, mv); | |
87 | ✗ | BOOST_CHECK(mv.isApprox(v)); | |
88 | |||
89 | ✗ | value_type u = 0; | |
90 | ✗ | value_type step = (value_type)1 / (value_type)(n + 2); | |
91 | ✗ | vector_t angle1(n + 2), angle2(n + 2); | |
92 | |||
93 | ✗ | if (print) std::cout << "HPP : "; | |
94 | ✗ | for (int i = 0; i < n + 2; ++i) { | |
95 | ✗ | u = 0 + i * step; | |
96 | ✗ | interpolate(robot, q0, q1, u, q2); | |
97 | ✗ | AngleAxis_t aa1(aa(q0.segment<4>(rso3), q2.segment<4>(rso3))); | |
98 | ✗ | angle1[i] = aa1.angle(); | |
99 | ✗ | if (print) std::cout << aa1.angle() << ", "; | |
100 | ✗ | if (print) std::cout << q2.segment<4>(rso3).transpose() << "\n"; | |
101 | } | ||
102 | ✗ | if (print) std::cout << "\nEigen: "; | |
103 | ✗ | for (int i = 0; i < n + 2; ++i) { | |
104 | ✗ | u = 0 + i * step; | |
105 | ✗ | vector_t eigen_slerp = slerp(q0.segment<4>(rso3), q1.segment<4>(rso3), u); | |
106 | ✗ | AngleAxis_t aa2(aa(q0.segment<4>(rso3), eigen_slerp)); | |
107 | ✗ | angle2[i] = aa2.angle(); | |
108 | ✗ | if (print) std::cout << aa2.angle() << ", "; | |
109 | ✗ | if (print) std::cout << eigen_slerp.transpose() << "\n"; | |
110 | } | ||
111 | ✗ | if (print) std::cout << "\n"; | |
112 | ✗ | return angle1 - angle2; | |
113 | } | ||
114 | |||
115 | typedef std::vector<DevicePtr_t> Robots_t; | ||
116 | 5 | Robots_t createRobots() { | |
117 | 5 | Robots_t r; | |
118 |
3/6✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
|
5 | r.push_back(unittest::makeDevice(unittest::HumanoidSimple)); |
119 |
3/6✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
|
5 | r.push_back(unittest::makeDevice(unittest::CarLike)); |
120 |
3/6✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 5 times.
✗ Branch 9 not taken.
|
5 | r.push_back(unittest::makeDevice(unittest::ManipulatorArm2)); |
121 | 5 | return r; | |
122 | } | ||
123 | |||
124 | const size_type NB_CONF = 4; | ||
125 | const size_type NB_SUCCESSIVE_INTERPOLATION = 1000; | ||
126 | const value_type eps = sqrt(Eigen::NumTraits<value_type>::dummy_precision()); | ||
127 | |||
128 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(is_valid_configuration) { |
129 | 2 | DevicePtr_t robot; | |
130 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | robot = unittest::makeDevice(unittest::HumanoidSimple); |
131 | |||
132 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | Configuration_t q = robot->neutralConfiguration(); |
133 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(isNormalized(robot, q, eps)); |
134 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElementConstRef P1(q, robot->configSpace()); |
135 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(checkNormalized(P1, eps)); |
136 | |||
137 | /// Set a quaternion of norm != 1 | ||
138 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q[3] = 1; |
139 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q[4] = 1; |
140 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(!isNormalized(robot, q, eps)); |
141 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElementConstRef P2(q, robot->configSpace()); |
142 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(!checkNormalized(P2, eps)); |
143 | |||
144 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | robot = unittest::makeDevice(unittest::CarLike); |
145 | |||
146 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | q = robot->neutralConfiguration(); |
147 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(isNormalized(robot, q, eps)); |
148 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElementConstRef P3(q, robot->configSpace()); |
149 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(checkNormalized(P3, eps)); |
150 | |||
151 | /// Set a complex of norm != 1 | ||
152 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
2 | q.segment<2>(2) << 1, 1; |
153 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(!isNormalized(robot, q, eps)); |
154 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElementConstRef P4(q, robot->configSpace()); |
155 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(!checkNormalized(P4, eps)); |
156 | |||
157 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | robot = unittest::makeDevice(unittest::CarLike); |
158 | |||
159 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | q = robot->neutralConfiguration(); |
160 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(isNormalized(robot, q, eps)); |
161 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | LiegroupElementConstRef P5(q, robot->configSpace()); |
162 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(checkNormalized(P5, eps)); |
163 | 2 | } | |
164 | |||
165 | 3 | void test_difference_and_distance(DevicePtr_t robot) { | |
166 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Configuration_t q0; |
167 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q0.resize(robot->configSize()); |
168 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Configuration_t q1; |
169 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q1.resize(robot->configSize()); |
170 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Configuration_t q2; |
171 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q2.resize(robot->configSize()); |
172 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | vector_t q1_minus_q0; |
173 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q1_minus_q0.resize(robot->numberDof()); |
174 |
2/2✓ Branch 0 taken 12 times.
✓ Branch 1 taken 3 times.
|
15 | for (size_type i = 0; i < NB_CONF; ++i) { |
175 |
1/2✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
|
12 | q0 = ::pinocchio::randomConfiguration(robot->model()); |
176 |
1/2✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
|
12 | q1 = ::pinocchio::randomConfiguration(robot->model()); |
177 | |||
178 |
8/16✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 12 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 12 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 12 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 12 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 12 times.
|
12 | BOOST_CHECK(isNormalized(robot, q0, eps)); |
179 |
8/16✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 12 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 12 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 12 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 12 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 12 times.
|
12 | BOOST_CHECK(isNormalized(robot, q1, eps)); |
180 | |||
181 |
4/8✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
|
12 | difference<DefaultLieGroupMap>(robot, q1, q0, q1_minus_q0); |
182 | |||
183 | // Check that the distance is the norm of the difference | ||
184 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | value_type d = distance(robot, q0, q1); |
185 | |||
186 |
27/54✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
✓ Branch 15 taken 12 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 12 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 12 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 12 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 12 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 12 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 12 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 12 times.
✗ Branch 37 not taken.
✓ Branch 39 taken 12 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 12 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 12 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 12 times.
✗ Branch 49 not taken.
✓ Branch 51 taken 12 times.
✗ Branch 52 not taken.
✓ Branch 54 taken 12 times.
✗ Branch 55 not taken.
✓ Branch 57 taken 12 times.
✗ Branch 58 not taken.
✓ Branch 60 taken 12 times.
✗ Branch 61 not taken.
✓ Branch 63 taken 12 times.
✗ Branch 64 not taken.
✓ Branch 66 taken 12 times.
✗ Branch 67 not taken.
✓ Branch 69 taken 12 times.
✗ Branch 70 not taken.
✓ Branch 72 taken 12 times.
✗ Branch 73 not taken.
✓ Branch 75 taken 12 times.
✗ Branch 76 not taken.
✓ Branch 80 taken 12 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 12 times.
✗ Branch 84 not taken.
✗ Branch 104 not taken.
✓ Branch 105 taken 12 times.
|
12 | BOOST_CHECK_MESSAGE( |
187 | std::abs(d - q1_minus_q0.norm()) < | ||
188 | Eigen::NumTraits<value_type>::dummy_precision(), | ||
189 | "\n" << robot->name() | ||
190 | << ": The distance is not the norm of the difference\n" | ||
191 | << "q0=" << q0.transpose() << "\n" | ||
192 | << "q1=" << q1.transpose() << "\n" | ||
193 | << "(q1 - q0) = " << q1_minus_q0.transpose() << '\n' | ||
194 | << "distance=" << d << "\n" | ||
195 | << "(q1 - q0).norm () = " << q1_minus_q0.norm()); | ||
196 | } | ||
197 | 3 | } | |
198 | |||
199 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(difference_and_distance) { |
200 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Robots_t robots = createRobots(); |
201 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
|
8 | for (std::size_t i = 0; i < robots.size(); ++i) { |
202 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
6 | test_difference_and_distance(robots[i]); |
203 | } | ||
204 | 2 | } | |
205 | |||
206 | template <typename LieGroup> | ||
207 | 12 | void test_difference_and_integrate(DevicePtr_t robot) { | |
208 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q0; |
209 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q0.resize(robot->configSize()); |
210 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q1; |
211 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q1.resize(robot->configSize()); |
212 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q2; |
213 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q2.resize(robot->configSize()); |
214 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | vector_t q1_minus_q0; |
215 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q1_minus_q0.resize(robot->numberDof()); |
216 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 6 times.
|
60 | for (size_type i = 0; i < NB_CONF; ++i) { |
217 |
1/2✓ Branch 3 taken 24 times.
✗ Branch 4 not taken.
|
48 | q0 = ::pinocchio::randomConfiguration(robot->model()); |
218 |
1/2✓ Branch 3 taken 24 times.
✗ Branch 4 not taken.
|
48 | q1 = ::pinocchio::randomConfiguration(robot->model()); |
219 | |||
220 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q0, eps)); |
221 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q1, eps)); |
222 | |||
223 |
4/8✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
|
48 | difference<LieGroup>(robot, q1, q0, q1_minus_q0); |
224 |
4/8✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
|
48 | integrate<true, LieGroup>(robot, q0, q1_minus_q0, q2); |
225 | |||
226 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q2, eps)); |
227 | |||
228 | // Check that distance (q0 + (q1 - q0), q1) is zero | ||
229 |
17/34✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 24 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 24 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 24 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 24 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 24 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 24 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 24 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 24 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 24 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 24 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 24 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 24 times.
✗ Branch 50 not taken.
✗ Branch 62 not taken.
✓ Branch 63 taken 24 times.
|
48 | BOOST_CHECK_MESSAGE(isApprox(robot, q1, q2, eps), |
230 | "\n(q0 + (q1 - q0)) is not equivalent to q1\n" | ||
231 | << "q1=" << q1.transpose() << "\n" | ||
232 | << "q2=" << q2.transpose() << "\n"); | ||
233 | } | ||
234 | 12 | } | |
235 | |||
236 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(difference_and_integrate) { |
237 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Robots_t robots = createRobots(); |
238 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
|
8 | for (std::size_t i = 0; i < robots.size(); ++i) { |
239 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
6 | test_difference_and_integrate<DefaultLieGroupMap>(robots[i]); |
240 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
6 | test_difference_and_integrate<RnxSOnLieGroupMap>(robots[i]); |
241 | } | ||
242 | 2 | } | |
243 | |||
244 | template <typename LieGroup> | ||
245 | 12 | void test_interpolate_and_integrate(DevicePtr_t robot) { | |
246 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q0; |
247 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q0.resize(robot->configSize()); |
248 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q1; |
249 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q1.resize(robot->configSize()); |
250 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q2; |
251 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q2.resize(robot->configSize()); |
252 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Configuration_t q3; |
253 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q3.resize(robot->configSize()); |
254 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | vector_t q1_minus_q0; |
255 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | q1_minus_q0.resize(robot->numberDof()); |
256 |
1/2✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
|
12 | const value_type eps_dist = value_type(robot->numberDof()) * |
257 | 12 | sqrt(Eigen::NumTraits<value_type>::epsilon()); | |
258 | value_type d0, d1; | ||
259 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 6 times.
|
60 | for (size_type i = 0; i < NB_CONF; ++i) { |
260 |
1/2✓ Branch 3 taken 24 times.
✗ Branch 4 not taken.
|
48 | q0 = ::pinocchio::randomConfiguration<LieGroup>(robot->model()); |
261 |
1/2✓ Branch 3 taken 24 times.
✗ Branch 4 not taken.
|
48 | q1 = ::pinocchio::randomConfiguration<LieGroup>(robot->model()); |
262 | |||
263 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q0, eps)); |
264 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q1, eps)); |
265 | |||
266 |
4/8✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
|
48 | difference<LieGroup>(robot, q1, q0, q1_minus_q0); |
267 | |||
268 |
4/8✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
|
48 | interpolate<LieGroup>(robot, q0, q1, 0, q2); |
269 |
3/6✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
|
48 | d0 = distance(robot, q0, q2); |
270 | |||
271 |
20/40✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 24 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 24 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 24 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 24 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 24 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 24 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 24 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 24 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 24 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 24 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 24 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 24 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 24 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 24 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 24 times.
✗ Branch 59 not taken.
✗ Branch 74 not taken.
✓ Branch 75 taken 24 times.
|
48 | BOOST_CHECK_MESSAGE(d0 < eps_dist, |
272 | "\n(q0 + 0 * (q1 - q0)) is not equivalent to q0\n" | ||
273 | << "q0=" << q0.transpose() << "\n" | ||
274 | << "q1=" << q1.transpose() << "\n" | ||
275 | << "q2=" << q2.transpose() << "\n" | ||
276 | << "distance=" << d0); | ||
277 | |||
278 | // vector_t errors = interpolation (robot, q0, q1, 4); | ||
279 | // BOOST_CHECK_MESSAGE (errors.isZero (), | ||
280 | // "The interpolation computed by HPP does not match the Eigen SLERP" | ||
281 | // ); | ||
282 | |||
283 |
4/8✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
|
48 | interpolate<LieGroup>(robot, q0, q1, 1, q2); |
284 |
3/6✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
|
48 | d1 = distance(robot, q1, q2); |
285 |
20/40✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 24 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 24 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 24 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 24 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 24 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 24 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 24 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 24 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 24 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 24 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 24 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 24 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 24 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 24 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 24 times.
✗ Branch 59 not taken.
✗ Branch 74 not taken.
✓ Branch 75 taken 24 times.
|
48 | BOOST_CHECK_MESSAGE(d1 < eps_dist, |
286 | "\n(q0 + 1 * (q1 - q0)) is not equivalent to q1\n" | ||
287 | << "q0=" << q0.transpose() << "\n" | ||
288 | << "q1=" << q1.transpose() << "\n" | ||
289 | << "q2=" << q2.transpose() << "\n" | ||
290 | << "distance=" << d1); | ||
291 | |||
292 |
4/8✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
|
48 | interpolate<LieGroup>(robot, q0, q1, 0.5, q2); |
293 | // FIXME For SE(3) and SE(2) joints, with DefaultLieGroupMap | ||
294 | // there is no guaranty that the interpolation | ||
295 | // between two configuration within bounds will be within bounds. | ||
296 | // So we should not saturate the configuration. | ||
297 |
5/10✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24 times.
✗ Branch 14 not taken.
|
48 | integrate<false, LieGroup>(robot, q0, 0.5 * q1_minus_q0, q3); |
298 | |||
299 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q2, eps)); |
300 |
8/16✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 24 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 24 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 24 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 24 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 24 times.
|
48 | BOOST_CHECK(isNormalized(robot, q3, eps)); |
301 | |||
302 |
16/32✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 24 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 24 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 24 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 24 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 24 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 24 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 24 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 24 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 24 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 24 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 24 times.
✗ Branch 47 not taken.
✗ Branch 60 not taken.
✓ Branch 61 taken 24 times.
|
48 | BOOST_CHECK_MESSAGE(isApprox(robot, q2, q3, eps), |
303 | "computation of q0 + 0.5 * (q1 - q0) does not yield " | ||
304 | "the same result with interpolate: " | ||
305 | << displayConfig(q2) | ||
306 | << " as with integrate: " << displayConfig(q3)); | ||
307 | |||
308 |
3/6✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
|
48 | d0 = distance(robot, q0, q2); |
309 |
3/6✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24 times.
✗ Branch 8 not taken.
|
48 | d1 = distance(robot, q1, q2); |
310 |
20/40✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 24 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 24 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 24 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 24 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 24 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 24 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 24 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 24 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 24 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 24 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 24 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 24 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 24 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 24 times.
✗ Branch 53 not taken.
✓ Branch 56 taken 24 times.
✗ Branch 57 not taken.
✓ Branch 59 taken 24 times.
✗ Branch 60 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 24 times.
|
48 | BOOST_CHECK_MESSAGE( |
311 | std::abs(d0 - d1) < eps_dist, | ||
312 | "\nq2 = (q0 + 0.5 * (q1 - q0)) is not equivalent to q1\n" | ||
313 | << "q0=" << q0.transpose() << "\n" | ||
314 | << "q1=" << q1.transpose() << "\n" | ||
315 | << "q2=" << q2.transpose() << "\n" | ||
316 | << "distance=" << distance); | ||
317 | } | ||
318 | 12 | } | |
319 | |||
320 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(interpolate_and_integrate) { |
321 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Robots_t robots = createRobots(); |
322 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
|
8 | for (std::size_t i = 0; i < robots.size(); ++i) { |
323 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
6 | test_interpolate_and_integrate<DefaultLieGroupMap>(robots[i]); |
324 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
6 | test_interpolate_and_integrate<RnxSOnLieGroupMap>(robots[i]); |
325 | } | ||
326 | 2 | } | |
327 | |||
328 | 3 | void test_saturation(DevicePtr_t robot) { | |
329 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Configuration_t q0; |
330 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q0.resize(robot->configSize()); |
331 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Configuration_t q1; |
332 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q1.resize(robot->configSize()); |
333 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | Configuration_t q2; |
334 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | q2.resize(robot->configSize()); |
335 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | vector_t v; |
336 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | v.resize(robot->numberDof()); |
337 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | v.setOnes(); |
338 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | ArrayXb saturation(robot->numberDof()); |
339 |
2/4✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
|
3 | ArrayXb expected_sat(robot->numberDof()); |
340 | |||
341 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
3 | q0 = robot->model().upperPositionLimit; |
342 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | normalize(robot, q0); |
343 | |||
344 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
3 | q1 = robot->model().lowerPositionLimit; |
345 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
3 | normalize(robot, q1); |
346 | |||
347 |
8/16✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 3 times.
|
3 | BOOST_CHECK(isNormalized(robot, q0, eps)); |
348 |
8/16✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 3 times.
|
3 | BOOST_CHECK(isNormalized(robot, q1, eps)); |
349 | |||
350 |
4/8✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
|
3 | integrate<false, DefaultLieGroupMap>(robot, q0, v, q2); |
351 |
2/4✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
3 | saturate(robot, q2); |
352 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() <= robot->model().upperPositionLimit.array()).all()); |
353 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() >= robot->model().lowerPositionLimit.array()).all()); |
354 | |||
355 |
5/10✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 14 not taken.
|
3 | integrate<false, DefaultLieGroupMap>(robot, q1, -v, q2); |
356 |
2/4✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
3 | saturate(robot, q2); |
357 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() <= robot->model().upperPositionLimit.array()).all()); |
358 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() >= robot->model().lowerPositionLimit.array()).all()); |
359 | |||
360 |
4/8✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
|
3 | integrate<false, DefaultLieGroupMap>(robot, q0, v, q2); |
361 |
4/8✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
|
6 | expected_sat = (q2.array() > robot->model().upperPositionLimit.array()) || |
362 |
4/8✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
|
6 | (q2.array() < robot->model().lowerPositionLimit.array()); |
363 |
8/16✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 3 times.
|
3 | BOOST_CHECK(saturate(robot, q2, saturation)); |
364 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() <= robot->model().upperPositionLimit.array()).all()); |
365 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() >= robot->model().lowerPositionLimit.array()).all()); |
366 |
4/6✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 2 times.
|
3 | if (robot->numberDof() == robot->configSize()) { |
367 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK_EQUAL(saturation.matrix(), expected_sat.matrix()); |
368 | } else { | ||
369 |
4/6✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
|
2 | size_type iq = (robot->rootJoint()->configSize() == 4 ? 2 : 3); |
370 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | size_type sq = robot->rootJoint()->configSize(); |
371 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | size_type sv = robot->rootJoint()->numberDof(); |
372 | |||
373 |
9/18✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 2 times.
|
2 | BOOST_CHECK_EQUAL(saturation.head(iq).matrix(), |
374 | expected_sat.head(iq).matrix()); | ||
375 |
11/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 2 times.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
|
2 | BOOST_CHECK_EQUAL(saturation.tail(robot->numberDof() - sv).matrix(), |
376 | expected_sat.tail(robot->configSize() - sq).matrix()); | ||
377 | } | ||
378 | |||
379 |
5/10✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3 times.
✗ Branch 14 not taken.
|
3 | integrate<false, DefaultLieGroupMap>(robot, q1, -v, q2); |
380 |
4/8✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
|
6 | expected_sat = (q2.array() > robot->model().upperPositionLimit.array()) || |
381 |
4/8✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 3 times.
✗ Branch 13 not taken.
|
6 | (q2.array() < robot->model().lowerPositionLimit.array()); |
382 |
8/16✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 3 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 3 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 3 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 3 times.
|
3 | BOOST_CHECK(saturate(robot, q2, saturation)); |
383 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() <= robot->model().upperPositionLimit.array()).all()); |
384 |
10/20✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 3 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 3 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 3 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 3 times.
✗ Branch 32 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 3 times.
|
3 | BOOST_CHECK((q2.array() >= robot->model().lowerPositionLimit.array()).all()); |
385 |
4/6✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 2 times.
|
3 | if (robot->numberDof() == robot->configSize()) { |
386 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK_EQUAL(saturation.matrix(), expected_sat.matrix()); |
387 | } else { | ||
388 |
4/6✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
|
2 | size_type iq = (robot->rootJoint()->configSize() == 4 ? 2 : 3); |
389 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | size_type sq = robot->rootJoint()->configSize(); |
390 |
2/4✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
|
2 | size_type sv = robot->rootJoint()->numberDof(); |
391 | |||
392 |
9/18✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 2 times.
|
2 | BOOST_CHECK_EQUAL(saturation.head(iq).matrix(), |
393 | expected_sat.head(iq).matrix()); | ||
394 |
11/22✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 2 times.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✓ Branch 38 taken 2 times.
|
2 | BOOST_CHECK_EQUAL(saturation.tail(robot->numberDof() - sv).matrix(), |
395 | expected_sat.tail(robot->configSize() - sq).matrix()); | ||
396 | } | ||
397 | 3 | } | |
398 | |||
399 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(saturation) { |
400 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Robots_t robots = createRobots(); |
401 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
|
8 | for (std::size_t i = 0; i < robots.size(); ++i) { |
402 |
1/2✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
|
6 | test_saturation(robots[i]); |
403 | } | ||
404 | 2 | } | |
405 | |||
406 | template <typename LieGroup> | ||
407 | 12 | int test_successive_interpolation(DevicePtr_t robot) { | |
408 | 12 | int count = 0; | |
409 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | Configuration_t q0(robot->configSize()); |
410 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | Configuration_t q1(robot->configSize()); |
411 | |||
412 |
2/4✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
|
12 | vector_t q1_minus_q0(robot->numberDof()); |
413 | |||
414 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 6 times.
|
60 | for (size_type i = 0; i < NB_CONF; ++i) { |
415 |
1/2✓ Branch 3 taken 24 times.
✗ Branch 4 not taken.
|
48 | q0 = ::pinocchio::randomConfiguration(robot->model()); |
416 | |||
417 |
2/2✓ Branch 0 taken 24000 times.
✓ Branch 1 taken 24 times.
|
48048 | for (size_type j = 0; j < NB_SUCCESSIVE_INTERPOLATION; ++j) { |
418 |
1/2✓ Branch 3 taken 24000 times.
✗ Branch 4 not taken.
|
48000 | q1 = ::pinocchio::randomConfiguration(robot->model()); |
419 | // BOOST_CHECK(isNormalized(robot, q1, eps)); | ||
420 |
3/6✓ Branch 1 taken 24000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24000 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 24000 times.
|
48000 | if (!isNormalized(robot, q1, eps)) ++count; |
421 |
4/8✓ Branch 1 taken 24000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24000 times.
✗ Branch 11 not taken.
|
48000 | difference<LieGroup>(robot, q1, q0, q1_minus_q0); |
422 | |||
423 |
5/10✓ Branch 1 taken 24000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 24000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 24000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 24000 times.
✗ Branch 14 not taken.
|
48000 | integrate<true, LieGroup>(robot, q0, 0.5 * q1_minus_q0, q0); |
424 | // BOOST_CHECK(isNormalized(robot, q0, eps)); | ||
425 |
3/6✓ Branch 1 taken 24000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24000 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 24000 times.
|
48000 | if (!isNormalized(robot, q0, eps)) ++count; |
426 | } | ||
427 | } | ||
428 | 12 | return count; | |
429 | 12 | } | |
430 | |||
431 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(successive_interpolation) { |
432 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Robots_t robots = createRobots(); |
433 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | std::vector<int> results(2 * robots.size()); |
434 | 2 | #pragma omp parallel for | |
435 | for (std::size_t i = 0; i < robots.size(); ++i) { | ||
436 | results[2 * i] = | ||
437 | test_successive_interpolation<DefaultLieGroupMap>(robots[i]); | ||
438 | results[2 * i + 1] = | ||
439 | test_successive_interpolation<RnxSOnLieGroupMap>(robots[i]); | ||
440 | } | ||
441 |
2/2✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
|
8 | for (std::size_t i = 0; i < robots.size(); ++i) { |
442 |
8/16✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
|
6 | BOOST_CHECK_MESSAGE( |
443 | results[2 * i] == 0, | ||
444 | "DefaultLieGroupMap failed on robot " << robots[i]->name() << "."); | ||
445 |
8/16✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 3 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 3 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 3 times.
✗ Branch 27 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 3 times.
|
6 | BOOST_CHECK_MESSAGE( |
446 | results[2 * i + 1] == 0, | ||
447 | " RnxSOnLieGroupMap failed on robot " << robots[i]->name() << "."); | ||
448 | } | ||
449 | 2 | } | |
450 |