mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
The wpimath library is a new library designed to separate the reusable math functionality from the common utility library (wpiutil) and the hardware-dependent library (wpilibc/j). Package names / include file names were NOT changed to minimize breakage. In a future year it would be good to revamp these for a more uniform user experience and to reduce the risk of accidental naming conflicts. While theoretically all of this functionality could be placed into wpiutil, several pieces of this library (e.g. DARE) are very time-consuming to compile, so it's nice to avoid this expense for users who only want cscore or ntcore. It also allows for easy future separation of build tasks vs number of workers on memory-constrained machines. This moves the following functionality from wpiutil into wpimath: - Eigen - ejml - Drake - DARE - wpiutil.math package (Matrix etc) - units And the following functionality from wpilibc/j into wpimath: - Geometry - Kinematics - Spline - Trajectory - LinearFilter - MedianFilter - Feed-forward controllers
108 lines
3.0 KiB
C++
108 lines
3.0 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 "Translation2d.h"
|
|
|
|
namespace frc {
|
|
|
|
class Pose2d;
|
|
|
|
/**
|
|
* Represents a transformation for a Pose2d.
|
|
*/
|
|
class Transform2d {
|
|
public:
|
|
/**
|
|
* Constructs the transform that maps the initial pose to the final pose.
|
|
*
|
|
* @param initial The initial pose for the transformation.
|
|
* @param final The final pose for the transformation.
|
|
*/
|
|
Transform2d(Pose2d initial, Pose2d final);
|
|
|
|
/**
|
|
* Constructs a transform with the given translation and rotation components.
|
|
*
|
|
* @param translation Translational component of the transform.
|
|
* @param rotation Rotational component of the transform.
|
|
*/
|
|
Transform2d(Translation2d translation, Rotation2d rotation);
|
|
|
|
/**
|
|
* Constructs the identity transform -- maps an initial pose to itself.
|
|
*/
|
|
constexpr Transform2d() = default;
|
|
|
|
/**
|
|
* Returns the translation component of the transformation.
|
|
*
|
|
* @return Reference to the translational component of the transform.
|
|
*/
|
|
const Translation2d& Translation() const { return m_translation; }
|
|
|
|
/**
|
|
* Returns the X component of the transformation's translation.
|
|
*
|
|
* @return The x component of the transformation's translation.
|
|
*/
|
|
units::meter_t X() const { return m_translation.X(); }
|
|
|
|
/**
|
|
* Returns the Y component of the transformation's translation.
|
|
*
|
|
* @return The y component of the transformation's translation.
|
|
*/
|
|
units::meter_t Y() const { return m_translation.Y(); }
|
|
|
|
/**
|
|
* Returns the rotational component of the transformation.
|
|
*
|
|
* @return Reference to the rotational component of the transform.
|
|
*/
|
|
const Rotation2d& Rotation() const { return m_rotation; }
|
|
|
|
/**
|
|
* Invert the transformation. This is useful for undoing a transformation.
|
|
*
|
|
* @return The inverted transformation.
|
|
*/
|
|
Transform2d Inverse() const;
|
|
|
|
/**
|
|
* Scales the transform by the scalar.
|
|
*
|
|
* @param scalar The scalar.
|
|
* @return The scaled Transform2d.
|
|
*/
|
|
Transform2d operator*(double scalar) const {
|
|
return Transform2d(m_translation * scalar, m_rotation * scalar);
|
|
}
|
|
|
|
/**
|
|
* Checks equality between this Transform2d and another object.
|
|
*
|
|
* @param other The other object.
|
|
* @return Whether the two objects are equal.
|
|
*/
|
|
bool operator==(const Transform2d& other) const;
|
|
|
|
/**
|
|
* Checks inequality between this Transform2d and another object.
|
|
*
|
|
* @param other The other object.
|
|
* @return Whether the two objects are not equal.
|
|
*/
|
|
bool operator!=(const Transform2d& other) const;
|
|
|
|
private:
|
|
Translation2d m_translation;
|
|
Rotation2d m_rotation;
|
|
};
|
|
} // namespace frc
|