WPILibC++ 2025.3.1
Loading...
Searching...
No Matches
DifferentialDriveAccelerationLimiter.h
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#include <wpi/SymbolExports.h>
11
14#include "units/acceleration.h"
16#include "units/length.h"
17#include "units/velocity.h"
18#include "units/voltage.h"
19
20namespace frc {
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
27 * LinearSystemId.
28 */
30 public:
31 /**
32 * Constructs a DifferentialDriveAccelerationLimiter.
33 *
34 * @param system The differential drive dynamics.
35 * @param trackwidth The distance between the differential drive's left and
36 * right wheels.
37 * @param maxLinearAccel The maximum linear acceleration.
38 * @param maxAngularAccel The maximum angular acceleration.
39 */
41 LinearSystem<2, 2, 2> system, units::meter_t trackwidth,
42 units::meters_per_second_squared_t maxLinearAccel,
43 units::radians_per_second_squared_t maxAngularAccel)
44 : DifferentialDriveAccelerationLimiter(system, trackwidth,
45 -maxLinearAccel, maxLinearAccel,
46 maxAngularAccel) {}
47
48 /**
49 * Constructs a DifferentialDriveAccelerationLimiter.
50 *
51 * @param system The differential drive dynamics.
52 * @param trackwidth The distance between the differential drive's left and
53 * right wheels.
54 * @param minLinearAccel The minimum (most negative) linear acceleration.
55 * @param maxLinearAccel The maximum (most positive) linear acceleration.
56 * @param maxAngularAccel The maximum angular acceleration.
57 * @throws std::invalid_argument if minimum linear acceleration is greater
58 * than maximum linear acceleration
59 */
61 LinearSystem<2, 2, 2> system, units::meter_t trackwidth,
62 units::meters_per_second_squared_t minLinearAccel,
63 units::meters_per_second_squared_t maxLinearAccel,
64 units::radians_per_second_squared_t maxAngularAccel)
65 : m_system{std::move(system)},
66 m_trackwidth{trackwidth},
67 m_minLinearAccel{minLinearAccel},
68 m_maxLinearAccel{maxLinearAccel},
69 m_maxAngularAccel{maxAngularAccel} {
70 if (minLinearAccel > maxLinearAccel) {
71 throw std::invalid_argument(
72 "maxLinearAccel must be greater than minLinearAccel");
73 }
74 }
75
76 /**
77 * Returns the next voltage pair subject to acceleration constraints.
78 *
79 * @param leftVelocity The left wheel velocity.
80 * @param rightVelocity The right wheel velocity.
81 * @param leftVoltage The unconstrained left motor voltage.
82 * @param rightVoltage The unconstrained right motor voltage.
83 * @return The constrained wheel voltages.
84 */
86 units::meters_per_second_t leftVelocity,
87 units::meters_per_second_t rightVelocity, units::volt_t leftVoltage,
88 units::volt_t rightVoltage);
89
90 private:
91 LinearSystem<2, 2, 2> m_system;
92 units::meter_t m_trackwidth;
93 units::meters_per_second_squared_t m_minLinearAccel;
94 units::meters_per_second_squared_t m_maxLinearAccel;
95 units::radians_per_second_squared_t m_maxAngularAccel;
96};
97
98} // namespace frc
#define WPILIB_DLLEXPORT
Definition SymbolExports.h:36
Filters the provided voltages to limit a differential drive's linear and angular acceleration.
Definition DifferentialDriveAccelerationLimiter.h:29
DifferentialDriveAccelerationLimiter(LinearSystem< 2, 2, 2 > system, units::meter_t trackwidth, units::meters_per_second_squared_t minLinearAccel, units::meters_per_second_squared_t maxLinearAccel, units::radians_per_second_squared_t maxAngularAccel)
Constructs a DifferentialDriveAccelerationLimiter.
Definition DifferentialDriveAccelerationLimiter.h:60
DifferentialDriveWheelVoltages Calculate(units::meters_per_second_t leftVelocity, units::meters_per_second_t rightVelocity, units::volt_t leftVoltage, units::volt_t rightVoltage)
Returns the next voltage pair subject to acceleration constraints.
DifferentialDriveAccelerationLimiter(LinearSystem< 2, 2, 2 > system, units::meter_t trackwidth, units::meters_per_second_squared_t maxLinearAccel, units::radians_per_second_squared_t maxAngularAccel)
Constructs a DifferentialDriveAccelerationLimiter.
Definition DifferentialDriveAccelerationLimiter.h:40
A plant defined using state-space notation.
Definition LinearSystem.h:35
Definition CAN.h:11
Implement std::hash so that hash_code can be used in STL containers.
Definition PointerIntPair.h:280
Motor voltages for a differential drive.
Definition DifferentialDriveWheelVoltages.h:14