You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I used fast-planner with nlopt and found that sometimes nlopt would not be able to optimize the trajectory output speed and heading Angle to 0, and then there would be no further optimization until I restarted fast-planner,
Here is the codes :
How to reproduce the issue?
Here is the Code:
void BsplineOptimizer::optimize() {
/* initialize solver */
iter_num_ = 0;
min_cost_ = std::numeric_limits<double>::max();
const int pt_num = control_points_.rows();
g_q_.resize(pt_num);
g_smoothness_.resize(pt_num);
g_distance_.resize(pt_num);
g_feasibility_.resize(pt_num);
g_endpoint_.resize(pt_num);
g_waypoints_.resize(pt_num);
g_guide_.resize(pt_num);if (cost_function_ & ENDPOINT) {
variable_num_ = dim_ * (pt_num - order_);
// end position used for hard constraint
end_pt_ = (1 / 6.0) *
(control_points_.row(pt_num - 3) + 4 * control_points_.row(pt_num - 2) +
control_points_.row(pt_num - 1));
} else {
variable_num_ = max(0, dim_ * (pt_num - 2 * order_)) ;
}
/*do optimization using NLopt slover */
nlopt::opt opt(nlopt::algorithm(isQuadratic() ? algorithm1_ : algorithm2_), variable_num_);
opt.set_min_objective(BsplineOptimizer::costFunction, this);
opt.set_maxeval(max_iteration_num_[max_num_id_]);
opt.set_maxtime(max_iteration_time_[max_time_id_]);
opt.set_xtol_rel(1e-5);
vector<double> q(variable_num_);for (int i = order_; i < pt_num; ++i) {
if (!(cost_function_ & ENDPOINT) && i >= pt_num - order_) continue;for (int j = 0; j < dim_; j++) {
q[dim_ * (i - order_) + j] = control_points_(i, j);
}
}
if (dim_ != 1) {
vector<double> lb(variable_num_), ub(variable_num_);
const double bound = 10.0;for (int i = 0; i < variable_num_; ++i) {
lb[i] = q[i] - bound;
ub[i] = q[i] + bound;
}
opt.set_lower_bounds(lb);
opt.set_upper_bounds(ub);
}
try {
// cout <<fixed << setprecision(7); // vec_time_.clear(); // vec_cost_.clear(); // time_start_ = ros::Time::now(); double final_cost; nlopt::result result = opt.optimize(q, final_cost); /* retrieve the optimization result */ // cout << "Min cost:" << min_cost_ << endl; } catch (std::exception& e) { ROS_WARN("[Optimization]: nlopt exception"); cout << e.what() << endl; } for (int i = order_; i < control_points_.rows(); ++i) { if (!(cost_function_ & ENDPOINT) && i >= pt_num - order_) continue; for (int j = 0; j < dim_; j++) { control_points_(i, j) = best_variable_[dim_ * (i - order_) + j]; } } if (!(cost_function_ & GUIDE)) ROS_INFO_STREAM("iter num: " << iter_num_);}
What happened?
I used fast-planner with nlopt and found that sometimes nlopt would not be able to optimize the trajectory output speed and heading Angle to 0, and then there would be no further optimization until I restarted fast-planner,
Here is the codes :
How to reproduce the issue?
Version
nlopt v2.7.1:
Operating System
unknown
Installation media
other
Additional Context
fast-planner with nlopt : Here is the link https://github.com/HKUST-Aerial-Robotics/Fast-Planner
/Fast-Planner/fast_planner/bspline_opt/src/bspline_optimizer.cpp
The text was updated successfully, but these errors were encountered: