29 : last_theta_(theta), last_kappa_(kappa), last_dkappa_(dkappa) {
30 accumulated_s_.push_back(0.0);
35 const double delta_s) {
36 double s = delta_s + accumulated_s_.back();
37 accumulated_s_.push_back(s);
39 pieces_.emplace_back(last_theta_, last_kappa_, last_dkappa_, theta, kappa,
44 last_dkappa_ = dkappa;
48 const double s)
const {
49 auto index = LocatePiece(s);
50 return pieces_[index].Evaluate(order, s - accumulated_s_[index]);
54 auto index = LocatePiece(s);
55 const auto& piece = pieces_[index];
56 double ratio = (s - accumulated_s_[index]) / piece.ParamLength();
61 return accumulated_s_.back();
64size_t PiecewiseQuinticSpiralPath::LocatePiece(
const double s)
const {
65 ACHECK(s >= accumulated_s_.front() && s <= accumulated_s_.back());
68 std::lower_bound(accumulated_s_.begin(), accumulated_s_.end(), s);
70 if (it_lower == accumulated_s_.begin()) {
73 return std::distance(accumulated_s_.begin(), it_lower) - 1;
PiecewiseQuinticSpiralPath(const double theta, const double kappa, const double dkappa)
double DeriveKappaS(const double s) const
double Evaluate(const std::uint32_t order, const double param) const override
double ParamLength() const override
void Append(const double theta, const double kappa, const double dkappa, const double delta_s)
static const size_t DELTA_S
Planning module main class.