27 #include <unordered_map> 31 #include "absl/strings/str_cat.h" 34 #include "modules/planning/proto/planner_open_space_config.pb.h" 41 Node2d(
const double x,
const double y,
const double xy_resolution,
42 const std::vector<double>& XYbounds) {
44 grid_x_ =
static_cast<int>((x - XYbounds[0]) / xy_resolution);
45 grid_y_ =
static_cast<int>((y - XYbounds[2]) / xy_resolution);
46 index_ = ComputeStringIndex(grid_x_, grid_y_);
48 Node2d(
const int grid_x,
const int grid_y,
49 const std::vector<double>& XYbounds) {
52 index_ = ComputeStringIndex(grid_x_, grid_y_);
55 path_cost_ = path_cost;
56 cost_ = path_cost_ + heuristic_;
59 heuristic_ = heuristic;
60 cost_ = path_cost_ + heuristic_;
62 void SetCost(
const double cost) { cost_ = cost; }
63 void SetPreNode(std::shared_ptr<Node2d> pre_node) { pre_node_ = pre_node; }
69 const std::string&
GetIndex()
const {
return index_; }
70 std::shared_ptr<Node2d>
GetPreNode()
const {
return pre_node_; }
71 static std::string
CalcIndex(
const double x,
const double y,
72 const double xy_resolution,
73 const std::vector<double>& XYbounds) {
75 int grid_x =
static_cast<int>((x - XYbounds[0]) / xy_resolution);
76 int grid_y =
static_cast<int>((y - XYbounds[2]) / xy_resolution);
77 return ComputeStringIndex(grid_x, grid_y);
84 static std::string ComputeStringIndex(
int x_grid,
int y_grid) {
85 return absl::StrCat(x_grid,
"_", y_grid);
91 double path_cost_ = 0.0;
92 double heuristic_ = 0.0;
95 std::shared_ptr<Node2d> pre_node_ =
nullptr;
99 std::vector<double>
x;
100 std::vector<double>
y;
101 double path_cost = 0.0;
106 explicit GridSearch(
const PlannerOpenSpaceConfig& open_space_conf);
108 bool GenerateAStarPath(
109 const double sx,
const double sy,
const double ex,
const double ey,
110 const std::vector<double>& XYbounds,
111 const std::vector<std::vector<common::math::LineSegment2d>>&
112 obstacles_linesegments_vec,
115 const double ex,
const double ey,
const std::vector<double>& XYbounds,
116 const std::vector<std::vector<common::math::LineSegment2d>>&
117 obstacles_linesegments_vec);
118 double CheckDpMap(
const double sx,
const double sy);
121 double EuclidDistance(
const double x1,
const double y1,
const double x2,
123 std::vector<std::shared_ptr<Node2d>> GenerateNextNodes(
124 std::shared_ptr<Node2d> node);
125 bool CheckConstraints(std::shared_ptr<Node2d> node);
129 double xy_grid_resolution_ = 0.0;
130 double node_radius_ = 0.0;
131 std::vector<double> XYbounds_;
132 double max_grid_x_ = 0.0;
133 double max_grid_y_ = 0.0;
134 std::shared_ptr<Node2d> start_node_;
135 std::shared_ptr<Node2d> end_node_;
136 std::shared_ptr<Node2d> final_node_;
137 std::vector<std::vector<common::math::LineSegment2d>>
138 obstacles_linesegments_vec_;
141 bool operator()(
const std::pair<std::string, double>& left,
142 const std::pair<std::string, double>& right)
const {
143 return left.second >= right.second;
146 std::unordered_map<std::string, std::shared_ptr<Node2d>> dp_map_;
std::vector< double > y
Definition: grid_search.h:100
std::vector< double > x
Definition: grid_search.h:99
Define the LineSegment2d class.
void SetPathCost(const double path_cost)
Definition: grid_search.h:54
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
double GetHeuCost() const
Definition: grid_search.h:67
double GetGridY() const
Definition: grid_search.h:65
bool operator==(const Node2d &right) const
Definition: grid_search.h:79
Planning module main class. It processes GPS and IMU as input, to generate planning info...
void SetCost(const double cost)
Definition: grid_search.h:62
double GetCost() const
Definition: grid_search.h:68
Definition: grid_search.h:98
void SetPreNode(std::shared_ptr< Node2d > pre_node)
Definition: grid_search.h:63
Definition: grid_search.h:104
Definition: grid_search.h:39
const std::string & GetIndex() const
Definition: grid_search.h:69
double GetPathCost() const
Definition: grid_search.h:66
Node2d(const int grid_x, const int grid_y, const std::vector< double > &XYbounds)
Definition: grid_search.h:48
void SetHeuristic(const double heuristic)
Definition: grid_search.h:58
static std::string CalcIndex(const double x, const double y, const double xy_resolution, const std::vector< double > &XYbounds)
Definition: grid_search.h:71
Node2d(const double x, const double y, const double xy_resolution, const std::vector< double > &XYbounds)
Definition: grid_search.h:41
std::shared_ptr< Node2d > GetPreNode() const
Definition: grid_search.h:70
double GetGridX() const
Definition: grid_search.h:64