TrajoptLib
Library for generating time-optimal trajectories for FRC robots.
Loading...
Searching...
No Matches
linear_velocity_max_magnitude_constraint.hpp
1// Copyright (c) TrajoptLib contributors
2
3#pragma once
4
5#include <cassert>
6
7#include <sleipnir/autodiff/variable.hpp>
8#include <sleipnir/optimization/problem.hpp>
9
10#include "trajopt/geometry/pose2.hpp"
11#include "trajopt/geometry/translation2.hpp"
12#include "trajopt/util/symbol_exports.hpp"
13
14namespace trajopt {
15
17class TRAJOPT_DLLEXPORT LinearVelocityMaxMagnitudeConstraint {
18 public:
23 explicit LinearVelocityMaxMagnitudeConstraint(double max_magnitude)
24 : m_max_magnitude{max_magnitude} {
25 assert(max_magnitude >= 0.0);
26 }
27
36 void apply(
37 slp::Problem<double>& problem,
38 [[maybe_unused]] const Pose2v<double>& pose,
39 const Translation2v<double>& linear_velocity,
40 [[maybe_unused]] const slp::Variable<double>& angular_velocity,
41 [[maybe_unused]] const Translation2v<double>& linear_acceleration,
42 [[maybe_unused]] const slp::Variable<double>& angular_acceleration) {
43 if (m_max_magnitude == 0.0) {
44 problem.subject_to(linear_velocity.x() == 0.0);
45 problem.subject_to(linear_velocity.y() == 0.0);
46 } else {
47 problem.subject_to(linear_velocity.squared_norm() <=
48 m_max_magnitude * m_max_magnitude);
49 }
50 }
51
52 private:
53 double m_max_magnitude;
54};
55
56} // namespace trajopt
LinearVelocityMaxMagnitudeConstraint(double max_magnitude)
Definition linear_velocity_max_magnitude_constraint.hpp:23
void apply(slp::Problem< double > &problem, const Pose2v< double > &pose, const Translation2v< double > &linear_velocity, const slp::Variable< double > &angular_velocity, const Translation2v< double > &linear_acceleration, const slp::Variable< double > &angular_acceleration)
Definition linear_velocity_max_magnitude_constraint.hpp:36
constexpr const T & y() const
Definition translation2.hpp:60
constexpr auto squared_norm() const
Definition translation2.hpp:158
constexpr const T & x() const
Definition translation2.hpp:55