12 const F2CPoint& start_pos,
double start_angle,
13 const F2CPoint& end_pos,
double end_angle) {
14 double dist_start_end = start_pos.
distance(end_pos);
15 auto dir = end_pos - start_pos;
17 bool inverted {
false};
20 if (start_angle > boost::math::constants::pi<double>()) {
25 return {dist_start_end, angle, start_angle, end_angle,
26 static_cast<double>(inverted)};
31 const F2CPoint& start_pos,
double start_angle,
32 const F2CPoint& end_pos,
double end_angle) {
35 double dist_start_end = turn_values[0];
36 double rot_angle = turn_values[1];
37 double start_angle_t = turn_values[2];
38 double end_angle_t = turn_values[3];
39 double inverted = turn_values[4];
44 dist_start_end, start_angle_t, end_angle_t);
47 dist_start_end, start_angle_t, end_angle_t);
52 std::for_each(
path.begin(),
path.end(), [] (
auto& s) {
53 s.point.setY(-s.point.getY());
54 s.angle = F2CPoint::mod_2pi(-s.angle);});
56 for (
auto&& s :
path) {
66 const F2CPoint& end_pos,
float max_error_dist) {
67 if (
path.size() < 2) {
return;}
70 return (a.
distance(b) < max_error_dist);
72 if (is_near(
path[0].point, start_pos)) {
73 path[0].point = start_pos;
75 if (is_near(
path.back().point, end_pos)) {
76 path.back().point = end_pos;
82 double dist_start_end,
double start_angle,
double end_angle) {
83 std::vector<int> v_turn {
84 static_cast<int>(1e3 *
robot.getMaxCurv()),
85 static_cast<int>(1e3 *
robot.getMaxDiffCurv()),
86 static_cast<int>(1e3 * dist_start_end),
87 static_cast<int>(1e3 * start_angle),
88 static_cast<int>(1e3 * end_angle)
101 double dist_start_end,
double end_angle,
102 double max_dist,
double max_rot_error) {
103 for (
auto&& s :
path) {
104 if (s.point.getY() < -max_dist) {
109 return (cos(
path.back().angle - end_angle) >= 1 - max_rot_error) &&
110 (fabs(p_end.
getX() - dist_start_end) < max_dist) &&
111 (fabs(p_end.
getY()) < max_dist);