TrajoptLib
Library for generating time-optimal trajectories for FRC robots.
Loading...
Searching...
No Matches
cubic_hermite_spline1d.hpp
1// Copyright (c) TrajoptLib contributors
2
3#pragma once
4
5#include "trajopt/util/symbol_exports.hpp"
6
7namespace trajopt {
8
10class TRAJOPT_DLLEXPORT CubicHermiteSpline1d {
11 public:
18 constexpr CubicHermiteSpline1d(double p0, double p1, double v0, double v1)
19 : a{v0 + v1 + 2 * p0 - 2 * p1},
20 b{-2 * v0 - v1 - 3 * p0 + 3 * p1},
21 c{v0},
22 d{p0} {}
23
28 constexpr double get_position(double t) const {
29 double t2 = t * t;
30 double t3 = t2 * t;
31 return a * t3 + b * t2 + c * t + d;
32 }
33
38 constexpr double get_velocity(double t) const {
39 return 3 * a * t * t + 2 * b * t + c;
40 }
41
46 constexpr double get_acceleration(double t) const {
47 return 6 * a * t + 2 * b;
48 }
49
54 constexpr double get_jerk([[maybe_unused]] double t) const { return 6 * a; }
55
56 private:
57 // Coefficients of the cubic polynomial
58 double a;
59 double b;
60 double c;
61 double d;
62};
63
64} // namespace trajopt
constexpr double get_velocity(double t) const
Definition cubic_hermite_spline1d.hpp:38
constexpr double get_position(double t) const
Definition cubic_hermite_spline1d.hpp:28
constexpr double get_jerk(double t) const
Definition cubic_hermite_spline1d.hpp:54
constexpr double get_acceleration(double t) const
Definition cubic_hermite_spline1d.hpp:46
constexpr CubicHermiteSpline1d(double p0, double p1, double v0, double v1)
Definition cubic_hermite_spline1d.hpp:18