24 if (state.
t >=
t_max_)
return true;
26 (state.
pos -
goal_node_.pos).
template lpNorm<Eigen::Infinity>() <=
30 (state.
vel -
goal_node_.vel).
template lpNorm<Eigen::Infinity>() <=
34 (state.
acc -
goal_node_.acc).
template lpNorm<Eigen::Infinity>() <=
48 size_t id = state.
t /
dt_;
60 return w_ * (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>() /
63 return w_ * (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>();
67 if (state.
control == Control::JRK && goal.
control == Control::JRK) {
75 decimal_t c = -9 * a0.dot(a0) + 6 * a0.dot(a1) - 9 * a1.dot(a1);
76 decimal_t d = -144 * a0.dot(v0) - 96 * a0.dot(v1) + 96 * a1.dot(v0) +
78 decimal_t e = 360 * (a0 - a1).dot(dp) - 576 * v0.dot(v0) -
79 1008 * v0.dot(v1) - 576 * v1.dot(v1);
83 std::vector<decimal_t> ts =
solve(a, b, c, d, e, f, g);
86 (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>() /
v_max_;
88 decimal_t min_cost = std::numeric_limits<decimal_t>::max();
90 if (t < t_bar)
continue;
91 decimal_t cost = a * t - c / t - d / 2 / t / t - e / 3 / t / t / t -
92 f / 4 / t / t / t / t - g / 5 / t / t / t / t / t;
93 if (cost < min_cost) min_cost = cost;
98 else if (state.
control == Control::JRK && goal.
control == Control::ACC) {
107 decimal_t d = -112 * a0.dot(v0) - 48 * a0.dot(v1);
108 decimal_t e = 240 * a0.dot(dp) - 384 * v0.dot(v0) - 432 * v0.dot(v1) -
110 decimal_t f = dp.dot(1600 * v0 + 960 * v1);
113 std::vector<decimal_t> ts =
solve(a, b, c, d, e, f, g);
116 (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>() /
v_max_;
118 decimal_t min_cost = std::numeric_limits<decimal_t>::max();
120 if (t < t_bar)
continue;
121 decimal_t cost = a * t - c / t - d / 2 / t / t - e / 3 / t / t / t -
122 f / 4 / t / t / t / t - g / 5 / t / t / t / t / t;
123 if (cost < min_cost) min_cost = cost;
129 else if (state.
control == Control::JRK && goal.
control == Control::VEL) {
138 decimal_t e = 60 * a0.dot(dp) - 60 * v0.dot(v0);
142 std::vector<decimal_t> ts =
solve(a, b, c, d, e, f, g);
145 (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>() /
v_max_;
148 decimal_t min_cost = std::numeric_limits<decimal_t>::max();
150 if (t < t_bar)
continue;
151 decimal_t cost = a * t - c / t - d / 2 / t / t - e / 3 / t / t / t -
152 f / 4 / t / t / t / t - g / 5 / t / t / t / t / t;
153 if (cost < min_cost) min_cost = cost;
158 else if (state.
control == Control::ACC && goal.
control == Control::ACC) {
165 decimal_t c3 = -4 * (v0.dot(v0) + v0.dot(v1) + v1.dot(v1));
169 std::vector<decimal_t> ts =
quartic(c5, c4, c3, c2, c1);
171 (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>() /
v_max_;
174 decimal_t cost = std::numeric_limits<decimal_t>::max();
176 if (t < t_bar)
continue;
177 decimal_t c = -c1 / 3 / t / t / t - c2 / 2 / t / t - c3 / t +
w_ * t;
178 if (c < cost) cost = c;
184 else if (state.
control == Control::ACC && goal.
control == Control::VEL) {
194 std::vector<decimal_t> ts =
quartic(c5, c4, c3, c2, c1);
196 (state.
pos - goal.
pos).
template lpNorm<Eigen::Infinity>() /
v_max_;
199 decimal_t cost = std::numeric_limits<decimal_t>::max();
201 if (t < t_bar)
continue;
202 decimal_t c = -c1 / 3 / t / t / t - c2 / 2 / t / t - c3 / t +
w_ * t;
203 if (c < cost) cost = c;
207 }
else if (state.
control == Control::VEL && goal.
control == Control::VEL)
208 return (
w_ + 1) * (state.
pos - goal.
pos).norm();
216 for (
int i = 0; i < Dim; i++) vecI(i) = std::round(vec(i) / res);
223 for (
int i = 0; i < Dim; i++) str += std::to_string(vec(i)) +
"-";
254 std::make_pair(traj.
evaluate(t),
w_ * (total_time - t)));
311 printf(
"++++++++++++++++++++ env_base ++++++++++++++++++\n");
312 printf(
"+ w: %.2f +\n",
w_);
313 printf(
"+ wyaw: %.2f +\n",
wyaw_);
314 printf(
"+ dt: %.2f +\n",
dt_);
315 printf(
"+ t_max: %.2f +\n",
t_max_);
316 printf(
"+ v_max: %.2f +\n",
v_max_);
317 printf(
"+ a_max: %.2f +\n",
a_max_);
318 printf(
"+ j_max: %.2f +\n",
j_max_);
319 printf(
"+ yaw_max: %.2f +\n",
yaw_max_);
320 printf(
"+ U num: %zu +\n",
U_.size());
321 printf(
"+ tol_pos: %.2f +\n",
tol_pos_);
322 printf(
"+ tol_vel: %.2f +\n",
tol_vel_);
323 printf(
"+ tol_acc: %.2f +\n",
tol_acc_);
324 printf(
"+ tol_yaw: %.2f +\n",
tol_yaw_);
325 printf(
"+heur_ignore_dynamics: %d +\n",
327 printf(
"++++++++++++++++++++ env_base ++++++++++++++++++\n");
333 printf(
"Used Null is_free() for pt\n");
339 printf(
"Used Null is_free() for pr\n");
359 std::vector<decimal_t>& succ_cost,
360 std::vector<int>& action_idx)
const {
361 printf(
"Used Null get_succ()\n");
virtual void get_succ(const Waypoint< Dim > &curr, vec_E< Waypoint< Dim >> &succ, std::vector< decimal_t > &succ_cost, std::vector< int > &action_idx) const
Get successor.
Definition: env_base.h:358
virtual decimal_t cal_heur(const Waypoint< Dim > &state, const Waypoint< Dim > &goal) const
calculate the cost from state to goal
Definition: env_base.h:56
vec_E< std::pair< Waypoint< Dim >, decimal_t > > prior_traj_
Prior trajectory.
Definition: env_base.h:398
Waypoint< Dim > evaluate(decimal_t time) const
Evaluate Waypoint at time .
Definition: trajectory.h:67
std::vector< decimal_t > quartic(decimal_t a, decimal_t b, decimal_t c, decimal_t d, decimal_t e)
Quartic equation: .
Definition: math.h:69
std::vector< bool > search_region_
Valid search region (tunnel constraint)
Definition: env_base.h:400
decimal_t tol_vel_
tolerance of velocity for goal region, 0 means no tolerance
Definition: env_base.h:376
vec_E< Primitive< Dim > > expanded_edges_
expanded edges for debug
Definition: env_base.h:404
Definition: map_util.h:12
void forward_action(const Waypoint< Dim > &curr, int action_id, Primitive< Dim > &pr) const
Recover trajectory.
Definition: env_base.h:228
decimal_t wyaw_
weight of yaw
Definition: env_base.h:372
virtual void set_gradient_map(const vec_E< Vecf< Dim >> &map)
set weight for cost in time, usually no need to change
Definition: env_base.h:289
decimal_t J(const Control::Control &control) const
Return total efforts for the given duration.
Definition: primitive.h:403
virtual void set_potential_weight(decimal_t w)
set weight for cost in time, usually no need to change
Definition: env_base.h:280
decimal_t yaw
yaw
Definition: waypoint.h:36
void set_tol_vel(decimal_t vel)
Set velocity tolerance for goal region.
Definition: env_base.h:265
void set_yaw_max(decimal_t yaw)
Set max acc in each axis.
Definition: env_base.h:246
void set_search_region(const std::vector< bool > &search_region)
Set valid search region (tunnel constraint)
Definition: env_base.h:301
virtual decimal_t get_heur(const Waypoint< Dim > &state) const
Heuristic function.
Definition: env_base.h:46
Waypoint base class.
Definition: waypoint.h:23
virtual bool is_goal(const Waypoint< Dim > &state) const
Check if state hit the goal region, use L-1 norm.
Definition: env_base.h:23
bool set_goal(const Waypoint< Dim > &state)
Set goal state.
Definition: env_base.h:295
decimal_t getTotalTime() const
Get the total duration of Trajectory.
Definition: trajectory.h:300
vec_E< VecDf > U_
Array of constant control input.
Definition: env_base.h:394
decimal_t tol_acc_
tolerance of acceleration for goal region, 0 means no tolerance
Definition: env_base.h:378
Trajectory class.
Definition: trajectory.h:43
virtual void set_prior_trajectory(const Trajectory< Dim > &traj)
Set prior trajectory.
Definition: env_base.h:249
decimal_t tol_yaw_
tolerance of yaw for goal region, 0 means no tolerance
Definition: env_base.h:380
std::vector< decimal_t > solve(decimal_t a, decimal_t b, decimal_t c, decimal_t d, decimal_t e)
General solver for .
Definition: math.h:117
std::string to_string(const Veci< Dim > &vec) const
Convert a vec to a string.
Definition: env_base.h:221
void set_w(decimal_t w)
set weight for cost in time, usually no need to change
Definition: env_base.h:274
decimal_t yaw_max_
max yaw
Definition: env_base.h:388
Vecf< Dim > acc
acceleration in
Definition: waypoint.h:34
decimal_t get_dt() const
Retrieve dt.
Definition: env_base.h:348
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 v_max_
max velocity
Definition: env_base.h:382
Control::Control control
Control value.
Definition: waypoint.h:54
vec_E< Vecf< N > > vec_Vecf
Vector of Eigen 1D float vector.
Definition: data_type.h:70
Vecf< Dim > vel
velocity in
Definition: waypoint.h:33
void set_a_max(decimal_t a)
Set max acc in each axis.
Definition: env_base.h:240
decimal_t t
time when reaching this waypoint in graph search
Definition: waypoint.h:37
void set_u(const vec_E< VecDf > &U)
Set control input.
Definition: env_base.h:234
decimal_t t_max_
max time
Definition: env_base.h:390
Eigen::Matrix< int, N, 1 > Veci
Eigen 1D int vector of size N.
Definition: data_type.h:59
std::vector< bool > get_search_region() const
Get the valid region.
Definition: env_base.h:365
double decimal_t
Rename the float type used in lib.
Definition: data_type.h:49
decimal_t dt_
duration of primitive
Definition: env_base.h:392
decimal_t j_max_
max jerk
Definition: env_base.h:386
vec_Vecf< Dim > expanded_nodes_
expanded nodes for debug
Definition: env_base.h:402
Veci< Dim > round(const Vecf< Dim > &vec, decimal_t res) const
Replace the original cast function.
Definition: env_base.h:214
Waypoint< Dim > goal_node_
Goal node.
Definition: env_base.h:396
virtual bool is_free(const Primitive< Dim > &pr) const
Check if a primitive is in free space.
Definition: env_base.h:338
virtual void set_potential_map(const std::vector< int8_t > &map)
set weight for cost in time, usually no need to change
Definition: env_base.h:286
#define ANSI_COLOR_RESET
Reset font color in printf funtion.
Definition: data_type.h:40
decimal_t a_max_
max acceleration
Definition: env_base.h:384
Eigen::Matrix< decimal_t, N, 1 > Vecf
Eigen 1D float vector of size N.
Definition: data_type.h:56
Base environment class.
Definition: env_base.h:17
virtual bool is_free(const Vecf< Dim > &pt) const
Check if a point is in free space.
Definition: env_base.h:332
decimal_t w_
weight of time cost
Definition: env_base.h:370
void set_dt(decimal_t dt)
Set dt for primitive.
Definition: env_base.h:259
bool heur_ignore_dynamics_
if enabled, ignore dynamics when calculate heuristic
Definition: env_base.h:368
void set_wyaw(decimal_t wyaw)
set weight for cost in yaw, usually no need to change
Definition: env_base.h:277
void set_tol_yaw(decimal_t yaw)
Set acceleration tolerance for goal region.
Definition: env_base.h:271
virtual void set_gradient_weight(decimal_t w)
set weight for cost in time, usually no need to change
Definition: env_base.h:283
void set_tol_pos(decimal_t pos)
Set distance tolerance for goal region.
Definition: env_base.h:262
void set_t_max(int t)
Set max time.
Definition: env_base.h:292
Primitive class.
Definition: primitive.h:206
env_base()
Simple constructor.
Definition: env_base.h:20
#define ANSI_COLOR_YELLOW
Set yellow font in printf funtion.
Definition: data_type.h:24
void set_heur_ignore_dynamics(bool ignore)
Set heur_ignore_dynamics.
Definition: env_base.h:306
virtual void info()
Print out params.
Definition: env_base.h:309
Vecf< Dim > pos
position in
Definition: waypoint.h:32
Control::Control control() const
Get the control indicator.
Definition: primitive.h:339
void set_j_max(decimal_t j)
Set max acc in each axis.
Definition: env_base.h:243
decimal_t tol_pos_
tolerance of position for goal region, 0.5 is the default
Definition: env_base.h:374
void set_v_max(decimal_t v)
Set max vel in each axis.
Definition: env_base.h:237
void set_tol_acc(decimal_t acc)
Set acceleration tolerance for goal region.
Definition: env_base.h:268