Thunderbots Project
Loading...
Searching...
No Matches
bang_bang_trajectory_1d.h
1#pragma once
2
3#include <array>
4
5#include "software/ai/navigator/trajectory/trajectory.hpp"
6
7class BangBangTrajectory1D : public Trajectory<double, double, double>
8{
9 public:
17 {
18 double end_time_sec = 0;
19 double position = 0;
20 double velocity = 0;
21 double acceleration = 0;
22 };
23
28
45 void generate(double initial_pos, double final_pos, double initial_vel,
46 double max_vel, double max_accel, double max_decel);
47
54 double getPosition(double t_sec) const override;
55
62 double getVelocity(double t_sec) const override;
63
70 double getAcceleration(double t_sec) const override;
71
77 inline double getTotalTime() const override
78 {
79 return trajectory_parts[num_trajectory_parts - 1].end_time_sec;
80 }
81
88 std::pair<double, double> getMinMaxPositions() const;
89
96 const TrajectoryPart &getTrajectoryPart(size_t index) const;
97
103 size_t getNumTrajectoryParts() const;
104
105 private:
125 void generateTrapezoidalTrajectory(double initial_pos, double final_pos,
126 double initial_vel, double max_vel,
127 double max_accel, double max_decel,
128 double time_offset_sec = 0.0);
129
147 void generateTriangularTrajectory(double initial_pos, double final_pos,
148 double initial_vel, double max_accel,
149 double max_decel, double time_offset_sec = 0.0);
150
159 inline double closestPositionToStop(double initial_pos, double initial_vel,
160 double max_decel) const;
161
179 inline double triangularProfileStopPosition(double initial_pos, double initial_vel,
180 double max_vel, double max_accel,
181 double max_decel, double direction) const;
182
189 inline size_t getTrajectoryIndexAtTime(double t_sec) const;
190
200 void getTrajPartAndDeltaTime(double t_sec,
202 double &out_t_delta_sec) const;
203
212 inline void addTrajectoryPart(const TrajectoryPart &part);
213
214 // We use a fixed size array instead of a vector to avoid the overhead
215 // of dynamic memory allocation + emplace_back, push_back, etc.
216 static constexpr unsigned int MAX_TRAJECTORY_PARTS = 4;
217 size_t num_trajectory_parts = 0;
218 std::array<TrajectoryPart, MAX_TRAJECTORY_PARTS> trajectory_parts = {
219 TrajectoryPart(), TrajectoryPart(), TrajectoryPart(), TrajectoryPart()};
220};
Definition bang_bang_trajectory_1d.h:8
BangBangTrajectory1D()
Definition bang_bang_trajectory_1d.cpp:8
void generate(double initial_pos, double final_pos, double initial_vel, double max_vel, double max_accel, double max_decel)
Definition bang_bang_trajectory_1d.cpp:15
std::pair< double, double > getMinMaxPositions() const
Definition bang_bang_trajectory_1d.cpp:268
double getAcceleration(double t_sec) const override
Definition bang_bang_trajectory_1d.cpp:198
size_t getNumTrajectoryParts() const
Definition bang_bang_trajectory_1d.cpp:298
double getVelocity(double t_sec) const override
Definition bang_bang_trajectory_1d.cpp:188
const TrajectoryPart & getTrajectoryPart(size_t index) const
Definition bang_bang_trajectory_1d.cpp:303
double getPosition(double t_sec) const override
Definition bang_bang_trajectory_1d.cpp:176
double getTotalTime() const override
Definition bang_bang_trajectory_1d.h:77
Definition trajectory.hpp:15
Definition bang_bang_trajectory_1d.h:17