TrajoptLib
Library for generating time-optimal trajectories for FRC robots.
Loading...
Searching...
No Matches
angular_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
18 public:
23 explicit AngularVelocityMaxMagnitudeConstraint(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 [[maybe_unused]] const Translation2v<double>& linear_velocity,
40 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(angular_velocity == 0.0);
45 } else {
46 problem.subject_to(
47 slp::bounds(-m_max_magnitude, angular_velocity, m_max_magnitude));
48 }
49 }
50
51 private:
52 double m_max_magnitude;
53};
54
55} // namespace trajopt
AngularVelocityMaxMagnitudeConstraint(double max_magnitude)
Definition angular_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 angular_velocity_max_magnitude_constraint.hpp:36