diff --git a/modules/planning/common/planning_gflags.cc b/modules/planning/common/planning_gflags.cc index c43c86ebd0cdcdc99e075918aef03143c3adc7d0..d6f21ef5d98a137c1d38358c58a2d15599e450b3 100644 --- a/modules/planning/common/planning_gflags.cc +++ b/modules/planning/common/planning_gflags.cc @@ -52,6 +52,9 @@ DEFINE_double(look_forward_time_sec, 8, DEFINE_bool(enable_smooth_reference_line, true, "enable smooth the map reference line"); +DEFINE_bool(enable_spiral_reference_line, false, + "enable new spiral based reference line"); + DEFINE_int32(max_history_frame_num, 5, "The maximum history frame number"); DEFINE_double(max_collision_distance, 0.1, diff --git a/modules/planning/common/planning_gflags.h b/modules/planning/common/planning_gflags.h index 60a528567aa101c60ad32b6d92c306f887d1955f..601f38754cf24982f8d5660d626e63e478e72523 100644 --- a/modules/planning/common/planning_gflags.h +++ b/modules/planning/common/planning_gflags.h @@ -31,6 +31,7 @@ DECLARE_double(look_forward_min_distance); DECLARE_double(look_forward_time_sec); DECLARE_bool(enable_smooth_reference_line); +DECLARE_bool(enable_spiral_reference_line); DECLARE_double(max_collision_distance); DECLARE_bool(publish_estop); DECLARE_bool(enable_trajectory_stitcher); diff --git a/modules/planning/conf/planning.conf b/modules/planning/conf/planning.conf index 5dfdf9ebb49409abad372f2517f83a82ef6e8ab0..1e5c25b1951590031132c2fc471f660152670668 100644 --- a/modules/planning/conf/planning.conf +++ b/modules/planning/conf/planning.conf @@ -1,3 +1,4 @@ --flagfile=modules/common/data/global_flagfile.txt --nouse_ros_time --planning_upper_speed_limit=31.3 +--noenable_spiral_reference_line diff --git a/modules/planning/reference_line/BUILD b/modules/planning/reference_line/BUILD index 488a219a3cf4b486b24aa6e467aa9f7cd38e445b..a039cb3245dadd8f496c4b8756b93689867a3396 100644 --- a/modules/planning/reference_line/BUILD +++ b/modules/planning/reference_line/BUILD @@ -57,6 +57,7 @@ cc_library( deps = [ "reference_line", "reference_line_smoother", + "spiral_reference_line_smoother", "//modules/map/pnc_map", ], ) diff --git a/modules/planning/reference_line/reference_line_provider.cc b/modules/planning/reference_line/reference_line_provider.cc index ef9a47ed2e5f4bf173c3f478c3893659ffe71a8c..1208dfd7537098e9ab0e330c180e36158704c7e3 100644 --- a/modules/planning/reference_line/reference_line_provider.cc +++ b/modules/planning/reference_line/reference_line_provider.cc @@ -148,6 +148,10 @@ bool ReferenceLineProvider::CreateReferenceLineFromRouting( ReferenceLineSmoother smoother; smoother.Init(smoother_config_); + SpiralReferenceLineSmoother spiral_smoother; + double max_spiral_smoother_dev = 0.1; + spiral_smoother.set_max_point_deviation(max_spiral_smoother_dev); + std::vector reference_lines; std::vector segments; for (const auto &lanes : route_segments) { @@ -156,10 +160,17 @@ bool ReferenceLineProvider::CreateReferenceLineFromRouting( if (FLAGS_enable_smooth_reference_line) { ReferenceLine raw_reference_line(hdmap_path); ReferenceLine reference_line; - if (!smoother.Smooth(raw_reference_line, &reference_line, - spline_solver_.get())) { - AERROR << "Failed to smooth reference line"; - continue; + if (FLAGS_enable_spiral_reference_line) { + if (!spiral_smoother.Smooth(raw_reference_line, + &reference_line)) { + AERROR << "Failed to smooth reference_line with spiral smoother"; + } + } else { + if (!smoother.Smooth(raw_reference_line, &reference_line, + spline_solver_.get())) { + AERROR << "Failed to smooth reference line"; + continue; + } } bool is_valid_reference_line = true; diff --git a/modules/planning/reference_line/reference_line_provider.h b/modules/planning/reference_line/reference_line_provider.h index e71bad9662b784d5dbb52eaf7c91f523b848ecd5..0a666ce258992542aed87da9b061afb284472044 100644 --- a/modules/planning/reference_line/reference_line_provider.h +++ b/modules/planning/reference_line/reference_line_provider.h @@ -33,6 +33,7 @@ #include "modules/planning/math/smoothing_spline/spline_2d_solver.h" #include "modules/planning/reference_line/reference_line.h" #include "modules/planning/reference_line/reference_line_smoother.h" +#include "modules/planning/reference_line/spiral_reference_line_smoother.h" /** * @namespace apollo::planning diff --git a/modules/planning/reference_line/spiral_reference_line_smoother.cc b/modules/planning/reference_line/spiral_reference_line_smoother.cc index e0523d7eaf4ca4925b5ee41ad39d21b0985dfce5..962ffdef2ec5d8c1fdae55131dcc0f99b04f92e6 100644 --- a/modules/planning/reference_line/spiral_reference_line_smoother.cc +++ b/modules/planning/reference_line/spiral_reference_line_smoother.cc @@ -106,7 +106,8 @@ bool SpiralReferenceLineSmoother::Smooth( // app->Options()->SetNumericValue("derivative_test_perturbation", 1.0e-7); // app->Options()->SetStringValue("derivative_test", "second-order"); app->Options()->SetIntegerValue("print_level", 0); - app->Options()->SetIntegerValue("max_iter", 1000); + int num_iterations = 10; + app->Options()->SetIntegerValue("max_iter", num_iterations); // app->Options()->SetNumericValue("acceptable_tol", 0.5); // app->Options()->SetNumericValue("acceptable_obj_change_tol", 0.5); diff --git a/third_party/ipopt.BUILD b/third_party/ipopt.BUILD index ed19eb4f45ddf31055748e21b56535e2ab9e10aa..f5a3f71b56e88543a6488d51ec7d7c31fa5e63c1 100644 --- a/third_party/ipopt.BUILD +++ b/third_party/ipopt.BUILD @@ -6,7 +6,11 @@ cc_library( name = "ipopt", includes = ["."], linkopts = [ - "-lcoinmumps", - "-lipopt", + "-L/usr/local/ipopt/lib -lipopt", + "-L/usr/local/ipopt/lib -lcoinmumps", + "-lblas", + "-llapack", + "-ldl", + "-lgfortran", ], ) \ No newline at end of file