4#include "core/math/eigen_interface.h"
5#include "core/math/units.h"
28 constexpr Twist2d() : dx_(0), dy_(0), dtheta_(0) {}
48 const Eigen::Vector3d& twist_vector, units::Length length_unit,
49 units::Angle angle_unit = units::radians
51 : dx_{twist_vector[0], length_unit},
52 dy_{twist_vector[1], length_unit},
53 dtheta_{twist_vector[2], angle_unit} {}
56 constexpr units::Length
dx()
const {
return dx_; }
59 constexpr double dx(units::Length unit)
const {
return dx_.to(unit); }
62 constexpr void set_dx(units::Length val) { dx_ = val; }
65 constexpr units::Length
dy()
const {
return dy_; }
68 constexpr double dy(units::Length unit)
const {
return dy_.to(unit); }
71 constexpr void set_dy(units::Length val) { dy_ = val; }
74 constexpr units::Angle
dtheta()
const {
return dtheta_; }
77 constexpr double dtheta(units::Angle unit)
const {
return dtheta_.to(unit); }
80 constexpr void set_dtheta(units::Angle val) { dtheta_ = val; }
89 EVec<3>
as_vector(units::Length length_unit, units::Angle angle_unit = units::radians)
const {
90 return EVec<3>{dx_.to(length_unit), dy_.to(length_unit), dtheta_.to(angle_unit)};
95 return Twist2d{dx_ * scalar, dy_ * scalar, dtheta_ * scalar};
112 return dx_ == other.dx_ && dy_ == other.dy_ && dtheta_ == other.dtheta_;
120 const Twist2d& other, units::Length distance_tolerance = units::Length(1e-6),
121 units::Angle angle_tolerance = units::Angle(1e-6)
123 return units::hypot(dx_ - other.dx_, dy_ - other.dy_) <= distance_tolerance &&
124 units::abs(dtheta_ - other.dtheta_) <= angle_tolerance;
constexpr Twist2d & operator*=(double scalar)
Multiplies this twist by a scalar.
Definition twist2d.h:102
constexpr Twist2d & operator/=(double scalar)
Divides this twist by a scalar.
Definition twist2d.h:108
constexpr void set_dtheta(units::Angle val)
Sets the angle displacement.
Definition twist2d.h:80
constexpr units::Length dx() const
Gets the x displacement.
Definition twist2d.h:56
constexpr double dtheta(units::Angle unit) const
Gets the angle displacement in the supplied unit.
Definition twist2d.h:77
constexpr double dx(units::Length unit) const
Gets the x displacement in the supplied unit.
Definition twist2d.h:59
constexpr Twist2d(const Eigen::Vector3d &twist_vector, units::Length length_unit, units::Angle angle_unit=units::radians)
Definition twist2d.h:47
constexpr units::Length dy() const
Gets the y displacement.
Definition twist2d.h:65
constexpr Twist2d()
Default Constructor for Twist2d.
Definition twist2d.h:28
constexpr Twist2d(units::Length dx, units::Length dy, units::Angle dtheta)
Definition twist2d.h:37
friend constexpr Twist2d operator*(double scalar, const Twist2d &twist)
Multiplies a scalar by this twist.
Definition twist2d.h:99
constexpr bool operator==(const Twist2d &other) const
Checks exact equality between this and another twist.
Definition twist2d.h:111
EVec< 3 > as_vector(units::Length length_unit, units::Angle angle_unit=units::radians) const
Definition twist2d.h:89
constexpr void set_dy(units::Length val)
Sets the y displacement.
Definition twist2d.h:71
constexpr Twist2d operator*(double scalar) const
Multiplies this twist by a scalar.
Definition twist2d.h:94
constexpr double dy(units::Length unit) const
Gets the y displacement in the supplied unit.
Definition twist2d.h:68
constexpr void set_dx(units::Length val)
Sets the x displacement.
Definition twist2d.h:62
constexpr units::Angle dtheta() const
Gets the Angle displacement.
Definition twist2d.h:74
constexpr Twist2d operator/(double scalar) const
Divides this twist by a scalar.
Definition twist2d.h:105
constexpr bool is_near(const Twist2d &other, units::Length distance_tolerance=units::Length(1e-6), units::Angle angle_tolerance=units::Angle(1e-6)) const
Definition twist2d.h:119