mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-23 01:21:42 +00:00
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) 2019-2020 FIRST. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include "units/angle.h"
|
|
#include "units/length.h"
|
|
#include "units/math.h"
|
|
|
|
namespace frc {
|
|
/**
|
|
* A change in distance along arc since the last pose update. We can use ideas
|
|
* from differential calculus to create new Pose2ds from a Twist2d and vise
|
|
* versa.
|
|
*
|
|
* A Twist can be used to represent a difference between two poses.
|
|
*/
|
|
struct Twist2d {
|
|
/**
|
|
* Linear "dx" component
|
|
*/
|
|
units::meter_t dx = 0_m;
|
|
|
|
/**
|
|
* Linear "dy" component
|
|
*/
|
|
units::meter_t dy = 0_m;
|
|
|
|
/**
|
|
* Angular "dtheta" component (radians)
|
|
*/
|
|
units::radian_t dtheta = 0_rad;
|
|
|
|
/**
|
|
* Checks equality between this Twist2d and another object.
|
|
*
|
|
* @param other The other object.
|
|
* @return Whether the two objects are equal.
|
|
*/
|
|
bool operator==(const Twist2d& other) const {
|
|
return units::math::abs(dx - other.dx) < 1E-9_m &&
|
|
units::math::abs(dy - other.dy) < 1E-9_m &&
|
|
units::math::abs(dtheta - other.dtheta) < 1E-9_rad;
|
|
}
|
|
|
|
/**
|
|
* Checks inequality between this Twist2d and another object.
|
|
*
|
|
* @param other The other object.
|
|
* @return Whether the two objects are not equal.
|
|
*/
|
|
bool operator!=(const Twist2d& other) const { return !operator==(other); }
|
|
};
|
|
} // namespace frc
|