FancySafeBot 0.0.1
A safe robotics library
Loading...
Searching...
No Matches
fsb_trajectory_segment.h
1#ifndef FSB_TRAJECTORY_SEGMENT_H
2#define FSB_TRAJECTORY_SEGMENT_H
3
4#include "fsb_motion.h"
5#include "fsb_trajectory_types.h"
6#include "fsb_types.h"
7
8namespace fsb
9{
10
21{
22public:
23 virtual ~SegmentBase() = default;
24
29 [[nodiscard]] virtual real_t get_start_time() const = 0;
30
35 [[nodiscard]] virtual real_t get_duration() const = 0;
36
41 [[nodiscard]] virtual real_t get_final_time() const = 0;
42};
43
47class Segment : public SegmentBase
48{
49public:
55 [[nodiscard]] virtual TrajState evaluate(real_t t_eval) const = 0;
56
61 [[nodiscard]] virtual TrajState get_final_state() const = 0;
62};
63
67class Segment3 : public SegmentBase
68{
69public:
75 [[nodiscard]] virtual TrajState3 evaluate(real_t t_eval) const = 0;
76
81 [[nodiscard]] virtual TrajState3 get_final_state() const = 0;
82};
83
87class Segment6 : public SegmentBase
88{
89public:
95 [[nodiscard]] virtual CartesianPva evaluate(real_t t_eval) const = 0;
96
101 [[nodiscard]] virtual CartesianPva get_final_state() const = 0;
102};
103
107class SegmentConstJerk final : public Segment
108{
109public:
110 SegmentConstJerk() = default;
111
120 void generate(real_t start_time, real_t duration, const TrajState& initial_state, real_t jerk);
121
128 [[nodiscard]] TrajState evaluate(real_t t_eval) const override;
129
134 [[nodiscard]] TrajState get_final_state() const override
135 {
136 return evaluate(m_start_time + m_duration);
137 }
138
143 [[nodiscard]] real_t get_start_time() const override
144 {
145 return m_start_time;
146 }
147
153 [[nodiscard]] real_t get_duration() const override
154 {
155 return m_duration;
156 }
157
163 [[nodiscard]] real_t get_final_time() const override
164 {
165 return m_start_time + m_duration;
166 }
167
168private:
169 real_t m_initial_position = 0.0;
170 real_t m_initial_velocity = 0.0;
171 real_t m_initial_acceleration = 0.0;
172 real_t m_jerk = 0.0;
173 real_t m_start_time = 0.0;
174 real_t m_duration = 0.0;
175};
176
180class SegmentConstAcc final : public Segment
181{
182public:
183 SegmentConstAcc() = default;
184
193 void generate(real_t start_time, real_t duration, const TrajState& initial_state, real_t acceleration);
194
201 [[nodiscard]] TrajState evaluate(real_t t_eval) const override;
202
207 [[nodiscard]] TrajState get_final_state() const override
208 {
209 return evaluate(m_start_time + m_duration);
210 }
211
216 [[nodiscard]] real_t get_start_time() const override
217 {
218 return m_start_time;
219 }
220
226 [[nodiscard]] real_t get_duration() const override
227 {
228 return m_duration;
229 }
230
236 [[nodiscard]] real_t get_final_time() const override
237 {
238 return m_start_time + m_duration;
239 }
240
241private:
242 real_t m_initial_position = 0.0;
243 real_t m_initial_velocity = 0.0;
244 real_t m_acceleration = 0.0;
245 real_t m_start_time = 0.0;
246 real_t m_duration = 0.0;
247};
248
252class SegmentConstVel final : public Segment
253{
254public:
255 SegmentConstVel() = default;
256
265 void generate(real_t start_time, real_t duration, const TrajState& initial_state, real_t velocity);
266
273 [[nodiscard]] TrajState evaluate(real_t t_eval) const override;
274
279 [[nodiscard]] TrajState get_final_state() const override
280 {
281 return evaluate(m_start_time + m_duration);
282 }
283
288 [[nodiscard]] real_t get_start_time() const override
289 {
290 return m_start_time;
291 }
292
298 [[nodiscard]] real_t get_duration() const override
299 {
300 return m_duration;
301 }
302
308 [[nodiscard]] real_t get_final_time() const override
309 {
310 return m_start_time + m_duration;
311 }
312
313private:
314 real_t m_initial_position = 0.0;
315 real_t m_velocity = 0.0;
316 real_t m_start_time = 0.0;
317 real_t m_duration = 0.0;
318};
319
324} // namespace fsb
325
326#endif
Abstract class for motion in x, y, and z coordinates.
Definition fsb_trajectory_segment.h:68
virtual TrajState3 get_final_state() const =0
Get final state of the segment.
virtual TrajState3 evaluate(real_t t_eval) const =0
Evaluate the segment at a given time.
Abstract class for motion in Cartesian coordinates.
Definition fsb_trajectory_segment.h:88
virtual CartesianPva evaluate(real_t t_eval) const =0
Evaluate the segment at a given time.
virtual CartesianPva get_final_state() const =0
Get final state of the segment.
Abstract class for segments.
Definition fsb_trajectory_segment.h:21
virtual real_t get_final_time() const =0
Get final time of the segment.
virtual real_t get_start_time() const =0
Get start time of the segment.
virtual real_t get_duration() const =0
Get duration of the segment.
Constant acceleration profile.
Definition fsb_trajectory_segment.h:181
void generate(real_t start_time, real_t duration, const TrajState &initial_state, real_t acceleration)
Generate constant acceleration profile.
Definition fsb_trajectory_segment.cpp:31
TrajState get_final_state() const override
Get final state of segment.
Definition fsb_trajectory_segment.h:207
real_t get_duration() const override
Get duration.
Definition fsb_trajectory_segment.h:226
real_t get_final_time() const override
Get final time of segment.
Definition fsb_trajectory_segment.h:236
real_t get_start_time() const override
Get start time of segment.
Definition fsb_trajectory_segment.h:216
TrajState evaluate(real_t t_eval) const override
Evaluate constant acceleration segment.
Definition fsb_trajectory_segment.cpp:40
Constant jerk profile.
Definition fsb_trajectory_segment.h:108
real_t get_duration() const override
Get duration.
Definition fsb_trajectory_segment.h:153
void generate(real_t start_time, real_t duration, const TrajState &initial_state, real_t jerk)
Generate constant jerk trajectory.
Definition fsb_trajectory_segment.cpp:9
real_t get_start_time() const override
Get start time of segment.
Definition fsb_trajectory_segment.h:143
TrajState evaluate(real_t t_eval) const override
Evaluate segment trajectory.
Definition fsb_trajectory_segment.cpp:19
real_t get_final_time() const override
Get final time of segment.
Definition fsb_trajectory_segment.h:163
TrajState get_final_state() const override
Get final state of segment.
Definition fsb_trajectory_segment.h:134
Constant velocity profile.
Definition fsb_trajectory_segment.h:253
void generate(real_t start_time, real_t duration, const TrajState &initial_state, real_t velocity)
Generate constant velocity profile.
Definition fsb_trajectory_segment.cpp:51
TrajState evaluate(real_t t_eval) const override
Evaluate constant velocity segment.
Definition fsb_trajectory_segment.cpp:59
TrajState get_final_state() const override
Get final state of segment.
Definition fsb_trajectory_segment.h:279
real_t get_final_time() const override
Get final time of segment.
Definition fsb_trajectory_segment.h:308
real_t get_duration() const override
Get duration.
Definition fsb_trajectory_segment.h:298
real_t get_start_time() const override
Get start time of segment.
Definition fsb_trajectory_segment.h:288
Abstract class for scalar motion.
Definition fsb_trajectory_segment.h:48
virtual TrajState evaluate(real_t t_eval) const =0
Evaluate the segment at a given time.
virtual TrajState get_final_state() const =0
Get final state of the segment.
Cartesian pose, velocity and acceleration.
Definition fsb_motion.h:53
Trajectory vector motion state.
Definition fsb_trajectory_types.h:40
Trajectory scalar motion state.
Definition fsb_trajectory_types.h:18