6#include "core/math/kinematics/tank_kinematics.h"
7#include "core/math/trajectory/constraints/trajectory_constraint.h"
8#include "core/math/units.h"
25 units::Length track_width, units::Velocity max_speed,
26 units::Acceleration max_acceleration = 10000_inps2
28 : kinematics_(track_width), max_speed_(max_speed), max_acceleration_(max_acceleration) {}
38 units::Acceleration max_acceleration = 10000_inps2
40 : kinematics_(kinematics), max_speed_(max_speed), max_acceleration_(max_acceleration) {}
51 const Pose2d& pose, units::Curvature curvature, units::Velocity velocity
53 units::AngularVelocity omega = velocity * curvature;
58 units::Velocity real_max_speed =
59 units::max(units::abs(wheel_speeds.
left), units::abs(wheel_speeds.
right));
61 if (real_max_speed > max_speed_) {
62 return velocity * (max_speed_ / real_max_speed);
76 const Pose2d& pose, units::Curvature curvature, units::Velocity speed
84 1.0 - (curvature.to(units::radpm) * kinematics_.track_width.to(units::m)) / 2.0;
86 1.0 + (curvature.to(units::radpm) * kinematics_.track_width.to(units::m)) / 2.0;
88 units::Acceleration max_a = max_acceleration_;
89 units::Acceleration min_a = -max_acceleration_;
91 double factors[2] = {left_factor, right_factor};
92 for (
int i = 0; i < 2; ++i) {
93 double factor = factors[i];
94 if (std::abs(factor) > 1e-6) {
95 units::Acceleration limit = max_acceleration_ / std::abs(factor);
96 max_a = units::min(max_a, limit);
97 min_a = units::max(min_a, -limit);
101 return {min_a, max_a};
108 std::unique_ptr<TrajectoryConstraint>
clone()
const override {
114 units::Velocity max_speed_;
115 units::Acceleration max_acceleration_;
MinMax min_max_acceleration(const Pose2d &pose, units::Curvature curvature, units::Velocity speed) const override
Computes minimum and maximum allowed linear accelerations.
Definition tank_kinematics_constraint.h:75
std::unique_ptr< TrajectoryConstraint > clone() const override
Creates an independent copy of this constraint.
Definition tank_kinematics_constraint.h:108
TankKinematicsConstraint(units::Length track_width, units::Velocity max_speed, units::Acceleration max_acceleration=10000_inps2)
Constructs a TankKinematicsConstraint.
Definition tank_kinematics_constraint.h:24
units::Velocity max_velocity(const Pose2d &pose, units::Curvature curvature, units::Velocity velocity) const override
Computes maximum allowed chassis velocity to keep wheel speeds within limits during turns.
Definition tank_kinematics_constraint.h:50
TankKinematicsConstraint(const TankKinematics &kinematics, units::Velocity max_speed, units::Acceleration max_acceleration=10000_inps2)
Constructs a TankKinematicsConstraint from TankKinematics.
Definition tank_kinematics_constraint.h:36
Helper class that converts a chassis velocity (vx and omega) to left and right wheel velocities for a...
Definition tank_kinematics.h:19
Represents robot chassis velocities.
Definition chassis_velocities.h:14
Represents the left and right velocities of a tank drive.
Definition tank_wheel_velocities.h:9
units::Velocity right
Right wheel velocity.
Definition tank_wheel_velocities.h:13
units::Velocity left
Left wheel velocity.
Definition tank_wheel_velocities.h:11
Struct representing minimum and maximum allowed linear accelerations.
Definition trajectory_constraint.h:29