29 CC_Dubins_State_Space::CC_Dubins_State_Space(
double kappa,
double sigma,
double discretization,
bool forwards)
32 , cc00_dubins_state_space_(
kappa, sigma, discretization, forwards)
33 , cc0pm_dubins_state_space_(
kappa, sigma, discretization, forwards)
34 , ccpm0_dubins_state_space_(
kappa, sigma, discretization, forwards)
35 , ccpmpm_dubins_state_space_(
kappa, sigma, discretization, forwards)
41 vector<pair<State, Control>> states_controls;
46 pair<State, Control> state_control;
47 state_control.first = state;
48 state_control.second.delta_s = 0.0;
50 state_control.second.sigma = 0.0;
51 states_controls.push_back(state_control);
52 return states_controls;
55 states_controls.reserve(2);
57 pair<State, Control> state_control1, state_control2;
63 state_control1.second.kappa = state.
kappa;
64 state_control1.second.sigma = sgn_kappa *
sigma_;
65 states_controls.push_back(state_control1);
67 state_control2.second.delta_s = sgn_kappa * state.
kappa /
sigma_;
68 state_control2.second.kappa = state.
kappa;
69 state_control2.second.sigma = -sgn_kappa *
sigma_;
70 states_controls.push_back(state_control2);
75 state_control1.second.kappa = state.
kappa;
76 state_control1.second.sigma = sgn_kappa *
sigma_;
77 states_controls.push_back(state_control1);
79 state_control2.second.delta_s = -sgn_kappa * state.
kappa /
sigma_;
80 state_control2.second.kappa = state.
kappa;
81 state_control2.second.sigma = -sgn_kappa *
sigma_;
82 states_controls.push_back(state_control2);
86 for (
auto &state_control : states_controls)
88 double d =
sgn(state_control.second.delta_s);
89 double abs_delta_s = fabs(state_control.second.delta_s);
90 double sigma = state_control.second.sigma;
92 &state_control.first.y, &state_control.first.theta, &state_control.first.kappa);
94 return states_controls;
101 vector<double> distances;
102 distances.reserve(16);
105 for (
const auto &start_state_control : start_states_controls)
107 State start_state = start_state_control.first;
108 Control start_control = start_state_control.second;
109 for (
const auto &end_state_control : end_states_controls)
111 State end_state = end_state_control.first;
112 Control end_control = end_state_control.second;
117 distances.push_back(fabs(control.
delta_s));
146 return *min_element(distances.begin(), distances.end());
153 vector<pair<vector<Control>,
double>> cc_dubins_controls_distance_pairs;
154 cc_dubins_controls_distance_pairs.reserve(16);
157 for (
const auto &start_state_control : start_states_controls)
159 State start_state = start_state_control.first;
160 Control start_control = start_state_control.second;
161 for (
const auto &end_state_control : end_states_controls)
163 State end_state = end_state_control.first;
164 Control end_control = end_state_control.second;
165 vector<Control> cc_dubins_controls;
170 cc_dubins_controls.push_back(control);
192 cc_dubins_controls.insert(cc_dubins_controls.begin(), start_control);
197 cc_dubins_controls.insert(cc_dubins_controls.end(), end_control);
203 for (
const auto &control : cc_dubins_controls)
207 pair<vector<Control>,
double> cc_dubins_controls_distance_pair;
208 cc_dubins_controls_distance_pair.first = cc_dubins_controls;
209 cc_dubins_controls_distance_pair.second =
distance;
210 cc_dubins_controls_distance_pairs.push_back(cc_dubins_controls_distance_pair);
215 sort(cc_dubins_controls_distance_pairs.begin(), cc_dubins_controls_distance_pairs.end(),
216 [](
const pair<vector<Control>,
double> &i,
const pair<vector<Control>,
double> &j) {
217 return i.second < j.second;
220 return cc_dubins_controls_distance_pairs[0].first;