Brick
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
12/**
13 * @brief Enforces a TrajectoryConstraint only when the robot's translation
14 * falls within a specified 2D rectangular bounding box.
15 */
16class RectangularRegionConstraint : public TrajectoryConstraint {
17 public:
18 /**
19 * @brief Constructs a RectangularRegionConstraint.
20 * @param bottom_left The bottom-left coordinate of the bounding box.
21 * @param top_right The top-right coordinate of the bounding box.
22 * @param constraint The child constraint to apply when inside the box.
23 */
25 const Translation2d& bottom_left, const Translation2d& top_right,
26 const TrajectoryConstraint& constraint
27 )
28 : bottom_left_(bottom_left), top_right_(top_right), constraint_(constraint.clone()) {}
29
30 units::Velocity max_velocity(
31 const Pose2d& pose, units::Curvature curvature, units::Velocity velocity
32 ) const override {
33 if (is_in_region(pose.translation())) {
34 return constraint_->max_velocity(pose, curvature, velocity);
35 }
36 return velocity;
37 }
38
40 const Pose2d& pose, units::Curvature curvature, units::Velocity velocity
41 ) const override {
42 if (is_in_region(pose.translation())) {
43 return constraint_->min_max_acceleration(pose, curvature, velocity);
44 }
45 return {};
46 }
47
48 std::unique_ptr<TrajectoryConstraint> clone() const override {
49 return std::make_unique<RectangularRegionConstraint>(bottom_left_, top_right_, *constraint_);
50 }
51
52 private:
53 Translation2d bottom_left_;
54 Translation2d top_right_;
55 std::unique_ptr<TrajectoryConstraint> constraint_;
56
57 bool is_in_region(const Translation2d& point) const {
58 return point.x() >= bottom_left_.x() && point.x() <= top_right_.x() &&
59 point.y() >= bottom_left_.y() && point.y() <= top_right_.y();
60 }
61};
constexpr Q x() const
Gets the x component.
Definition translation2d.h:64
constexpr Q y() const
Gets the y component.
Definition translation2d.h:73
Definition pose2d.h:21
constexpr Translation2d translation() const
Gets the translation.
Definition pose2d.h:95
std::unique_ptr< TrajectoryConstraint > clone() const override
Creates an independent copy of this constraint.
Definition rectangular_region_constraint.h:48
RectangularRegionConstraint(const Translation2d &bottom_left, const Translation2d &top_right, const TrajectoryConstraint &constraint)
Constructs a RectangularRegionConstraint.
Definition rectangular_region_constraint.h:24
units::Velocity max_velocity(const Pose2d &pose, units::Curvature curvature, units::Velocity velocity) const override
Computes maximum allowed velocity at a given pose and path curvature.
Definition rectangular_region_constraint.h:30
TrajectoryConstraint::MinMax min_max_acceleration(const Pose2d &pose, units::Curvature curvature, units::Velocity velocity) const override
Computes minimum and maximum allowed linear accelerations at a given pose, curvature,...
Definition rectangular_region_constraint.h:39
Definition units.h:691
Struct representing minimum and maximum allowed linear accelerations.
Definition trajectory_constraint.h:29