TrajoptLib
Library for generating time-optimal trajectories for FRC robots.
Loading...
Searching...
No Matches
cubic_hermite_pose_spline_holonomic.hpp
1// Copyright (c) TrajoptLib contributors
2
3#pragma once
4
5#include <array>
6#include <optional>
7#include <utility>
8
9#include "trajopt/geometry/pose2.hpp"
10#include "trajopt/geometry/rotation2.hpp"
11#include "trajopt/geometry/translation2.hpp"
12#include "trajopt/spline/cubic_hermite_spline.hpp"
13#include "trajopt/spline/cubic_hermite_spline1d.hpp"
14#include "trajopt/util/symbol_exports.hpp"
15
16namespace trajopt {
17
21 public:
23 using PoseWithCurvature = std::pair<Pose2d, double>;
24
38 std::array<double, 2> x_initial_control_vector,
39 std::array<double, 2> x_final_control_vector,
40 std::array<double, 2> y_initial_control_vector,
41 std::array<double, 2> y_final_control_vector, Rotation2d r0,
42 Rotation2d r1)
43 : CubicHermiteSpline(x_initial_control_vector, x_final_control_vector,
44 y_initial_control_vector, y_final_control_vector),
45 r0(r0),
46 theta(0.0, (-r0).rotate_by(r1).radians(), 0, 0) {}
47
52 Rotation2d GetCourse(double t) const {
53 const PoseWithCurvature spline_point =
55 return spline_point.first.rotation();
56 }
57
62 Rotation2d get_heading(double t) const {
63 return r0.rotate_by(Rotation2d{theta.get_position(t)});
64 }
65
70 double get_heading_rate(double t) const { return theta.get_velocity(t); }
71
77 std::optional<PoseWithCurvature> get_point(double t,
78 bool is_differential) const {
79 if (is_differential) {
81 } else {
82 const auto spline_point = CubicHermiteSpline::get_point(t).value();
83 return PoseWithCurvature{
84 {spline_point.first.translation(), get_heading(t)},
85 spline_point.second};
86 }
87 }
88
89 private:
90 Rotation2d r0;
92};
93
94} // namespace trajopt
Rotation2d get_heading(double t) const
Definition cubic_hermite_pose_spline_holonomic.hpp:62
std::optional< PoseWithCurvature > get_point(double t, bool is_differential) const
Definition cubic_hermite_pose_spline_holonomic.hpp:77
CubicHermitePoseSplineHolonomic(std::array< double, 2 > x_initial_control_vector, std::array< double, 2 > x_final_control_vector, std::array< double, 2 > y_initial_control_vector, std::array< double, 2 > y_final_control_vector, Rotation2d r0, Rotation2d r1)
Definition cubic_hermite_pose_spline_holonomic.hpp:37
double get_heading_rate(double t) const
Definition cubic_hermite_pose_spline_holonomic.hpp:70
Rotation2d GetCourse(double t) const
Definition cubic_hermite_pose_spline_holonomic.hpp:52
std::pair< Pose2d, double > PoseWithCurvature
Pose2d with curvature.
Definition cubic_hermite_pose_spline_holonomic.hpp:23
1D cubic hermite spline.
Definition cubic_hermite_spline1d.hpp:10
CubicHermiteSpline(std::array< double, 2 > x_initial_control_vector, std::array< double, 2 > x_final_control_vector, std::array< double, 2 > y_initial_control_vector, std::array< double, 2 > y_final_control_vector)
Definition cubic_hermite_spline.hpp:29
constexpr Rotation2< U > rotate_by(const Rotation2< U > &other) const
Definition rotation2.hpp:101
std::optional< PoseWithCurvature > get_point(double t) const
Definition spline.hpp:47