33 #define CC_REGULAR false 70 double x = (c1.
xc + c2.
xc) / 2;
71 double y = (c1.
yc + c2.
yc) / 2;
101 TT_tangent_circles(c1, c2, q);
122 double delta_x = 0.5 * distance;
157 TcT_tangent_circles(c1, c2, q);
180 double theta = angle;
182 double delta_x = 0.5 * distance;
183 double delta_y =
sqrt(
pow(r, 2) -
pow(delta_x, 2));
191 TcT_tangent_circles(c1, tgt1, q1);
192 TcT_tangent_circles(tgt1, c2, q2);
193 TcT_tangent_circles(c1, tgt2, q3);
194 TcT_tangent_circles(tgt2, c2, q4);
201 TcTcT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd);
209 if (length1 < length2)
229 return numeric_limits<double>::max();
249 double theta = angle;
251 double r2 = 2 * c1.
radius;
252 double delta_x = (
pow(r1, 2) +
pow(distance, 2) -
pow(r2, 2)) / (2 * distance);
253 double delta_y =
sqrt(
pow(r1, 2) -
pow(delta_x, 2));
261 TcT_tangent_circles(c1, tgt1, q1);
262 TT_tangent_circles(tgt1, c2, q2);
263 TcT_tangent_circles(c1, tgt2, q3);
264 TT_tangent_circles(tgt2, c2, q4);
271 TcTT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd);
279 if (length1 < length2)
299 return numeric_limits<double>::max();
319 double theta = angle;
320 double r1 = 2 * c1.
radius;
322 double delta_x = (
pow(r1, 2) +
pow(distance, 2) -
pow(r2, 2)) / (2 * distance);
323 double delta_y =
sqrt(
pow(r1, 2) -
pow(delta_x, 2));
331 TT_tangent_circles(c1, tgt1, q1);
332 TcT_tangent_circles(tgt1, c2, q2);
333 TT_tangent_circles(c1, tgt2, q3);
334 TcT_tangent_circles(tgt2, c2, q4);
341 TTcT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd);
349 if (length1 < length2)
369 return numeric_limits<double>::max();
383 return (distance >= 2 * c1.
radius);
402 return TiST_exists(c1, c2) || TeST_exists(c1, c2);
416 theta = angle +
alpha;
424 theta = angle -
alpha;
432 theta = angle -
alpha;
440 theta = angle +
alpha;
487 TiST_tangent_circles(c1, c2, q1, q2);
493 TeST_tangent_circles(c1, c2, q1, q2);
499 if (TiST_exists(c1, c2))
501 return TiST_path(c1, c2, q1, q2);
503 if (TeST_exists(c1, c2))
505 return TeST_path(c1, c2, q1, q2);
507 return numeric_limits<double>::max();
539 return TiSTcT_exists(c1, c2) || TeSTcT_exists(c1, c2);
545 double theta = angle;
547 double delta_y =
pow(2 * r, 2) / distance;
548 double delta_x = 2 * r *
sqrt(1 - delta_y / distance);
554 TiST_tangent_circles(c1, tgt1, q1, q2);
555 TcT_tangent_circles(tgt1, c2, q3);
566 double theta = angle;
574 TeST_tangent_circles(c1, tgt1, q1, q2);
575 TcT_tangent_circles(tgt1, c2, q3);
586 if (TiSTcT_exists(c1, c2))
588 return TiSTcT_path(c1, c2, q1, q2, q3, ci);
590 if (TeSTcT_exists(c1, c2))
592 return TeSTcT_path(c1, c2, q1, q2, q3, ci);
594 return numeric_limits<double>::max();
626 return TcTiST_exists(c1, c2) || TcTeST_exists(c1, c2);
632 double theta = angle;
634 double delta_y =
pow(2 * r, 2) / distance;
635 double delta_x = 2 * r *
sqrt(1 - delta_y / distance);
641 TcT_tangent_circles(c1, tgt1, q1);
642 TiST_tangent_circles(tgt1, c2, q2, q3);
653 double theta = angle;
661 TcT_tangent_circles(c1, tgt1, q1);
662 TeST_tangent_circles(tgt1, c2, q2, q3);
673 if (TcTiST_exists(c1, c2))
675 return TcTiST_path(c1, c2, q1, q2, q3, ci);
677 if (TcTeST_exists(c1, c2))
679 return TcTeST_path(c1, c2, q1, q2, q3, ci);
681 return numeric_limits<double>::max();
713 return TcTiSTcT_exists(c1, c2) || TcTeSTcT_exists(c1, c2);
719 double theta = angle;
721 double delta_y =
pow(2 * r, 2) / distance;
722 double delta_x = 2 * r *
sqrt(1 - delta_y / distance);
730 TcT_tangent_circles(c1, tgt1, q1);
731 TiST_tangent_circles(tgt1, tgt2, q2, q3);
732 TcT_tangent_circles(tgt2, c2, q4);
744 double theta = angle;
754 TcT_tangent_circles(c1, tgt1, q1);
755 TeST_tangent_circles(tgt1, tgt2, q2, q3);
756 TcT_tangent_circles(tgt2, c2, q4);
768 if (TcTiSTcT_exists(c1, c2))
770 return TcTiSTcT_path(c1, c2, q1, q2, q3, q4, ci1, ci2);
772 if (TcTeSTcT_exists(c1, c2))
774 return TcTeSTcT_path(c1, c2, q1, q2, q3, q4, ci1, ci2);
776 return numeric_limits<double>::max();
796 double theta = angle;
797 double r1, r2, delta_x, delta_y, x, y;
802 delta_x = (distance + r1) / 2;
807 delta_x = (distance - r1) / 2;
821 TT_tangent_circles(c1, tgt1, q1);
822 TcT_tangent_circles(tgt1, tgt2, q2);
823 TT_tangent_circles(tgt2, c2, q3);
825 TT_tangent_circles(c1, tgt3, q4);
826 TcT_tangent_circles(tgt3, tgt4, q5);
827 TT_tangent_circles(tgt4, c2, q6);
834 TTcTT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd, &qe, &qf);
846 if (length1 < length2)
874 return numeric_limits<double>::max();
894 double theta = angle;
897 double delta_x = (
pow(r1, 2) +
pow(distance / 2, 2) -
pow(r2, 2)) / distance;
898 double delta_y =
sqrt(
pow(r1, 2) -
pow(delta_x, 2));
911 TcT_tangent_circles(c1, tgt1, q1);
912 TT_tangent_circles(tgt1, tgt2, q2);
913 TcT_tangent_circles(tgt2, c2, q3);
915 TcT_tangent_circles(c1, tgt3, q4);
916 TT_tangent_circles(tgt3, tgt4, q5);
917 TcT_tangent_circles(tgt4, c2, q6);
924 TcTTcT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd, &qe, &qf);
936 if (length1 < length2)
964 return numeric_limits<double>::max();
980 return distance <= 4 * c1.
radius;
986 double theta = angle;
988 double delta_x = 0.5 * distance;
989 double delta_y =
sqrt(
pow(r, 2) -
pow(delta_x, 2));
997 TT_tangent_circles(c1, tgt1, q1);
998 TT_tangent_circles(tgt1, c2, q2);
999 TT_tangent_circles(c1, tgt2, q3);
1000 TT_tangent_circles(tgt2, c2, q4);
1007 TTT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd);
1015 if (length1 < length2)
1035 return numeric_limits<double>::max();
1067 return TciST_exists(c1, c2) || TceST_exists(c1, c2);
1078 theta = angle -
alpha;
1086 theta = angle +
alpha;
1094 theta = angle +
alpha;
1102 theta = angle -
alpha;
1113 double theta = angle;
1150 if (TciST_exists(c1, c2))
1152 return TciST_path(c1, c2, q1, q2);
1154 if (TceST_exists(c1, c2))
1156 return TceST_path(c1, c2, q1, q2);
1158 return numeric_limits<double>::max();
1190 return TiScT_exists(c1, c2) || TeScT_exists(c1, c2);
1201 theta = angle +
alpha;
1209 theta = angle -
alpha;
1217 theta = angle -
alpha;
1225 theta = angle +
alpha;
1236 double theta = angle;
1273 if (TiScT_exists(c1, c2))
1275 return TiScT_path(c1, c2, q1, q2);
1277 if (TeScT_exists(c1, c2))
1279 return TeScT_path(c1, c2, q1, q2);
1281 return numeric_limits<double>::max();
1313 return TciScT_exists(c1, c2) || TceScT_exists(c1, c2);
1324 theta = angle -
alpha;
1332 theta = angle +
alpha;
1340 theta = angle +
alpha;
1348 theta = angle -
alpha;
1359 double theta = angle;
1396 if (TciScT_exists(c1, c2))
1398 return TciScT_path(c1, c2, q1, q2);
1400 if (TceScT_exists(c1, c2))
1402 return TceScT_path(c1, c2, q1, q2);
1404 return numeric_limits<double>::max();
1410 CC00_Reeds_Shepp_State_Space::CC00_Reeds_Shepp_State_Space(
double kappa,
double sigma,
double discretization)
1412 , cc00_reeds_shepp_{ unique_ptr<CC00_Reeds_Shepp>(
new CC00_Reeds_Shepp(
this)) }
1492 &qi2[hc_cc_rs::TcTcT], &ci1[hc_cc_rs::TcTcT]);
1501 &qi2[hc_cc_rs::TcTT], &ci1[hc_cc_rs::TcTT]);
1510 &qi2[hc_cc_rs::TTcT], &ci1[hc_cc_rs::TTcT]);
1518 &qi1[hc_cc_rs::TST], &qi2[hc_cc_rs::TST]);
1527 &qi2[hc_cc_rs::TSTcT], &qi3[hc_cc_rs::TSTcT], &ci1[hc_cc_rs::TSTcT]);
1536 &qi2[hc_cc_rs::TcTST], &qi3[hc_cc_rs::TcTST], &ci1[hc_cc_rs::TcTST]);
1544 *cstart[
hc_cc_rs::TcTSTcT], *cend[hc_cc_rs::TcTSTcT], &qi1[hc_cc_rs::TcTSTcT], &qi2[hc_cc_rs::TcTSTcT],
1545 &qi3[hc_cc_rs::TcTSTcT], &qi4[hc_cc_rs::TcTSTcT], &ci1[hc_cc_rs::TcTSTcT], &ci2[hc_cc_rs::TcTSTcT]);
1553 *cstart[
hc_cc_rs::TTcTT], *cend[hc_cc_rs::TTcTT], &qi1[hc_cc_rs::TTcTT], &qi2[hc_cc_rs::TTcTT],
1554 &qi3[hc_cc_rs::TTcTT], &ci1[hc_cc_rs::TTcTT], &ci2[hc_cc_rs::TTcTT]);
1562 *cstart[
hc_cc_rs::TcTTcT], *cend[hc_cc_rs::TcTTcT], &qi1[hc_cc_rs::TcTTcT], &qi2[hc_cc_rs::TcTTcT],
1563 &qi3[hc_cc_rs::TcTTcT], &ci1[hc_cc_rs::TcTTcT], &ci2[hc_cc_rs::TcTTcT]);
1572 &qi1[hc_cc_rs::TTT], &qi2[hc_cc_rs::TTT], &ci1[hc_cc_rs::TTT]);
1580 &qi1[hc_cc_rs::TcST], &qi2[hc_cc_rs::TcST]);
1588 &qi1[hc_cc_rs::TScT], &qi2[hc_cc_rs::TScT]);
1596 &qi1[hc_cc_rs::TcScT], &qi2[hc_cc_rs::TcScT]);
1603 qi3[best_path], qi4[best_path], cstart[best_path], cend[best_path], ci1[best_path],
1604 ci2[best_path], length[best_path]);
1642 HC_CC_RS_Path *
path[] = {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
1643 nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr };
1645 double lg[] = { numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
1646 numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
1647 numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
1648 numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
1649 numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
1650 numeric_limits<double>::max() };
1652 for (
int i = 0; i < 4; i++)
1654 for (
int j = 0; j < 4; j++)
1657 if (path[4 * i + j])
1659 lg[4 * i + j] = path[4 * i + j]->
length;
1682 for (
int i = 0; i < 4; i++)
1684 delete start_circle[i];
1685 delete end_circle[i];
1687 for (
int i = 0; i < 16; i++)
1694 return path[best_path];
1707 vector<Control> cc_rs_controls;
1708 cc_rs_controls.reserve(13);
1782 return cc_rs_controls;
const int nb_hc_cc_rs_paths
double get_epsilon()
Return value of epsilon.
bool TcTiST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
bool left
Turning direction: left/right.
double center_distance(const HC_CC_Circle &c1, const HC_CC_Circle &c2)
Cartesian distance between the centers of two circles.
HC_CC_RS_Path * cc00_reeds_shepp(const State &state1, const State &state2) const
Returns a sequence of turns and straight lines connecting a start and an end configuration.
double TcTTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci1, HC_CC_Circle **ci2) const
double sin_mu
Sine and cosine of mu.
An implementation of continuous curvature (CC) steer for a Reeds-Shepp car with zero curvature at the...
double TcTiST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci) const
double TeScT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
~CC00_Reeds_Shepp_State_Space()
Destructor.
bool TTcTT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TceST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double kappa_
Curvature, sharpness of clothoid.
bool TcTSTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
void pointer_array_init(void *array[], int size)
Initialize an array with nullptr.
bool TST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q) const
double cc_turn_length(const Configuration &q) const
Length of a cc-turn.
bool TcTTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
bool TiScT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
void TcTcT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4) const
bool configuration_on_hc_cc_circle(const HC_CC_Circle &c, const Configuration &q)
Configuration on the circle?
int array_index_min(double array[], int size)
Find index with minimal value in double array.
double TiST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double radius
Radius of the outer circle.
bool TceST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TcTeST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci) const
bool TcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
bool TceScT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
void TcT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q) const
HC_CC_RS_Path * cc00_circles_rs_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
Returns a sequence of turns and straight lines connecting the two circles c1 and c2.
std::vector< Control > get_controls(const State &state1, const State &state2) const
Returns controls of the shortest path from state1 to state2.
bool regular
Type of the circle: regular/irregular.
HC_CC_Circle_Param hc_cc_circle_param_
Parameters of a hc-/cc-circle.
double TciScT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double configuration_distance(const Configuration &q1, const Configuration &q2)
Cartesian distance between two configurations.
double TcTiSTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4, HC_CC_Circle **ci1, HC_CC_Circle **ci2) const
double TcST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
void TcTT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4) const
void cc_turn_controls(const HC_CC_Circle &c, const Configuration &q, bool order, std::vector< Control > &controls)
Appends controls with a cc-turn.
Configuration start
Start and end configuration.
void TTT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4) const
double TcTT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, HC_CC_Circle **ci) const
double TciST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
bool TeST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
TFSIMD_FORCE_INLINE tfScalar angle(const Quaternion &q1, const Quaternion &q2)
double TTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, HC_CC_Circle **ci) const
double TScT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double TTT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, HC_CC_Circle **ci) const
bool TiSTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
void TT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q) const
bool TciScT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
HC_CC_Circle * cstart
Start, end and intermediate circles.
bool TcTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
void straight_controls(const Configuration &q1, const Configuration &q2, std::vector< Control > &controls)
Appends controls with a straight line.
CC00_Reeds_Shepp(CC00_Reeds_Shepp_State_Space *parent)
double distance(double x0, double y0, double x1, double y1)
void double_array_init(double array[], int size, double value)
Initialize an array with a given value.
void TTcTT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4, Configuration **q5, Configuration **q6) const
double TST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double x
Position in x of the robot.
bool configuration_equal(const Configuration &q1, const Configuration &q2)
Are two configurations equal?
bool TT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TcTeSTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4, HC_CC_Circle **ci1, HC_CC_Circle **ci2) const
double length
Path length.
double TcScT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
INLINE Rall1d< T, V, S > asin(const Rall1d< T, V, S > &x)
void global_frame_change(double x, double y, double theta, double local_x, double local_y, double *global_x, double *global_y)
Transformation of (local_x, local_y) from local coordinate system to global one.
bool TcTeST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TTcTT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci1, HC_CC_Circle **ci2) const
bool forward
Driving direction: forwards/backwards.
bool TTT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TiSTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci) const
INLINE Rall1d< T, V, S > sqrt(const Rall1d< T, V, S > &arg)
bool TciST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
hc_cc_rs::path_type type
Path type.
void TTcT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4) const
Description of a kinematic car's state.
double TcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q) const
bool TcScT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
CC00_Reeds_Shepp_State_Space * parent_
double mu
Angle between the initial orientation and the tangent to the circle at the initial position...
double TcTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, HC_CC_Circle **ci) const
INLINE Rall1d< T, V, S > pow(const Rall1d< T, V, S > &arg, double m)
void TeST_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
bool configuration_aligned(const Configuration &q1, const Configuration &q2)
Are two configurations aligned?
bool TScT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TiScT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double TSTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci) const
bool TeScT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
bool TSTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
INLINE Rall1d< T, V, S > atan2(const Rall1d< T, V, S > &y, const Rall1d< T, V, S > &x)
double TeSTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci) const
void TcTTcT_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4, Configuration **q5, Configuration **q6) const
void empty_controls(std::vector< Control > &controls)
Appends controls with 0 input.
double get_distance(const State &state1, const State &state2) const
Returns shortest path length from state1 to state2.
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
bool TeSTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
std::unique_ptr< CC00_Reeds_Shepp > cc00_reeds_shepp_
Pimpl Idiom: unique pointer on class with families.
Configuration start
Start configuration.
void TiST_tangent_circles(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
bool TTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
bool TcTST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double xc
Center of the circle.
bool TcST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TcTSTcT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, Configuration **q4, HC_CC_Circle **ci1, HC_CC_Circle **ci2) const
bool TcTeSTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double TceScT_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
bool TiST_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
bool TcTT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
double y
Position in y of the robot.
double TeST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2) const
double theta
Orientation of the robot.
bool TcTiSTcT_exists(const HC_CC_Circle &c1, const HC_CC_Circle &c2) const
Configuration * qi1
Intermediate configurations.
double TcTST_path(const HC_CC_Circle &c1, const HC_CC_Circle &c2, Configuration **q1, Configuration **q2, Configuration **q3, HC_CC_Circle **ci) const