1 #ifndef CALICO_BSPLINE_H_
2 #define CALICO_BSPLINE_H_
4 #include "calico/typedefs.h"
6 #include "absl/status/statusor.h"
7 #include "ceres/problem.h"
16 template <
int N,
typename T =
double>
23 int AddParametersToProblem(ceres::Problem& problem);
25 void EnableControlPointsEstimation(
bool enable);
30 absl::Status FitToData(
const std::vector<T>& time,
31 const std::vector<Eigen::Vector<T,N>>& data,
32 int spline_order, T knot_frequency);
36 int GetSplineIndex(T query_time)
const;
40 int GetKnotIndexFromSplineIndex(
int control_point_index)
const;
43 int GetSplineOrder()
const;
47 absl::StatusOr<std::vector<Eigen::Vector<T, N>>>
48 Interpolate(
const std::vector<T>& times,
int derivative = 0)
const;
51 absl::StatusOr<Eigen::Vector<T, N>>
52 Interpolate(T time,
int derivative = 0)
const {
53 const absl::StatusOr<std::vector<Eigen::Vector<T, N>>> statusor =
54 Interpolate(std::vector{time}, derivative);
56 return statusor.status();
58 return statusor->front();
63 GetSplineBasis(
int spline_idx, T stamp,
int derivative)
const;
66 static Eigen::Vector<T, N> Evaluate(
67 const Eigen::Ref<
const Eigen::MatrixX<T>>& control_points_set, T knot0,
68 T knot1,
const Eigen::MatrixX<T>& basis_matrix, T stamp,
int derivative);
72 const std::vector<T>& knots()
const {
return knots_; }
73 std::vector<T>& knots() {
return knots_; }
76 const std::vector<Eigen::Vector<T, N>>& control_points()
const {
77 return control_points_;
79 std::vector<Eigen::Vector<T, N>>& control_points() {
80 return control_points_;
84 const std::vector<Eigen::MatrixX<T>>& basis_matrices()
const {
87 std::vector<Eigen::MatrixX<T>>& basis_matrices() {
95 std::vector<Eigen::Vector<T,N>> data_;
100 std::vector<T> knots_;
101 std::vector<T> valid_knots_;
102 Eigen::MatrixXd derivative_coeffs_;
103 std::vector<Eigen::MatrixXd> Mi_;
104 std::vector<Eigen::Vector<T,N>> control_points_;
107 bool control_points_enabled_;
110 void ComputeKnotVector();
113 void ComputeBasisMatrices();
130 Eigen::MatrixX<T> M(
int k,
int i);
131 T d_0(
int k,
int i,
int j);
132 T d_1(
int k,
int i,
int j);
138 absl::Status CheckDataForSplineFit(
139 const std::vector<T>& time,
140 const std::vector<Eigen::Vector<T,N>>& data,
int spline_order,
146 #include "calico/bspline.hpp"
Primary calico namespace.
Definition: __init__.py:1