34 const std::vector<PathPoint>& reference_line,
const Curve1d& lon_trajectory,
35 const Curve1d& lat_trajectory,
const double init_relative_time) {
38 double s0 = lon_trajectory.
Evaluate(0, 0.0);
39 double s_ref_max = reference_line.back().s();
40 double accumulated_trajectory_s = 0.0;
43 double last_s = -FLAGS_numerical_epsilon;
45 while (t_param < FLAGS_trajectory_time_length) {
48 double s = lon_trajectory.
Evaluate(0, t_param);
50 s = std::max(last_s, s);
55 std::max(FLAGS_numerical_epsilon, lon_trajectory.
Evaluate(1, t_param));
56 double s_ddot = lon_trajectory.
Evaluate(2, t_param);
61 double relative_s = s - s0;
64 double d = lat_trajectory.
Evaluate(0, relative_s);
65 double d_prime = lat_trajectory.
Evaluate(1, relative_s);
66 double d_pprime = lat_trajectory.
Evaluate(2, relative_s);
77 const double rs = matched_ref_point.
s();
78 const double rx = matched_ref_point.
x();
79 const double ry = matched_ref_point.
y();
80 const double rtheta = matched_ref_point.
theta();
81 const double rkappa = matched_ref_point.
kappa();
82 const double rdkappa = matched_ref_point.
dkappa();
84 std::array<double, 3> s_conditions = {rs, s_dot, s_ddot};
85 std::array<double, 3> d_conditions = {d, d_prime, d_pprime};
87 rs, rx, ry, rtheta, rkappa, rdkappa, s_conditions, d_conditions, &x, &y,
88 &theta, &kappa, &v, &a);
90 if (prev_trajectory_point.has_x() && prev_trajectory_point.has_y()) {
91 double delta_x = x - prev_trajectory_point.
x();
92 double delta_y = y - prev_trajectory_point.
y();
93 double delta_s = std::hypot(delta_x, delta_y);
94 accumulated_trajectory_s += delta_s;
98 trajectory_point.mutable_path_point()->set_x(x);
99 trajectory_point.mutable_path_point()->set_y(y);
100 trajectory_point.mutable_path_point()->set_s(accumulated_trajectory_s);
101 trajectory_point.mutable_path_point()->set_theta(theta);
102 trajectory_point.mutable_path_point()->set_kappa(kappa);
103 trajectory_point.set_v(v);
104 trajectory_point.set_a(a);
105 trajectory_point.set_relative_time(t_param + init_relative_time);
109 t_param = t_param + FLAGS_trajectory_time_resolution;
111 prev_trajectory_point = trajectory_point.
path_point();
113 return combined_trajectory;
static void frenet_to_cartesian(const double rs, const double rx, const double ry, const double rtheta, const double rkappa, const double rdkappa, const std::array< double, 3 > &s_condition, const std::array< double, 3 > &d_condition, double *const ptr_x, double *const ptr_y, double *const ptr_theta, double *const ptr_kappa, double *const ptr_v, double *const ptr_a)
Convert a vehicle state in Frenet frame to Cartesian frame.