6#include "core/math/kinematics/tank_kinematics.h"
7#include "core/math/trajectory/constraints/trajectory_constraint.h"
8#include "core/math/units.h"
10using namespace units::literals;
25 units::Acceleration max_acceleration = 10000_inps2)
26 : kinematics_(track_width), max_speed_(max_speed), max_acceleration_(max_acceleration) {}
35 units::Acceleration max_acceleration = 10000_inps2)
36 : kinematics_(kinematics), max_speed_(max_speed), max_acceleration_(max_acceleration) {}
47 units::Velocity velocity)
const override {
48 units::AngularVelocity omega = velocity * curvature;
53 units::Velocity real_max_speed =
54 units::max(units::abs(wheel_speeds.
left), units::abs(wheel_speeds.
right));
56 if (real_max_speed > max_speed_) {
57 return velocity * (max_speed_ / real_max_speed);
71 units::Velocity speed)
const override {
78 1.0 - (curvature.to(units::radpm) * kinematics_.track_width.to(units::m)) / 2.0;
80 1.0 + (curvature.to(units::radpm) * kinematics_.track_width.to(units::m)) / 2.0;
82 units::Acceleration max_a = max_acceleration_;
83 units::Acceleration min_a = -max_acceleration_;
85 double factors[2] = {left_factor, right_factor};
86 for (
int i = 0; i < 2; ++i) {
87 double factor = factors[i];
88 if (std::abs(factor) > 1e-6) {
89 units::Acceleration limit = max_acceleration_ / std::abs(factor);
90 max_a = units::min(max_a, limit);
91 min_a = units::max(min_a, -limit);
95 return {min_a, max_a};
102 std::unique_ptr<TrajectoryConstraint>
clone()
const override {
108 units::Velocity max_speed_;
109 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:70
std::unique_ptr< TrajectoryConstraint > clone() const override
Creates an independent copy of this constraint.
Definition tank_kinematics_constraint.h:102
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:46
TankKinematicsConstraint(const TankKinematics &kinematics, units::Velocity max_speed, units::Acceleration max_acceleration=10000_inps2)
Constructs a TankKinematicsConstraint from TankKinematics.
Definition tank_kinematics_constraint.h:34
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