7 #include <steering_functions/utilities/utilities.hpp>
15 for (
size_t i = 0; i <
route.sizeVectorSwaths(); ++i) {
18 prev_swaths,
route.getConnection(i),
route.getSwaths(i), turn);
21 if (
route.sizeConnections() >
route.sizeVectorSwaths()) {
32 for (
size_t i = 0; i <
swaths.size()-1; ++i) {
57 }
else if (mp.
size() > 0) {
64 p2 = s2[0].startPoint();
65 ang2 = s2[0].getInAngle();
66 }
else if (mp.
size() > 0) {
81 p1, ang1, mp,
p2, ang2);
84 for (
int i = 1; i < v_con.size(); ++i) {
86 v_con[i-1].first, v_con[i-1].second,
87 v_con[i].first, v_con[i].second);
96 end_of_clothoid(0.0, 0.0, 0.0, 0.0,
robot.getMaxDiffCurv(), 1.0,
99 double xi = x - sin(ang) /
robot.getMaxCurv();
100 double yi = y + cos(ang) /
robot.getMaxCurv();
101 return sqrt(xi*xi + yi*yi);
110 std::vector<std::pair<F2CPoint, double>>
path;
111 path.emplace_back(
p1, ang1);
113 if (
p1.distance(
p2) < 6.0 * safe_dist || mp.
size() < 2) {
114 path.emplace_back(
p2, ang2);
118 std::vector<F2CPoint> vp;
119 for (
int i = 1; i < mp.
size() - 1; ++i) {
120 double ang_in = (mp[i] - mp[i-1]).getAngleFromPoint();
121 double ang_out = (mp[i+1] - mp[i]).getAngleFromPoint();
122 if (fabs(ang_in - ang_out) > 0.1) {
123 vp.emplace_back(mp[i]);
128 path.emplace_back(
p2, ang2);
132 for (
int i = 1; i < vp.size() - 1; ++i) {
133 double dist_in = vp[i].distance(vp[i-1]);
134 double dist_out = vp[i].distance(vp[i+1]);
135 if (dist_in == 0.0 || dist_out == 0.0) {
138 double d_in = min(0.5 * dist_in, safe_dist);
139 double d_out = min(0.5 * dist_out, safe_dist);
140 F2CPoint p_in = (vp[i-1] - vp[i]) * (d_in / dist_in) + vp[i];
141 F2CPoint p_out = (vp[i+1] - vp[i]) * (d_out / dist_out) + vp[i];
142 if (p_in.
distance(
path.back().first) > 3.0 * safe_dist &&
145 double ang_in = (vp[i ] - vp[i-1]).getAngleFromPoint();
146 path.emplace_back(p_in, ang_in);
148 if (p_out.
distance(vp[i+1]) > 3.0 * safe_dist &&
151 p_out.
distance(p_in) > 3.0 * safe_dist) {
152 double ang_out = (vp[i+1] - vp[i]).getAngleFromPoint();
153 path.emplace_back(p_out, ang_out);
156 path.emplace_back(
p2, ang2);