| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | * Copyright 2017, LAAS-CNRS | ||
| 3 | * Author: Steve Tonneau | ||
| 4 | */ | ||
| 5 | |||
| 6 | #include <hpp/bezier-com-traj/utils.hh> | ||
| 7 | namespace bezier_com_traj { | ||
| 8 | |||
| 9 | 1055 | waypoint_t initwp(const size_t rows, const size_t cols) { | |
| 10 | 1055 | waypoint_t w; | |
| 11 |
2/4✓ Branch 1 taken 1055 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1055 times.
✗ Branch 5 not taken.
|
1055 | w.first = MatrixXX::Zero(rows, cols); |
| 12 |
2/4✓ Branch 1 taken 1055 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1055 times.
✗ Branch 5 not taken.
|
1055 | w.second = VectorX::Zero(rows); |
| 13 | 1055 | return w; | |
| 14 | ✗ | } | |
| 15 | |||
| 16 | 2607811 | waypoint_t operator+(const waypoint_t& w1, const waypoint_t& w2) { | |
| 17 |
1/2✓ Branch 2 taken 2607811 times.
✗ Branch 3 not taken.
|
5215622 | if (w1.second.rows() != w2.second.rows() || |
| 18 |
3/6✓ Branch 0 taken 2607811 times.
✗ Branch 1 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2607811 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2607811 times.
|
5215622 | w1.first.rows() != w2.first.rows() || w1.first.cols() != w2.first.cols()) |
| 19 | ✗ | throw std::runtime_error("You cannot add waypoint_t of different size."); | |
| 20 |
5/10✓ Branch 1 taken 2607811 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2607811 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2607811 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2607811 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2607811 times.
✗ Branch 14 not taken.
|
2607811 | return waypoint_t(w1.first + w2.first, w1.second + w2.second); |
| 21 | } | ||
| 22 | |||
| 23 | 296 | waypoint_t operator-(const waypoint_t& w1, const waypoint_t& w2) { | |
| 24 |
1/2✓ Branch 2 taken 296 times.
✗ Branch 3 not taken.
|
592 | if (w1.second.rows() != w2.second.rows() || |
| 25 |
3/6✓ Branch 0 taken 296 times.
✗ Branch 1 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 296 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 296 times.
|
592 | w1.first.rows() != w2.first.rows() || w1.first.cols() != w2.first.cols()) |
| 26 | ✗ | throw std::runtime_error("You cannot add waypoint_t of different size."); | |
| 27 |
5/10✓ Branch 1 taken 296 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 296 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 296 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 296 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 296 times.
✗ Branch 14 not taken.
|
296 | return waypoint_t(w1.first - w2.first, w1.second - w2.second); |
| 28 | } | ||
| 29 | |||
| 30 | 5118532 | waypoint_t operator*(const double k, const waypoint_t& w) { | |
| 31 |
5/10✓ Branch 1 taken 5118532 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5118532 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5118532 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 5118532 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 5118532 times.
✗ Branch 14 not taken.
|
5118532 | return waypoint_t(k * w.first, k * w.second); |
| 32 | } | ||
| 33 | |||
| 34 | 119148 | waypoint_t operator*(const waypoint_t& w, const double k) { | |
| 35 |
5/10✓ Branch 1 taken 119148 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 119148 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 119148 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 119148 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 119148 times.
✗ Branch 14 not taken.
|
119148 | return waypoint_t(k * w.first, k * w.second); |
| 36 | } | ||
| 37 | |||
| 38 | template <> | ||
| 39 | ✗ | waypoint9_t initwp<waypoint9_t>() { | |
| 40 | ✗ | waypoint9_t w; | |
| 41 | ✗ | w.first = Matrix39::Zero(); | |
| 42 | ✗ | w.second = point3_t::Zero(); | |
| 43 | ✗ | return w; | |
| 44 | } | ||
| 45 | |||
| 46 | template <> | ||
| 47 | 5 | waypoint6_t initwp<waypoint6_t>() { | |
| 48 | 5 | waypoint6_t w; | |
| 49 |
2/4✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
|
5 | w.first = matrix6_t::Zero(); |
| 50 |
2/4✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
|
5 | w.second = point6_t::Zero(); |
| 51 | 5 | return w; | |
| 52 | } | ||
| 53 | |||
| 54 | template <> | ||
| 55 | ✗ | waypoint3_t initwp<waypoint3_t>() { | |
| 56 | ✗ | waypoint3_t w; | |
| 57 | ✗ | w.first = matrix3_t::Zero(); | |
| 58 | ✗ | w.second = point3_t::Zero(); | |
| 59 | ✗ | return w; | |
| 60 | } | ||
| 61 | |||
| 62 | 6959 | Matrix3 skew(point_t_tC x) { | |
| 63 |
2/4✓ Branch 1 taken 6959 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6959 times.
✗ Branch 5 not taken.
|
6959 | Matrix3 res = Matrix3::Zero(); |
| 64 | 6959 | res(0, 1) = -x(2); | |
| 65 | 6959 | res(0, 2) = x(1); | |
| 66 | 6959 | res(1, 0) = x(2); | |
| 67 | 6959 | res(1, 2) = -x(0); | |
| 68 | 6959 | res(2, 0) = -x(1); | |
| 69 | 6959 | res(2, 1) = x(0); | |
| 70 | 6959 | return res; | |
| 71 | } | ||
| 72 | |||
| 73 | 25 | std::vector<ndcurves::Bern<double> > ComputeBersteinPolynoms( | |
| 74 | const unsigned int degree) { | ||
| 75 | 25 | std::vector<ndcurves::Bern<double> > res; | |
| 76 |
2/2✓ Branch 0 taken 165 times.
✓ Branch 1 taken 25 times.
|
190 | for (unsigned int i = 0; i <= (unsigned int)degree; ++i) |
| 77 |
2/4✓ Branch 1 taken 165 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 165 times.
✗ Branch 5 not taken.
|
165 | res.push_back(ndcurves::Bern<double>(degree, i)); |
| 78 | 25 | return res; | |
| 79 | ✗ | } | |
| 80 | |||
| 81 | 59 | T_time computeDiscretizedTimeFixed(const VectorX& phaseTimings, | |
| 82 | const unsigned int pointsPerPhase) { | ||
| 83 | 59 | T_time timeArray; | |
| 84 | 59 | double t = 0; | |
| 85 |
1/2✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
|
59 | double t_total = phaseTimings.sum(); |
| 86 |
2/4✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 59 times.
✗ Branch 5 not taken.
|
59 | timeArray.push_back(std::make_pair(0., 0)); |
| 87 |
2/2✓ Branch 1 taken 171 times.
✓ Branch 2 taken 59 times.
|
230 | for (int i = 0; i < phaseTimings.size(); ++i) { |
| 88 |
1/2✓ Branch 1 taken 171 times.
✗ Branch 2 not taken.
|
171 | double step = (double)phaseTimings[i] / pointsPerPhase; |
| 89 |
2/2✓ Branch 0 taken 1063 times.
✓ Branch 1 taken 171 times.
|
1234 | for (size_t j = 0; j < pointsPerPhase; ++j) { |
| 90 | 1063 | t += step; | |
| 91 |
2/4✓ Branch 1 taken 1063 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1063 times.
✗ Branch 5 not taken.
|
1063 | timeArray.push_back(std::make_pair(t, i)); |
| 92 | } | ||
| 93 | } | ||
| 94 | 59 | timeArray.pop_back(); | |
| 95 |
1/2✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
|
59 | timeArray.push_back(std::make_pair( |
| 96 |
1/2✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
|
59 | t_total, phaseTimings.size() - 1)); // avoid numerical errors |
| 97 | 118 | return timeArray; | |
| 98 | ✗ | } | |
| 99 | |||
| 100 | 2 | T_time computeDiscretizedTime(const VectorX& phaseTimings, | |
| 101 | const double timeStep) { | ||
| 102 | 2 | T_time timeArray; | |
| 103 | 2 | double t = 0; | |
| 104 | 2 | double currentTiming = 0.; | |
| 105 |
2/2✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
|
8 | for (int i = 0; i < phaseTimings.size(); ++i) { |
| 106 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
|
6 | assert(timeStep * 2 <= phaseTimings[i] && |
| 107 | "Time step too high: should allow to contain at least 2 points per " | ||
| 108 | "phase"); | ||
| 109 | 6 | t = currentTiming; | |
| 110 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
6 | currentTiming += phaseTimings[i]; |
| 111 |
2/2✓ Branch 0 taken 50 times.
✓ Branch 1 taken 6 times.
|
56 | while (t < currentTiming) { |
| 112 |
2/4✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
|
50 | timeArray.push_back(std::make_pair(t, i)); |
| 113 | 50 | t += timeStep; | |
| 114 | } | ||
| 115 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | timeArray.push_back(std::make_pair(currentTiming, i)); |
| 116 | } | ||
| 117 | 4 | return timeArray; | |
| 118 | ✗ | } | |
| 119 | |||
| 120 | ✗ | void printQHullFile(const std::pair<MatrixXX, VectorX>& Ab, VectorX intPoint, | |
| 121 | const std::string& fileName, bool clipZ) { | ||
| 122 | ✗ | std::ofstream file; | |
| 123 | using std::endl; | ||
| 124 | ✗ | std::string path("/local/fernbac/bench_iros18/constraints_obj/"); | |
| 125 | ✗ | path.append(fileName); | |
| 126 | ✗ | file.open(path.c_str(), std::ios::out | std::ios::trunc); | |
| 127 | ✗ | file << "3 1" << endl; | |
| 128 | ✗ | file << "\t " << intPoint[0] << "\t" << intPoint[1] << "\t" << intPoint[2] | |
| 129 | ✗ | << endl; | |
| 130 | ✗ | file << "4" << endl; | |
| 131 | ✗ | clipZ ? file << Ab.first.rows() + 2 << endl : file << Ab.first.rows() << endl; | |
| 132 | ✗ | for (int i = 0; i < Ab.first.rows(); ++i) { | |
| 133 | ✗ | file << "\t" << Ab.first(i, 0) << "\t" << Ab.first(i, 1) << "\t" | |
| 134 | ✗ | << Ab.first(i, 2) << "\t" << -Ab.second[i] - 0.001 << endl; | |
| 135 | } | ||
| 136 | ✗ | if (clipZ) { | |
| 137 | ✗ | file << "\t" << 0 << "\t" << 0 << "\t" << 1. << "\t" << -3. << endl; | |
| 138 | ✗ | file << "\t" << 0 << "\t" << 0 << "\t" << -1. << "\t" << -1. << endl; | |
| 139 | } | ||
| 140 | ✗ | file.close(); | |
| 141 | ✗ | } | |
| 142 | |||
| 143 | } // namespace bezier_com_traj | ||
| 144 |