30 HC_Reeds_Shepp_State_Space::HC_Reeds_Shepp_State_Space(
double kappa,
double sigma,
double discretization)
32 , hc00_reeds_shepp_state_space_(
kappa, sigma, discretization)
33 , hc0pm_reeds_shepp_state_space_(
kappa, sigma, discretization)
34 , hcpm0_reeds_shepp_state_space_(
kappa, sigma, discretization)
35 , hcpmpm_reeds_shepp_state_space_(
kappa, sigma, discretization)
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(4);
57 pair<State, Control> state_control1, state_control2, state_control3, state_control4;
61 state_control1.second.kappa = state.
kappa;
62 state_control1.second.sigma = sgn_kappa *
sigma_;
63 states_controls.push_back(state_control1);
65 state_control2.second.delta_s = -state_control1.second.delta_s;
66 state_control2.second.kappa = state.
kappa;
67 state_control2.second.sigma = state_control1.second.sigma;
68 states_controls.push_back(state_control2);
70 state_control3.second.delta_s = sgn_kappa * state.
kappa /
sigma_;
71 state_control3.second.kappa = state.
kappa;
72 state_control3.second.sigma = -sgn_kappa *
sigma_;
73 states_controls.push_back(state_control3);
75 state_control4.second.delta_s = -state_control3.second.delta_s;
76 state_control4.second.kappa = state.
kappa;
77 state_control4.second.sigma = state_control3.second.sigma;
78 states_controls.push_back(state_control4);
81 for (
auto &state_control : states_controls)
83 double d =
sgn(state_control.second.delta_s);
84 double abs_delta_s = fabs(state_control.second.delta_s);
85 double sigma = state_control.second.sigma;
87 &state_control.first.y, &state_control.first.theta, &state_control.first.kappa);
89 return states_controls;
94 vector<pair<State, Control>> start_states_controls = this->
predict_state(state1);
95 vector<pair<State, Control>> end_states_controls = this->
predict_state(state2);
96 vector<double> distances;
97 distances.reserve(16);
100 for (
const auto &start_state_control : start_states_controls)
102 State start_state = start_state_control.first;
103 Control start_control = start_state_control.second;
104 for (
const auto &end_state_control : end_states_controls)
106 State end_state = end_state_control.first;
107 Control end_control = end_state_control.second;
112 distances.push_back(fabs(control.
delta_s));
141 return *min_element(distances.begin(), distances.end());
146 vector<pair<State, Control>> start_states_controls = this->
predict_state(state1);
147 vector<pair<State, Control>> end_states_controls = this->
predict_state(state2);
148 vector<pair<vector<Control>,
double>> hc_rs_controls_distance_pairs;
149 hc_rs_controls_distance_pairs.reserve(16);
152 for (
const auto &start_state_control : start_states_controls)
154 State start_state = start_state_control.first;
155 Control start_control = start_state_control.second;
156 for (
const auto &end_state_control : end_states_controls)
158 State end_state = end_state_control.first;
159 Control end_control = end_state_control.second;
160 vector<Control> hc_rs_controls;
165 hc_rs_controls.push_back(control);
187 hc_rs_controls.insert(hc_rs_controls.begin(), start_control);
192 hc_rs_controls.insert(hc_rs_controls.end(), end_control);
198 for (
const auto &control : hc_rs_controls)
202 pair<vector<Control>,
double> hc_rs_controls_distance_pair;
203 hc_rs_controls_distance_pair.first = hc_rs_controls;
204 hc_rs_controls_distance_pair.second =
distance;
205 hc_rs_controls_distance_pairs.push_back(hc_rs_controls_distance_pair);
210 sort(hc_rs_controls_distance_pairs.begin(), hc_rs_controls_distance_pairs.end(),
211 [](
const pair<vector<Control>,
double> &i,
const pair<vector<Control>,
double> &j) {
212 return i.second < j.second;
215 return hc_rs_controls_distance_pairs[0].first;