Brick
Loading...
Searching...
No Matches
centripetal_acceleration_constraint.h
1#pragma once
2
3#include <memory>
4
5#include "core/math/trajectory/constraints/trajectory_constraint.h"
6#include "core/math/units.h"
7
8using namespace units::literals;
9
10/**
11 * @brief Trajectory constraint that limits maximum velocity to prevent excessive centripetal
12 * acceleration.
13 */
14class CentripetalAccelerationConstraint : public TrajectoryConstraint {
15 public:
16 /**
17 * @brief Constructs a CentripetalAccelerationConstraint.
18 * @param max_centripetal_acceleration Maximum allowed centripetal acceleration.
19 */
20 explicit CentripetalAccelerationConstraint(units::Acceleration max_centripetal_acceleration)
21 : max_centripetal_acceleration_(max_centripetal_acceleration) {}
22
23 /**
24 * @brief Computes maximum allowed velocity based on path curvature and centripetal acceleration
25 * limits.
26 * @param pose 2D position and orientation.
27 * @param curvature Path curvature in rad/meter.
28 * @param velocity Candidate linear velocity.
29 * @return Constrained units::Velocity limit.
30 */
31 units::Velocity max_velocity(
32 const Pose2d& pose, units::Curvature curvature, units::Velocity velocity
33 ) const override {
34 if (units::abs(curvature) < 1e-9_radpm) {
35 return units::Velocity(std::numeric_limits<double>::max());
36 }
37 return sqrt(max_centripetal_acceleration_ / units::abs(curvature / 1_rad));
38 }
39
40 /**
41 * @brief Computes minimum and maximum allowed linear accelerations.
42 * @param pose 2D position and orientation.
43 * @param curvature Path curvature in rad/meter.
44 * @param speed Current scalar speed.
45 * @return MinMax acceleration bounds struct.
46 */
48 const Pose2d& pose, units::Curvature curvature, units::Velocity speed
49 ) const override {
50 return {};
51 }
52
53 /**
54 * @brief Creates an independent copy of this constraint.
55 * @return Unique pointer to cloned CentripetalAccelerationConstraint instance.
56 */
57 std::unique_ptr<TrajectoryConstraint> clone() const override {
58 return std::unique_ptr<TrajectoryConstraint>(new CentripetalAccelerationConstraint(*this));
59 }
60
61 private:
62 units::Acceleration max_centripetal_acceleration_; ///< Maximum centripetal acceleration
63};
CentripetalAccelerationConstraint(units::Acceleration max_centripetal_acceleration)
Constructs a CentripetalAccelerationConstraint.
Definition centripetal_acceleration_constraint.h:20
MinMax min_max_acceleration(const Pose2d &pose, units::Curvature curvature, units::Velocity speed) const override
Computes minimum and maximum allowed linear accelerations.
Definition centripetal_acceleration_constraint.h:47
units::Velocity max_velocity(const Pose2d &pose, units::Curvature curvature, units::Velocity velocity) const override
Computes maximum allowed velocity based on path curvature and centripetal acceleration limits.
Definition centripetal_acceleration_constraint.h:31
std::unique_ptr< TrajectoryConstraint > clone() const override
Creates an independent copy of this constraint.
Definition centripetal_acceleration_constraint.h:57
Definition pose2d.h:21
Definition units.h:691
Struct representing minimum and maximum allowed linear accelerations.
Definition trajectory_constraint.h:29