11#include "core/math/spline/spline_path.h"
12#include "core/math/trajectory/constraints/tank_kinematics_constraint.h"
13#include "core/math/trajectory/constraints/trajectory_constraint.h"
14#include "core/math/units.h"
22 units::Length distance;
100 units::Length track_width
120 : start_velocity_(other.start_velocity_),
121 end_velocity_(other.end_velocity_),
122 max_velocity_(other.max_velocity_),
123 max_acceleration_(other.max_acceleration_),
124 sample_ds_(other.sample_ds_),
125 events_(other.events_),
126 reversed_(other.reversed_),
127 spline_order_(other.spline_order_),
128 error_handler_(other.error_handler_) {
129 constraints_.reserve(other.constraints_.size());
130 for (
const std::unique_ptr<TrajectoryConstraint>& c : other.constraints_) {
132 constraints_.push_back(c->clone());
139 if (
this != &other) {
140 start_velocity_ = other.start_velocity_;
141 end_velocity_ = other.end_velocity_;
142 max_velocity_ = other.max_velocity_;
143 max_acceleration_ = other.max_acceleration_;
144 sample_ds_ = other.sample_ds_;
145 reversed_ = other.reversed_;
146 spline_order_ = other.spline_order_;
147 error_handler_ = other.error_handler_;
148 events_ = other.events_;
149 constraints_.clear();
150 constraints_.reserve(other.constraints_.size());
151 for (
const std::unique_ptr<TrajectoryConstraint>& c : other.constraints_) {
153 constraints_.push_back(c->clone());
167 void add_event(
const std::string& name, units::Length distance) {
168 events_.push_back({distance, name});
171 void set_start_velocity(units::Velocity start_velocity) { start_velocity_ = start_velocity; }
187 error_handler_ = std::move(handler);
195 template <
typename Constra
int>
196 typename std::enable_if<
197 std::is_base_of<TrajectoryConstraint, typename std::decay<Constraint>::type>::value,
200 typedef typename std::decay<Constraint>::type C;
201 constraints_.emplace_back(
202 std::unique_ptr<TrajectoryConstraint>(
new C(std::forward<Constraint>(constraint)))
208 units::Length track_width, units::Velocity max_wheel_speed,
209 units::Acceleration max_wheel_acceleration
227 const TankKinematics& kinematics, units::Velocity max_wheel_speed,
228 units::Acceleration max_wheel_acceleration
260 const std::vector<std::unique_ptr<TrajectoryConstraint>>&
constraints()
const {
264 const std::vector<DistanceEvent>& events()
const {
return events_; }
273 const std::function<void(
const char*)>&
error_handler()
const {
return error_handler_; }
276 units::Velocity start_velocity_ = 0_inps;
277 units::Velocity end_velocity_ = 0_inps;
278 units::Velocity max_velocity_;
279 units::Acceleration max_acceleration_;
280 units::Length sample_ds_ = 0.5_in;
281 std::vector<std::unique_ptr<TrajectoryConstraint>> constraints_;
282 std::vector<DistanceEvent> events_;
283 bool reversed_ =
false;
285 std::function<void(
const char*)> error_handler_ = [](
const char* message) {
286 std::fprintf(stderr,
"%s\n", message);
299 : config_(max_velocity, max_acceleration) {}
303 config_.set_start_velocity(v);
309 config_.set_end_velocity(v);
315 config_.set_reversed(reversed);
321 config_.set_sample_ds(ds);
327 units::Length track_width, units::Velocity max_wheel_speed,
328 units::Acceleration max_wheel_acceleration
330 config_.set_track_width(track_width, max_wheel_speed, max_wheel_acceleration);
336 units::Length track_width, units::Velocity max_wheel_speed
338 config_.set_track_width(track_width, max_wheel_speed);
344 config_.set_track_width(track_width);
351 const TankKinematics& kinematics, units::Velocity max_wheel_speed,
352 units::Acceleration max_wheel_acceleration
354 config_.set_kinematics(kinematics, max_wheel_speed, max_wheel_acceleration);
363 config_.set_kinematics(kinematics, max_wheel_speed);
369 config_.set_kinematics(kinematics);
375 config_.set_spline_order(order);
381 config_.set_error_handler(std::move(handler));
386 template <
typename Constra
int>
388 config_.add_constraint(std::forward<Constraint>(constraint));
394 config_.add_event(name, distance);
Order
Order of spline polynomials used per segment.
Definition spline_path.h:17
@ Quintic
Quintic Hermite splines (C2 continuity).
Definition spline_path.h:19
TankKinematicsConstraint(units::Length track_width, units::Velocity max_speed, units::Acceleration max_acceleration=10000_inps2)
Constructs a TankKinematicsConstraint.
Definition tank_kinematics_constraint.h:24
Helper class that converts a chassis velocity (vx and omega) to left and right wheel velocities for a...
Definition tank_kinematics.h:19
TrajectoryConfigBuilder & with_constraint(Constraint &&constraint)
Adds a custom physical trajectory constraint.
Definition trajectory_config.h:387
TrajectoryConfigBuilder & with_track_width(units::Length track_width, units::Velocity max_wheel_speed, units::Acceleration max_wheel_acceleration)
Configures drivetrain track width kinematics constraint with explicit limits.
Definition trajectory_config.h:326
TrajectoryConfigBuilder & with_start_velocity(units::Velocity v)
Configures initial trajectory velocity.
Definition trajectory_config.h:302
TrajectoryConfigBuilder & with_kinematics(const TankKinematics &kinematics, units::Velocity max_wheel_speed)
Configures drivetrain kinematics constraint using TankKinematics and explicit wheel speed.
Definition trajectory_config.h:360
TrajectoryConfigBuilder & with_track_width(units::Length track_width)
Configures drivetrain track width kinematics constraint.
Definition trajectory_config.h:343
TrajectoryConfigBuilder & with_reversed(bool reversed=true)
Configures reverse driving flag.
Definition trajectory_config.h:314
TrajectoryConfigBuilder & with_kinematics(const TankKinematics &kinematics)
Configures drivetrain kinematics constraint using TankKinematics and default limits.
Definition trajectory_config.h:368
TrajectoryConfigBuilder & with_kinematics(const TankKinematics &kinematics, units::Velocity max_wheel_speed, units::Acceleration max_wheel_acceleration)
Configures drivetrain kinematics constraint using TankKinematics and explicit limits.
Definition trajectory_config.h:350
TrajectoryConfigBuilder & with_error_handler(std::function< void(const char *)> handler)
Configures custom error handler callback.
Definition trajectory_config.h:380
TrajectoryConfigBuilder(units::Velocity max_velocity, units::Acceleration max_acceleration)
Creates a builder with max velocity and max acceleration limits.
Definition trajectory_config.h:298
TrajectoryConfigBuilder & with_spline_order(SplinePath::Order order)
Configures spline order.
Definition trajectory_config.h:374
TrajectoryConfigBuilder & with_event(const std::string &name, units::Length distance)
Adds a distance-triggered event to the trajectory.
Definition trajectory_config.h:393
TrajectoryConfigBuilder & with_sample_ds(units::Length ds)
Configures spatial spline discretization step size.
Definition trajectory_config.h:320
TrajectoryConfigBuilder & with_track_width(units::Length track_width, units::Velocity max_wheel_speed)
Configures drivetrain track width kinematics constraint with explicit wheel speed.
Definition trajectory_config.h:335
TrajectoryConfigBuilder & with_end_velocity(units::Velocity v)
Configures final trajectory velocity.
Definition trajectory_config.h:308
TrajectoryConfig build()
Builds and returns constructed TrajectoryConfig instance.
Definition trajectory_config.h:399
Definition trajectory_config.h:26
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration, units::Length track_width)
Constructs TrajectoryConfig with max velocity, max acceleration, and track width constraint.
Definition trajectory_config.h:56
void set_kinematics(const TankKinematics &kinematics)
Adds a TankKinematicsConstraint using TankKinematics and config max velocity.
Definition trajectory_config.h:240
void set_track_width(units::Length track_width, units::Velocity max_wheel_speed)
Adds a TankKinematicsConstraint using track width and explicit max wheel speed limit.
Definition trajectory_config.h:216
void set_kinematics(const TankKinematics &kinematics, units::Velocity max_wheel_speed, units::Acceleration max_wheel_acceleration)
Adds a TankKinematicsConstraint using TankKinematics and explicit limits.
Definition trajectory_config.h:226
units::Acceleration max_acceleration() const
Definition trajectory_config.h:254
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration)
Constructs TrajectoryConfig with maximum velocity and acceleration.
Definition trajectory_config.h:33
TrajectoryConfig & operator=(TrajectoryConfig &&)=default
Move assignment.
TrajectoryConfig(TrajectoryConfig &&)=default
Move constructor.
void set_kinematics(const TankKinematics &kinematics, units::Velocity max_wheel_speed)
Adds a TankKinematicsConstraint using TankKinematics and explicit max wheel speed limit.
Definition trajectory_config.h:235
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration, units::Velocity start_velocity, units::Velocity end_velocity, bool reversed, const TankKinematics &kinematics)
Constructs TrajectoryConfig with full parameters and kinematics model.
Definition trajectory_config.h:109
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration, units::Velocity start_velocity, units::Velocity end_velocity, bool reversed)
Constructs TrajectoryConfig with start/end boundary velocities.
Definition trajectory_config.h:85
void set_spline_order(SplinePath::Order order)
Sets spline order.
Definition trajectory_config.h:183
const std::function< void(const char *)> & error_handler() const
Definition trajectory_config.h:273
units::Velocity start_velocity() const
Definition trajectory_config.h:245
TrajectoryConfig(const TrajectoryConfig &other)
Polymorphic deep-copy constructor.
Definition trajectory_config.h:119
const std::vector< std::unique_ptr< TrajectoryConstraint > > & constraints() const
Definition trajectory_config.h:260
void set_track_width(units::Length track_width, units::Velocity max_wheel_speed, units::Acceleration max_wheel_acceleration)
Adds a TankKinematicsConstraint using track width and explicit wheel limits.
Definition trajectory_config.h:207
TrajectoryConfig & operator=(const TrajectoryConfig &other)
Polymorphic deep-copy assignment operator.
Definition trajectory_config.h:138
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration, units::Velocity start_velocity, units::Velocity end_velocity, bool reversed, units::Length track_width)
Constructs TrajectoryConfig with full parameters.
Definition trajectory_config.h:97
units::Velocity end_velocity() const
Definition trajectory_config.h:248
SplinePath::Order spline_order() const
Definition trajectory_config.h:270
units::Length sample_ds() const
Definition trajectory_config.h:257
void set_error_handler(std::function< void(const char *)> handler)
Sets error handler for trajectory generation failures.
Definition trajectory_config.h:186
units::Velocity max_velocity() const
Definition trajectory_config.h:251
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration, const TankKinematics &kinematics)
Constructs TrajectoryConfig with kinematics model constraint.
Definition trajectory_config.h:69
void set_sample_ds(units::Length sample_ds)
Sets spatial discretization step size for spline sampling.
Definition trajectory_config.h:180
void set_reversed(bool reversed)
Sets direction flag (reversed = true for driving backward).
Definition trajectory_config.h:177
void set_end_velocity(units::Velocity end_velocity)
Sets final trajectory velocity.
Definition trajectory_config.h:174
void set_track_width(units::Length track_width)
Adds a TankKinematicsConstraint using track width and config max velocity.
Definition trajectory_config.h:221
std::enable_if< std::is_base_of< TrajectoryConstraint, typenamestd::decay< Constraint >::type >::value, void >::type add_constraint(Constraint &&constraint)
Adds a user-defined TrajectoryConstraint.
Definition trajectory_config.h:199
TrajectoryConfig(units::Velocity max_velocity, units::Acceleration max_acceleration, bool reversed)
Constructs TrajectoryConfig with max velocity, max acceleration, and direction.
Definition trajectory_config.h:42
void add_event(const std::string &name, units::Length distance)
Adds an event triggered at a distance along the trajectory.
Definition trajectory_config.h:167
bool is_reversed() const
Definition trajectory_config.h:267
Configuration parameters and constraint container for generating trajectories.
Definition trajectory_config.h:21