WPILibC++ 2027.0.0-alpha-4
Loading...
Searching...
No Matches
DifferentialDriveAccelerationLimiter.hpp
Go to the documentation of this file.
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5#pragma once
6
7#include <utility>
8
9#include <Eigen/Core>
10
13#include "wpi/units/acceleration.hpp"
14#include "wpi/units/angular_acceleration.hpp"
15#include "wpi/units/length.hpp"
16#include "wpi/units/velocity.hpp"
17#include "wpi/units/voltage.hpp"
19
20namespace wpi::math {
21
22/**
23 * Filters the provided voltages to limit a differential drive's linear and
24 * angular acceleration.
25 *
26 * The differential drive model can be created via the functions in Models.
27 */
29 public:
30 /**
31 * Constructs a DifferentialDriveAccelerationLimiter.
32 *
33 * @param system The differential drive dynamics.
34 * @param trackwidth The distance between the differential drive's left and
35 * right wheels.
36 * @param maxLinearAccel The maximum linear acceleration.
37 * @param maxAngularAccel The maximum angular acceleration.
38 */
40 LinearSystem<2, 2, 2> system, wpi::units::meter_t trackwidth,
41 wpi::units::meters_per_second_squared_t maxLinearAccel,
42 wpi::units::radians_per_second_squared_t maxAngularAccel)
43 : DifferentialDriveAccelerationLimiter(system, trackwidth,
44 -maxLinearAccel, maxLinearAccel,
45 maxAngularAccel) {}
46
47 /**
48 * Constructs a DifferentialDriveAccelerationLimiter.
49 *
50 * @param system The differential drive dynamics.
51 * @param trackwidth The distance between the differential drive's left and
52 * right wheels.
53 * @param minLinearAccel The minimum (most negative) linear acceleration.
54 * @param maxLinearAccel The maximum (most positive) linear acceleration.
55 * @param maxAngularAccel The maximum angular acceleration.
56 * @throws std::invalid_argument if minimum linear acceleration is greater
57 * than maximum linear acceleration
58 */
60 LinearSystem<2, 2, 2> system, wpi::units::meter_t trackwidth,
61 wpi::units::meters_per_second_squared_t minLinearAccel,
62 wpi::units::meters_per_second_squared_t maxLinearAccel,
63 wpi::units::radians_per_second_squared_t maxAngularAccel)
64 : m_system{std::move(system)},
65 m_trackwidth{trackwidth},
66 m_minLinearAccel{minLinearAccel},
67 m_maxLinearAccel{maxLinearAccel},
68 m_maxAngularAccel{maxAngularAccel} {
69 if (minLinearAccel > maxLinearAccel) {
70 throw std::invalid_argument(
71 "maxLinearAccel must be greater than minLinearAccel");
72 }
73 }
74
75 /**
76 * Returns the next voltage pair subject to acceleration constraints.
77 *
78 * @param leftVelocity The left wheel velocity.
79 * @param rightVelocity The right wheel velocity.
80 * @param leftVoltage The unconstrained left motor voltage.
81 * @param rightVoltage The unconstrained right motor voltage.
82 * @return The constrained wheel voltages.
83 */
85 wpi::units::meters_per_second_t leftVelocity,
86 wpi::units::meters_per_second_t rightVelocity,
87 wpi::units::volt_t leftVoltage, wpi::units::volt_t rightVoltage);
88
89 private:
90 LinearSystem<2, 2, 2> m_system;
91 wpi::units::meter_t m_trackwidth;
92 wpi::units::meters_per_second_squared_t m_minLinearAccel;
93 wpi::units::meters_per_second_squared_t m_maxLinearAccel;
94 wpi::units::radians_per_second_squared_t m_maxAngularAccel;
95};
96
97} // namespace wpi::math
#define WPILIB_DLLEXPORT
Definition SymbolExports.hpp:36
DifferentialDriveWheelVoltages Calculate(wpi::units::meters_per_second_t leftVelocity, wpi::units::meters_per_second_t rightVelocity, wpi::units::volt_t leftVoltage, wpi::units::volt_t rightVoltage)
Returns the next voltage pair subject to acceleration constraints.
DifferentialDriveAccelerationLimiter(LinearSystem< 2, 2, 2 > system, wpi::units::meter_t trackwidth, wpi::units::meters_per_second_squared_t minLinearAccel, wpi::units::meters_per_second_squared_t maxLinearAccel, wpi::units::radians_per_second_squared_t maxAngularAccel)
Constructs a DifferentialDriveAccelerationLimiter.
Definition DifferentialDriveAccelerationLimiter.hpp:59
DifferentialDriveAccelerationLimiter(LinearSystem< 2, 2, 2 > system, wpi::units::meter_t trackwidth, wpi::units::meters_per_second_squared_t maxLinearAccel, wpi::units::radians_per_second_squared_t maxAngularAccel)
Constructs a DifferentialDriveAccelerationLimiter.
Definition DifferentialDriveAccelerationLimiter.hpp:39
A plant defined using state-space notation.
Definition LinearSystem.hpp:35
Definition StringMap.hpp:773
Definition LinearSystem.hpp:20
Motor voltages for a differential drive.
Definition DifferentialDriveWheelVoltages.hpp:14