13#include <sleipnir/autodiff/variable.hpp>
14#include <sleipnir/optimization/problem.hpp>
15#include <sleipnir/optimization/solver/exit_status.hpp>
17#include "trajopt/geometry/translation2.hpp"
18#include "trajopt/path/path.hpp"
19#include "trajopt/path/path_builder.hpp"
20#include "trajopt/util/symbol_exports.hpp"
53 std::vector<double>
dt;
56 std::vector<double>
x;
59 std::vector<double>
y;
68 std::vector<double>
vx;
71 std::vector<double>
vy;
77 std::vector<double>
ax;
80 std::vector<double>
ay;
93class TRAJOPT_DLLEXPORT SwerveTrajectorySample {
131 SwerveTrajectorySample() =
default;
168class TRAJOPT_DLLEXPORT SwerveTrajectory {
173 SwerveTrajectory() =
default;
186 for (
size_t sample = 0; sample < solution.
x.size(); ++sample) {
188 ts, solution.
x[sample], solution.
y[sample],
190 solution.
vx[sample], solution.
vy[sample], solution.
omega[sample],
191 solution.
ax[sample], solution.
ay[sample], solution.
alpha[sample],
193 ts += solution.
dt[sample];
199using SwervePath = Path<SwerveDrivetrain, SwerveSolution>;
204using SwervePathBuilder = PathBuilder<SwerveDrivetrain, SwerveSolution>;
224 std::expected<SwerveSolution, slp::ExitStatus>
generate(
225 bool diagnostics =
false);
232 std::vector<slp::Variable<double>> x;
233 std::vector<slp::Variable<double>> y;
234 std::vector<slp::Variable<double>> cosθ;
235 std::vector<slp::Variable<double>> sinθ;
236 std::vector<slp::Variable<double>> vx;
237 std::vector<slp::Variable<double>> vy;
238 std::vector<slp::Variable<double>> ω;
239 std::vector<slp::Variable<double>> ax;
240 std::vector<slp::Variable<double>> ay;
241 std::vector<slp::Variable<double>> α;
244 std::vector<std::vector<slp::Variable<double>>> Fx;
245 std::vector<std::vector<slp::Variable<double>>> Fy;
248 std::vector<slp::Variable<double>> dts;
251 std::vector<size_t> Ns;
253 slp::Problem<double> problem;
std::expected< SwerveSolution, slp::ExitStatus > generate(bool diagnostics=false)
SwerveTrajectoryGenerator(SwervePathBuilder path_builder, int64_t handle=0)
double acceleration_y
The acceleration's y component.
Definition swerve_trajectory_generator.hpp:120
double timestamp
The timestamp.
Definition swerve_trajectory_generator.hpp:96
double acceleration_x
The acceleration's x component.
Definition swerve_trajectory_generator.hpp:117
double x
The x coordinate.
Definition swerve_trajectory_generator.hpp:99
double angular_acceleration
The angular acceleration.
Definition swerve_trajectory_generator.hpp:123
std::vector< double > module_forces_y
The force on each module in the Y direction.
Definition swerve_trajectory_generator.hpp:129
double angular_velocity
The angular velocity.
Definition swerve_trajectory_generator.hpp:114
double velocity_x
The velocity's x component.
Definition swerve_trajectory_generator.hpp:108
double velocity_y
The velocity's y component.
Definition swerve_trajectory_generator.hpp:111
double y
The y coordinate.
Definition swerve_trajectory_generator.hpp:102
SwerveTrajectorySample(double timestamp, double x, double y, double heading, double velocity_x, double velocity_y, double angular_velocity, double acceleration_x, double acceleration_y, double angular_acceleration, std::vector< double > module_forces_x, std::vector< double > module_forces_y)
Definition swerve_trajectory_generator.hpp:147
std::vector< double > module_forces_x
The force on each module in the X direction.
Definition swerve_trajectory_generator.hpp:126
double heading
The heading.
Definition swerve_trajectory_generator.hpp:105
SwerveTrajectory(std::vector< SwerveTrajectorySample > samples)
Definition swerve_trajectory_generator.hpp:178
SwerveTrajectory(const SwerveSolution &solution)
Definition swerve_trajectory_generator.hpp:184
std::vector< SwerveTrajectorySample > samples
The samples that make up the trajectory.
Definition swerve_trajectory_generator.hpp:171
A swerve drivetrain physical model.
Definition swerve_trajectory_generator.hpp:25
double mass
The mass of the robot (kg).
Definition swerve_trajectory_generator.hpp:27
double wheel_max_angular_velocity
Maximum angular velocity of each wheel (rad/s).
Definition swerve_trajectory_generator.hpp:36
double wheel_cof
The Coefficient of Friction (CoF) of the wheels.
Definition swerve_trajectory_generator.hpp:42
double wheel_radius
Radius of the wheels (m).
Definition swerve_trajectory_generator.hpp:33
std::vector< Translation2d > modules
Definition swerve_trajectory_generator.hpp:47
double wheel_max_torque
Maximum torque applied to each wheel (N−m).
Definition swerve_trajectory_generator.hpp:39
double moi
The moment of inertia of the robot about the origin (kg−m²).
Definition swerve_trajectory_generator.hpp:30
The swerve drive trajectory optimization solution.
Definition swerve_trajectory_generator.hpp:51
std::vector< double > ay
The y accelerations.
Definition swerve_trajectory_generator.hpp:80
std::vector< double > dt
Times between samples.
Definition swerve_trajectory_generator.hpp:53
std::vector< double > alpha
The angular accelerations.
Definition swerve_trajectory_generator.hpp:83
std::vector< double > thetacos
Heading cosine.
Definition swerve_trajectory_generator.hpp:62
std::vector< double > y
Y positions.
Definition swerve_trajectory_generator.hpp:59
std::vector< double > vy
The y velocities.
Definition swerve_trajectory_generator.hpp:71
std::vector< std::vector< double > > module_fy
The y forces for each module.
Definition swerve_trajectory_generator.hpp:89
std::vector< double > ax
The x accelerations.
Definition swerve_trajectory_generator.hpp:77
std::vector< double > vx
The x velocities.
Definition swerve_trajectory_generator.hpp:68
std::vector< double > omega
The angular velocities.
Definition swerve_trajectory_generator.hpp:74
std::vector< double > thetasin
Heading sine.
Definition swerve_trajectory_generator.hpp:65
std::vector< std::vector< double > > module_fx
The x forces for each module.
Definition swerve_trajectory_generator.hpp:86
std::vector< double > x
X positions.
Definition swerve_trajectory_generator.hpp:56