| 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 |