Brick
Loading...
Searching...
No Matches
trajectory_constraint.h
1#pragma once
2
3#include <limits>
4#include <memory>
5
6#include "core/math/geometry/pose2d.h"
7#include "core/math/units.h"
8
9using namespace units::literals;
10
11/**
12 * @brief Interface for defining physical trajectory velocity and acceleration constraints.
13 */
14class TrajectoryConstraint {
15 public:
16 TrajectoryConstraint() = default;
17
18 TrajectoryConstraint(const TrajectoryConstraint&) = default;
19 TrajectoryConstraint& operator=(const TrajectoryConstraint&) = default;
20
21 TrajectoryConstraint(TrajectoryConstraint&&) = default;
22 TrajectoryConstraint& operator=(TrajectoryConstraint&&) = default;
23
24 virtual ~TrajectoryConstraint() = default;
25
26 /**
27 * @brief Struct representing minimum and maximum allowed linear accelerations.
28 */
29 struct MinMax {
30 /**
31 * @brief Constructs MinMax with explicit minimum and maximum acceleration bounds.
32 * @param min_acceleration Lower acceleration limit.
33 * @param max_acceleration Upper acceleration limit.
34 */
37
38 /** @brief Default constructor setting unbounded limits [-Inf, +Inf]. */
40 : min_acceleration(-std::numeric_limits<double>::max()),
41 max_acceleration(std::numeric_limits<double>::max()) {}
42
43 units::Acceleration min_acceleration{
44 -std::numeric_limits<double>::max()
45 }; ///< Lower acceleration limit
46 units::Acceleration max_acceleration{
47 std::numeric_limits<double>::max()
48 }; ///< Upper acceleration limit
49 };
50
51 /**
52 * @brief Computes maximum allowed velocity at a given pose and path curvature.
53 * @param pose 2D position and orientation.
54 * @param curvature Path curvature in rad/meter.
55 * @param velocity Candidate linear velocity.
56 * @return Constrained units::Velocity limit.
57 */
58 virtual units::Velocity max_velocity(
59 const Pose2d& pose, units::Curvature curvature, units::Velocity velocity
60 ) const = 0;
61
62 /**
63 * @brief Computes minimum and maximum allowed linear accelerations at a given pose, curvature,
64 * and speed.
65 * @param pose 2D position and orientation.
66 * @param curvature Path curvature in rad/meter.
67 * @param speed Current scalar speed.
68 * @return MinMax acceleration bounds struct.
69 */
71 const Pose2d& pose, units::Curvature curvature, units::Velocity speed
72 ) const = 0;
73
74 /**
75 * @brief Creates an independent copy of this constraint.
76 * @return Unique pointer to cloned TrajectoryConstraint instance.
77 */
78 virtual std::unique_ptr<TrajectoryConstraint> clone() const = 0;
79};
Definition pose2d.h:21
virtual std::unique_ptr< TrajectoryConstraint > clone() const =0
Creates an independent copy of this constraint.
virtual MinMax min_max_acceleration(const Pose2d &pose, units::Curvature curvature, units::Velocity speed) const =0
Computes minimum and maximum allowed linear accelerations at a given pose, curvature,...
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.
Definition units.h:691
Struct representing minimum and maximum allowed linear accelerations.
Definition trajectory_constraint.h:29
units::Acceleration max_acceleration
Upper acceleration limit.
Definition trajectory_constraint.h:46
MinMax()
Default constructor setting unbounded limits [-Inf, +Inf].
Definition trajectory_constraint.h:39
MinMax(units::Acceleration min_acceleration, units::Acceleration max_acceleration)
Constructs MinMax with explicit minimum and maximum acceleration bounds.
Definition trajectory_constraint.h:35
units::Acceleration min_acceleration
Lower acceleration limit.
Definition trajectory_constraint.h:43