23#include "absl/strings/str_cat.h"
24#include "absl/strings/str_join.h"
32 const std::array<double, 3>& start,
const std::array<double, 3>& end,
38 const double x0,
const double dx0,
const double ddx0,
const double x1,
39 const double dx1,
const double ddx1,
const double param) {
57 const double p)
const {
66 return (((5.0 *
coef_[5] * p + 4.0 *
coef_[4]) * p + 3.0 *
coef_[3]) * p +
72 return (((20.0 *
coef_[5] * p + 12.0 *
coef_[4]) * p) + 6.0 *
coef_[3]) *
83 return 120.0 *
coef_[5];
91 const double ddx0,
const double x1,
92 const double dx1,
const double ddx1,
100 CHECK_EQ(other.
Order(), 4U);
102 coef_[0] = init_value;
103 for (
size_t i = 0; i < 5; ++i) {
104 coef_[i + 1] = other.
Coef(i) / (
static_cast<double>(i) + 1);
109 const double x0,
const double dx0,
const double ddx0,
const double x1,
110 const double dx1,
const double ddx1,
const double p) {
115 coef_[2] = ddx0 / 2.0;
117 const double p2 = p * p;
118 const double p3 = p * p2;
122 const double c0 = (x1 - 0.5 * p2 * ddx0 - dx0 * p - x0) / p3;
123 const double c1 = (dx1 - ddx0 * p - dx0) / p2;
124 const double c2 = (ddx1 - ddx0) / p;
126 coef_[3] = 0.5 * (20.0 * c0 - 8.0 * c1 + c2);
127 coef_[4] = (-15.0 * c0 + 7.0 * c1 - c2) / p;
128 coef_[5] = (6.0 * c0 - 3.0 * c1 + 0.5 * c2) / p2;
132 return absl::StrCat(absl::StrJoin(
coef_,
"\t"),
param_,
"\n");
virtual double ParamLength() const =0
virtual size_t Order() const =0
virtual double Coef(const size_t order) const =0
double Evaluate(const std::uint32_t order, const double p) const override
void ComputeCoefficients(const double x0, const double dx0, const double ddx0, const double x1, const double dx1, const double ddx1, const double param)
std::array< double, 3 > end_condition_
double Coef(const size_t order) const override
void IntegratedFromQuarticCurve(const PolynomialCurve1d &other, const double init_value)
std::array< double, 6 > coef_
std::string ToString() const override
std::array< double, 3 > start_condition_
QuinticPolynomialCurve1d()=default
void SetParam(const double x0, const double dx0, const double ddx0, const double x1, const double dx1, const double ddx1, const double param)
Planning module main class.