65 std::vector<HybridAStartResult>* partitioned_result);
68 bool AnalyticExpansion(
69 std::shared_ptr<Node3d> current_node,
70 std::shared_ptr<Node3d>* candidate_final_node);
72 bool ValidityCheck(std::shared_ptr<Node3d> node);
74 bool RSPCheck(
const std::shared_ptr<ReedSheppPath> reeds_shepp_to_end);
76 std::shared_ptr<Node3d> LoadRSPinCS(
77 const std::shared_ptr<ReedSheppPath> reeds_shepp_to_end,
78 std::shared_ptr<Node3d> current_node);
79 std::shared_ptr<Node3d> Next_node_generator(
80 std::shared_ptr<Node3d> current_node,
81 size_t next_node_index);
82 void CalculateNodeCost(
83 std::shared_ptr<Node3d> current_node,
84 std::shared_ptr<Node3d> next_node);
86 std::shared_ptr<Node3d> current_node,
87 std::shared_ptr<Node3d> next_node);
88 double HoloObstacleHeuristic(std::shared_ptr<Node3d> next_node);
98 size_t next_node_num_ = 0;
99 double max_steer_angle_ = 0.0;
100 double max_kappa_ = 0.0;
101 double step_size_ = 0.0;
102 double xy_grid_resolution_ = 0.0;
103 double delta_t_ = 0.0;
104 double traj_forward_penalty_ = 0.0;
105 double traj_back_penalty_ = 0.0;
106 double traj_gear_switch_penalty_ = 0.0;
107 double traj_steer_penalty_ = 0.0;
108 double traj_steer_change_penalty_ = 0.0;
109 double soft_boundary_penalty_ = 0.0;
110 double heu_rs_forward_penalty_ = 0.0;
111 double heu_rs_back_penalty_ = 0.0;
112 double heu_rs_gear_switch_penalty_ = 0.0;
113 double heu_rs_steer_penalty_ = 0.0;
114 double heu_rs_steer_change_penalty_ = 0.0;
115 double acc_weight_ = 0.0;
116 double jerk_weight_ = 0.0;
117 double kappa_penalty_weight_ = 0.0;
118 double ref_s_weight_ = 0.0;
119 double ref_v_weight_ = 0.0;
120 double max_forward_v_ = 0.0;
121 double max_reverse_v_ = 0.0;
122 double max_forward_acc_ = 0.0;
123 double max_reverse_acc_ = 0.0;
124 double max_acc_jerk_ = 0.0;
125 double arc_length_ = 0.0;
126 std::vector<double> XYbounds_;
127 std::shared_ptr<Node3d> start_node_;
128 std::shared_ptr<Node3d> end_node_;
129 std::shared_ptr<Node3d> final_node_;
130 std::vector<std::vector<common::math::LineSegment2d>>
131 obstacles_linesegments_vec_;
135 const std::pair<std::shared_ptr<Node3d>,
double>& left,
136 const std::pair<std::shared_ptr<Node3d>,
double>& right)
const {
137 return left.second >= right.second;
141 std::pair<std::shared_ptr<Node3d>,
double>,
142 std::vector<std::pair<std::shared_ptr<Node3d>,
double>>,
145 std::unordered_set<std::string> open_set_;
146 std::unordered_set<std::string> close_set_;
147 std::unique_ptr<ReedShepp> reed_shepp_generator_;
148 std::unique_ptr<GridSearch> grid_a_star_heuristic_generator_;
161 const std::vector<double>& XYbounds,
162 const std::vector<std::vector<common::math::Vec2d>>&
163 obstacles_vertices_vec,
165 const std::vector<std::vector<common::math::Vec2d>>&
166 soft_boundary_vertices_vec = {},
167 bool reeds_sheep_last_straight =
false);
170 double GetSoftBoundaryCost(
171 const std::shared_ptr<ReedSheppPath>& reeds_shepp_to_end);
172 bool RSPLengthCheck(
const std::shared_ptr<ReedSheppPath> reeds_shepp_path);
175 std::vector<std::vector<common::math::LineSegment2d>>
176 soft_boundary_linesegments_vec_;
177 double traj_expected_shortest_length_ = 0.0;
178 double traj_short_length_penalty_ = 0.0;
bool Plan(double sx, double sy, double sphi, double ex, double ey, double ephi, const std::vector< double > &XYbounds, const std::vector< std::vector< common::math::Vec2d > > &obstacles_vertices_vec, HybridAStartResult *result, const std::vector< std::vector< common::math::Vec2d > > &soft_boundary_vertices_vec={}, bool reeds_sheep_last_straight=false)