RIT VEXU Core API
Loading...
Searching...
No Matches
rectangular_region_constraint.h
1#pragma once
2
3#include <memory>
4
5#include "core/math/geometry/pose2d.h"
6#include "core/math/geometry/translation2d.h"
7#include "core/math/trajectory/constraints/trajectory_constraint.h"
8#include "core/math/units.h"
9
10using namespace units::literals;
11
16class RectangularRegionConstraint : public TrajectoryConstraint {
17 public:
24 RectangularRegionConstraint(const Translation2d& bottom_left, const Translation2d& top_right,
25 const TrajectoryConstraint& constraint)
26 : bottom_left_(bottom_left), top_right_(top_right), constraint_(constraint.clone()) {}
27
28 units::Velocity max_velocity(const Pose2d& pose, units::Curvature curvature,
29 units::Velocity velocity) const override {
30 if (is_in_region(pose.translation())) {
31 return constraint_->max_velocity(pose, curvature, velocity);
32 }
33 return velocity;
34 }
35
36 TrajectoryConstraint::MinMax min_max_acceleration(const Pose2d& pose, units::Curvature curvature,
37 units::Velocity velocity) const override {
38 if (is_in_region(pose.translation())) {
39 return constraint_->min_max_acceleration(pose, curvature, velocity);
40 }
41 return {};
42 }
43
44 std::unique_ptr<TrajectoryConstraint> clone() const override {
45 return std::make_unique<RectangularRegionConstraint>(bottom_left_, top_right_, *constraint_);
46 }
47
48 private:
49 Translation2d bottom_left_;
50 Translation2d top_right_;
51 std::unique_ptr<TrajectoryConstraint> constraint_;
52
53 bool is_in_region(const Translation2d& point) const {
54 return point.x() >= bottom_left_.x() && point.x() <= top_right_.x() &&
55 point.y() >= bottom_left_.y() && point.y() <= top_right_.y();
56 }
57};
constexpr Q x() const
Gets the x component.
Definition translation2d.h:65
constexpr Q y() const
Gets the y component.
Definition translation2d.h:74
Definition pose2d.h:21
constexpr Translation2d translation() const
Gets the translation.
Definition pose2d.h:96
RectangularRegionConstraint(const Translation2d &bottom_left, const Translation2d &top_right, const TrajectoryConstraint &constraint)
Constructs a RectangularRegionConstraint.
Definition rectangular_region_constraint.h:24
virtual units::Velocity max_velocity(const Pose2d &pose, units::Curvature curvature, units::Velocity velocity) const =0
Computes maximum allowed velocity at a given pose and path curvature.