68 double x = (c1.
xc + c2.
xc) / 2;
69 double y = (c1.
yc + c2.
yc) / 2;
100 TT_tangent_circles(c1, c2, q2);
104 return (*cstart)->hc_turn_length(**q1) + (*cend)->cc_turn_length(**q2);
138 return TiST_exists(c1, c2) || TeST_exists(c1, c2);
189 double theta = atan2(c2.
yc - c1.
yc, c2.
xc - c1.
xc);
224 TiST_tangent_circles(c1, c2, q2, q3);
228 return (*cstart)->hc_turn_length(**q1) +
configuration_distance(**q2, **q3) + (*cend)->cc_turn_length(**q3);
234 TeST_tangent_circles(c1, c2, q2, q3);
238 return (*cstart)->hc_turn_length(**q1) +
configuration_distance(**q2, **q3) + (*cend)->cc_turn_length(**q3);
244 if (TiST_exists(c1, c2))
246 return TiST_path(c1, c2, cstart, cend, q1, q2, q3);
248 if (TeST_exists(c1, c2))
250 return TeST_path(c1, c2, cstart, cend, q1, q2, q3);
252 return numeric_limits<double>::max();
272 double theta =
angle;
275 double delta_y = sqrt(pow(r, 2) - pow(delta_x, 2));
283 TT_tangent_circles(c1, tgt1, q1);
284 TT_tangent_circles(tgt1, c2, q2);
285 TT_tangent_circles(c1, tgt2, q3);
286 TT_tangent_circles(tgt2, c2, q4);
293 TTT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd);
306 if (length1 < length2)
330 return numeric_limits<double>::max();
336 CCpm0_Dubins_State_Space::CCpm0_Dubins_State_Space(
double kappa,
double sigma,
double discretization,
bool forwards)
338 , forwards_(forwards)
339 , ccpm0_dubins_{ unique_ptr<CCpm0_Dubins>(
new CCpm0_Dubins(
this)) }
341 rs_circle_param_.set_param(kappa_, numeric_limits<double>::max(), 1 / kappa_, 0.0, 0.0, 1.0, 0.0);
342 radius_ = hc_cc_circle_param_.radius;
343 mu_ = hc_cc_circle_param_.mu;
409 nullptr, cstart[best_path], cend[best_path], ci1[best_path],
nullptr,
length[best_path]);
454 double lg[] = { numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
455 numeric_limits<double>::max() };
457 for (
int i = 0; i < 2; i++)
460 if (i == 0 && state1.
kappa < 0)
462 else if (i == 1 && state1.
kappa > 0)
464 for (
int j = 0; j < 2; j++)
469 lg[2 * i + j] =
path[2 * i + j]->length;
492 for (
int i = 0; i < 2; i++)
494 delete start_circle[i];
495 delete end_circle[i];
497 for (
int i = 0; i < 4; i++)
504 return path[best_path];
517 vector<Control> cc_dubins_controls;
518 cc_dubins_controls.reserve(8);
547 return cc_dubins_controls;