8 #ifndef MPL_PLANNER_BASE_H 9 #define MPL_PLANNER_BASE_H 18 template <
int Dim,
typename Coord>
32 for (
const auto &it :
ss_ptr_->hm_) {
33 if (it.second && !it.second->pred_coord.empty()) {
34 for (
unsigned int i = 0; i < it.second->pred_coord.size(); i++) {
35 Coord key = it.second->pred_coord[i];
38 if (std::isinf(it.second->pred_action_cost[i]))
continue;
41 it.second->pred_action_id[i], pr);
48 printf(
"number of states in hm: %zu, number of valid prs: %zu\n",
49 ss_ptr_->hm_.size(), prs.size());
57 for (
const auto &it :
ss_ptr_->hm_) {
58 if (it.second && !it.second->pred_coord.empty()) {
59 for (
unsigned int i = 0; i < it.second->pred_coord.size(); i++) {
60 Coord key = it.second->pred_coord[i];
62 ENV_->forward_action(key, it.second->pred_action_id[i], pr);
70 "getAllPrimitives number of states in hm: %zu, number of prs: %zu\n",
71 ss_ptr_->hm_.size(), prs.size());
79 for (
const auto &it :
ss_ptr_->pq_) ps.push_back(it.second->coord.pos);
86 for (
const auto &it :
ss_ptr_->hm_) {
87 if (it.second && it.second->iterationclosed)
88 ps.push_back(it.second->coord.pos);
96 for (
const auto &it :
ss_ptr_->hm_) {
97 if (it.second && !it.second->iterationopened)
98 ps.push_back(it.second->coord.pos);
108 for (
const auto &it :
ss_ptr_->hm_) {
110 auto coord = it.second->coord;
112 if (state.use_vel && (state.vel - coord.vel).norm() > 1e-3) add =
false;
113 if (state.use_acc && (state.acc - coord.acc).norm() > 1e-3) add =
false;
114 if (state.use_jrk && (state.jrk - coord.jrk).norm() > 1e-3) add =
false;
119 ps.push_back(coord.pos);
121 for (
const auto &it : vels) {
122 if ((it - coord.vel).norm() < 1e-3) {
128 if (new_vel) vels.push_back(coord.vel);
133 for (
const auto &it : vels)
134 std::cout <<
"vel: " << it.transpose() << std::endl;
135 std::cout <<
"=========================" << std::endl;
144 return ENV_->expanded_edges_;
173 printf(
"[PlannerBase] use Lifelong Planning A*\n");
175 printf(
"[PlannerBase] use normal A*\n");
198 ENV_->set_yaw_max(yaw);
234 ENV_->set_heur_ignore_dynamics(ignore);
236 printf(
"[PlannerBase] set heur_ignore_dynamics: %d\n", ignore);
250 ENV_->set_prior_trajectory(traj);
257 ENV_->set_tol_pos(tol_pos);
258 ENV_->set_tol_vel(tol_vel);
259 ENV_->set_tol_acc(tol_acc);
261 printf(
"[PlannerBase] set tol_pos: %f\n", tol_pos);
262 printf(
"[PlannerBase] set tol_vel: %f\n", tol_vel);
263 printf(
"[PlannerBase] set tol_acc: %f\n", tol_acc);
275 bool plan(
const Coord &start,
const Coord &goal) {
277 start.print(
"Start:");
283 if (!
ENV_->is_free(start.pos)) {
289 std::unique_ptr<MPL::GraphSearch<Dim, Coord>> planner_ptr(
306 ENV_->set_goal(goal);
308 ENV_->expanded_nodes_.clear();
309 ENV_->expanded_edges_.clear();
329 std::shared_ptr<MPL::env_base<Dim>>
ENV_;
331 std::shared_ptr<MPL::StateSpace<Dim, Coord>>
ss_ptr_;
Trajectory< Dim > getTraj() const
Get optimal trajectory.
Definition: planner_base.h:28
void setMaxNum(int num)
Set max number of expansion.
Definition: planner_base.h:240
bool planner_verbose_
Enabled to display debug message.
Definition: planner_base.h:343
void setJmax(decimal_t j)
Set max jerk in each axis.
Definition: planner_base.h:191
bool use_lpastar_
Enable LPAstar for planning.
Definition: planner_base.h:341
vec_E< Primitive< Dim > > getExpandedEdges() const
Get expanded edges, for A* it should be the same as the close set.
Definition: planner_base.h:143
Definition: map_util.h:12
void reset()
Reset state space.
Definition: planner_base.h:164
std::shared_ptr< MPL::env_base< Dim > > ENV_
Environment class.
Definition: planner_base.h:329
std::shared_ptr< MPL::StateSpace< Dim, Coord > > ss_ptr_
Planner workspace.
Definition: planner_base.h:331
void getSubStateSpace(int time_step)
Prune state space.
Definition: planner_base.h:155
#define ANSI_COLOR_RED
Set red font in printf funtion.
Definition: data_type.h:16
bool initialized()
Check if the planner has been initialized.
Definition: planner_base.h:25
void setTmax(decimal_t t)
Set max time step to explore.
Definition: planner_base.h:203
vec_Vecf< Dim > getCloseSet() const
Get points in close set.
Definition: planner_base.h:84
backend of graph search, implemetation of A* and Lifelong Planning A*
GraphSearch class.
Definition: graph_search.h:20
void setDt(decimal_t dt)
Set dt for each primitive.
Definition: planner_base.h:209
Trajectory class.
Definition: trajectory.h:43
void checkValidation()
Check tree validation.
Definition: planner_base.h:161
void setYawmax(decimal_t yaw)
Set max jerk in each axis.
Definition: planner_base.h:197
vec_Vecf< Dim > getStates(const Coord &state) const
Get points at certain state.
Definition: planner_base.h:104
vec_E< Primitive< Dim > > getValidPrimitives() const
Get expanded collision free primitives.
Definition: planner_base.h:30
bool plan(const Coord &start, const Coord &goal)
Planning thread.
Definition: planner_base.h:275
void setWyaw(decimal_t w)
Set weight for cost in time.
Definition: planner_base.h:221
#define ANSI_COLOR_CYAN
Set cyan font in printf funtion.
Definition: data_type.h:36
int max_num_
Maxmum number of expansion, -1 means no limitation.
Definition: planner_base.h:339
std::vector< T, Eigen::aligned_allocator< T > > vec_E
Pre-allocated std::vector for Eigen using vec_E.
Definition: data_type.h:53
decimal_t getTrajCost() const
Get trajectory total cost.
Definition: planner_base.h:158
vec_E< Vecf< N > > vec_Vecf
Vector of Eigen 1D float vector.
Definition: data_type.h:70
vec_Vecf< Dim > getNullSet() const
Get points neither in open nor close set.
Definition: planner_base.h:94
void setPriorTrajectory(const Trajectory< Dim > &traj)
Set prior trajectory.
Definition: planner_base.h:249
void setTol(decimal_t tol_pos, decimal_t tol_vel=-1, decimal_t tol_acc=-1)
Set tolerance in geometric and dynamic spaces.
Definition: planner_base.h:255
State space.
Definition: state_space.h:83
double decimal_t
Rename the float type used in lib.
Definition: data_type.h:49
void setW(decimal_t w)
Set weight for cost in time.
Definition: planner_base.h:215
decimal_t traj_cost_
Total cost of final trajectory.
Definition: planner_base.h:335
void setHeurIgnoreDynamics(bool ignore)
Calculate heuristic using dynamics.
Definition: planner_base.h:233
vec_Vecf< Dim > getExpandedNodes() const
Get expanded nodes, for A* it should be the same as the close set.
Definition: planner_base.h:140
#define ANSI_COLOR_RESET
Reset font color in printf funtion.
Definition: data_type.h:40
void setU(const vec_E< VecDf > &U)
Set U.
Definition: planner_base.h:246
void setVmax(decimal_t v)
Set max vel in each axis.
Definition: planner_base.h:179
void setLPAstar(bool use_lpastar)
Set max vel in each axis.
Definition: planner_base.h:170
Primitive class.
Definition: primitive.h:206
vec_Vecf< Dim > getOpenSet() const
Get points in open set.
Definition: planner_base.h:77
void setAmax(decimal_t a)
Set max acc in each axis.
Definition: planner_base.h:185
PlannerBase(bool verbose=false)
Simple constructor.
Definition: planner_base.h:22
decimal_t epsilon_
Greedy searching parameter.
Definition: planner_base.h:337
vec_E< Primitive< Dim > > getAllPrimitives() const
Get expanded primitives.
Definition: planner_base.h:55
Trajectory< Dim > traj_
Optimal trajectory.
Definition: planner_base.h:333
int getExpandedNum() const
Get number of expanded nodes.
Definition: planner_base.h:148
Motion planning base util class.
Definition: planner_base.h:19
void setEpsilon(decimal_t eps)
Set greedy searching param.
Definition: planner_base.h:227