3#include <units/acceleration.h>
4#include <units/force.h>
5#include <units/current.h>
8#include "pathplanner/lib/util/GeometryUtil.h"
9#include "pathplanner/lib/util/FlippingUtil.h"
11namespace pathplanner {
14 std::vector<units::meters_per_second_squared_t> accelerations;
15 std::vector<units::newton_t> linearForces;
16 std::vector<units::ampere_t> torqueCurrents;
17 std::vector<units::newton_t> robotRelativeForcesX;
18 std::vector<units::newton_t> robotRelativeForcesY;
28 < units::meters_per_second_squared_t > (numModules, 0_mps_sq),
29 std::vector < units::newton_t > (numModules, 0_N), std::vector
30 < units::ampere_t > (numModules, 0_A), std::vector
31 < units::newton_t > (numModules, 0_N), std::vector
32 < units::newton_t > (numModules, 0_N) };
36 const double t)
const {
38 endVal.accelerations, t), interpolateVector(linearForces,
39 endVal.linearForces, t), interpolateVector(torqueCurrents,
40 endVal.torqueCurrents, t), interpolateVector(
41 robotRelativeForcesX, endVal.robotRelativeForcesX, t),
42 interpolateVector(robotRelativeForcesY,
43 endVal.robotRelativeForcesY, t) };
53 if (accelerations.size() != 2) {
54 throw std::runtime_error(
55 "Feedforwards should only be reversed for differential drive trains");
59 units::meters_per_second_squared_t> { -accelerations[1],
60 -accelerations[0] }, std::vector<units::newton_t> {
61 -linearForces[1], -linearForces[0] }, std::vector<
62 units::ampere_t> { -torqueCurrents[1], -torqueCurrents[0] },
63 std::vector<units::newton_t> { -robotRelativeForcesX[1],
64 -robotRelativeForcesX[0] },
65 std::vector<units::newton_t> { -robotRelativeForcesY[1],
66 -robotRelativeForcesY[0] } };
84 template<
class UnitType,
class = std::enable_if_t<
85 units::traits::is_unit_t<UnitType>::value>>
86 static constexpr std::vector<UnitType> interpolateVector(
87 const std::vector<UnitType> &a,
const std::vector<UnitType> &b,
89 std::vector<UnitType> ret;
90 for (
size_t i = 0; i < a.size(); i++) {
91 ret.emplace_back(GeometryUtil::unitLerp(a[i], b[i], t));
static std::vector< UnitType > flipFeedforwardYs(const std::vector< UnitType > &feedforwardYs)
Definition: FlippingUtil.h:135
static std::vector< UnitType > flipFeedforwards(const std::vector< UnitType > &feedforwards)
Definition: FlippingUtil.h:95
static std::vector< UnitType > flipFeedforwardXs(const std::vector< UnitType > &feedforwardXs)
Definition: FlippingUtil.h:121
Definition: DriveFeedforwards.h:12
DriveFeedforwards reverse() const
Definition: DriveFeedforwards.h:52
DriveFeedforwards flip() const
Definition: DriveFeedforwards.h:75
static DriveFeedforwards zeros(const size_t numModules)
Definition: DriveFeedforwards.h:26